连接查询:
同时涉及多个表的查询称为连接查询。
SQL中连接查询的主要类型
(1) 交叉连接(广义笛卡尔积)
(2) 等值连接
(3) 自身连接
(4) 内连接
(5) 外连接
1.交叉连接
使用笛卡尔积运算的连接方式
笛卡尔积运算:设A,B为一个集合,将A中的元素作为第一个元素,B中的元素作为第二个元素,形成有序对。
笛卡尔积:所有这些有序对都由一个称为a和B的笛卡尔积的集合组成,并被记录为AxB。
有序对: 形式为(a,b),不同的顺序意味着不同的有序对,(a,b)≠(b,a) 除非 a=b
2.等值连接
连接运算符为
=
的连接操作
[例] 查询每个学生及其选修课程的情况。
SELECT Student.*,SC.* FROM Student,SC
WHERE Student.Sno=SC.Sno;
注意:任何子句中引用表1和表2中同名属性时,都必须加表名前 缀
引用唯一属性名时可以加也可以省略表名前缀
3.自身连接
一个表与其自己进行连接,称为表的自身连接
注意:
需要给表起别名以示区别
由于所有属性名都是同名属性,因此必须使用别名前缀
[例] 查询每一门课的直接先修课的课程名
SELECT a1.Cname,a2.Cname
FROM Course a1,Course a2
WHERE a1.Cpno=a2.Cno
4.内连接:
合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行
上面的连接均属于内连接
可以用另一种表达方式(方便连接格式的统一)
SELECT Student.*,SC.* FROM Student JOIN SC
ON Student.Sno=SC.Sno;
5.外连接
两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(或右) 外连接。没有匹配的行时, 结果表中相应的列为空(NULL)。
它的功能就在于能够
查询所有的数据。
左连接
例
SELECT Student.*,SC.*
FROM Student LEFT JOIN SC
ON Student.Sno=SC.Sno;
右连接
SELECT SC.*,Course.*
FROM SC RIGHT JOIN Course
ON SC.Cno=Course.Cno;
全连接
SC.*,Course.*
FROM SC FULL JOIN Course
ON SC.Cno=Course.Cno;