数据库入门-2

Intermediate SQL

Join连接

1
2
3
4
5
6
7
8
9
10
11
-- join 连接 做笛卡儿积,然后筛选掉不符合条件的行
-- join 要跟着 on 写连接的条件,不删除重复的列,删除有空值对应不上的行
select * from instructor inner join teaches on instructor.ID = teaches.ID;
select * from instructor, teaches where instructor.ID = teaches.ID;
-- 这两句等价
-- 作用:当某一项属性为空值
-- 四种连接:inner join/left outer join/right outer join/full outer join
-- outer join
-- left outer join: 保留左边的表的所有行,右边没有的使用NULL
-- right outer join: 保留右边的表所有行,左边没有的使用NULL
-- full outer join: 保留左右两边的表的所有行,没有的值使用NULL

View视图

  • 视图提供一种机制向一些特定的用户来隐藏真实的数据
  • 视图是虚拟的,并不创建真实的关系而是数据库引擎通过使用 SQL 语句来重建数据。因此视图总是显示最新的数据
    1
    2
    3
    4
    5
    6
    -- 视图
    create view departments_total_salary(dept_name, total_salary) as
    select dept_name, sum (salary)
    from instructor group by dept_name;
    -- 可以通过其他视图来创建视图
    -- 为了防止更新出错,大部分数据操作工具只允许在简单的视图上进行更新(插入约束,不被允许查看的值不允许为空,此时插入数据会失败)

Transaction事务

  • 包括一系列的查询和更新语句
  • Commit work(提交事务)和Rollback work(回滚事务)
  • 后面详细说明

Integrity Constraints完整性约束

  • 完整性约束保护数据库不被意外破坏
  • 单个关系上的完整性约束
    • not null
    • primary key
    • unique
    • check(P),where P is a predicate
  • Referential Integrity参照完整性
  • Cascading Actions in Referential Integrity级联操作中的参照完整性
    • 通过外码实现
      1
      2
      3
      4
      5
      6
      7
      8
      create table course
      ( course_id char(5) primary key, title varchar(20),
      dept_name varchar(20) references department);
      create table course
      ( dept_name varchar(20),
      foreign key (dept_name) references department
      on delete cascade
      on update cascade )
分享到