并交差的处理
SQL语言:并运算UNION, 交运算INTERSECT, 差运算EXCEPT 基本语法:
xxxxxxxxxx
子查询 {Union[All] | Intersect [All] | Except [All] 子查询}
如果带all表示保留重复元组,如果不带all表示删除重复元组
eg.求学过002号课的同学或学过003号课的同学学号
xxxxxxxxxx
Select Snum From SC where Cnum = '002'
UNION
Select Snum From SC where Cnum = '003';
eg.假定所有学生都有选课,求没学过002号课程的学生学号
xxxxxxxxxx
Select Distinct Snum From SC
EXCEPT
Select Snum SC where Cnum = '002';
差运算符Except也没有增强SQL的表达能力,没有Except,SQL也可以用其他方式表达同样的查询需求。只是有了Except更容易表达一些,但增加了SQL语言的不唯一性
空值处理
- 空值检测:is [not] null 示例:找出年龄为空的学生姓名
xxxxxxxxxx
Select Sname From Student
Where Sage is null;
不能写成 Where Sage = null; 空值是不参与运算的
内连接,外连接
连接类型:inner join, left outer join, right outer join, full outer join
连接条件:natural, on <连接条件>, using(col, col, col...)
inner Join: 即关系代数中的theta-连接运算
表1 Left Outer Join表2, 连接后,表1的任何元组t都会出现在结果表中,如表2中有满足连接条件的元组s, 则t与s连接;否则t与空值元组连接;
natural连接:出现在结果关系中的两个连接关系的元组在公共属性上取值相等,且公共属性只出现一次
on <连接条件> 出现在结果关系中的两个连接关系的元组取值满足连接条件,且公共属性出现两次
连接中使用using (Col1, Col2, ..., Coln) (Col1, Col2, ..., Coln)是两个连接关系的公共属性的子集,元组在(Col1, Col2, ..., Coln)上取值相等,且(Col1, Col2, ..., Coln)只出现一次
eg. 求所有教师的任课情况并按教师号排序(没有任课的教师也需列在表中)
xxxxxxxxxx
Select Teacher.Tnum, Tname, Cname
From Teacher Left Outer Join Course
ON Teacher.Tnum = Course.Tnum;
Order by Teacher.Tnum ASC;
Comments NOTHING