连接查询
SQL中的连接是用连接条件来表达的。
连接条件或者连接谓语: 用来连接两个表的条件
格式:
[<表名1>.] <列名1> <比较运算符>[<表名2>.] <列名2>
连接字段:连接谓词中的列名称
1. 等值与非等值连接查询
等值连接: 连接运算符为“=”
如查询每个学生及其选修课程的情况
SELECT student.*,sc.*
FROM student,sc
WHERE student.s_no = sc.s_no
我们会发现有两个s_no属性,所以直接这样进行等值查询得到的数据是冗余的。
我们可以在SELECT阶段的将我们需要的属性列出来,让这个连接成为一个自然连接。
SELECT student.sno,s_sex,s_age,s_dept,c_no,grade
FROM student,sc
WHERE student.s_no = sc.s_no
2.自身连接
自身连接:让一个表与其自己进行连接
需要给表起别名来进行区别
所有属性都为同名属性,必须使用别名前缀
例子:
SELECT t1.c_name,t2.c_name as pre
FROM course t1,course t2
WHERE t1.c_pno = t2.c_no
内连接与外连接
内连接 inner join,选出两表相同的部分
例子:
SELECT s.s_no,s.s_name,sc.c_no
FROM
student s
INNER JOIN sc
ON s.s_no = sc.s_no
外连接 (outer join)
分为两种,left outer join (可简写问left join)和 right outer join (可简写问right join)
left join 以左表为主,右表不存在的对应的数据会填null
例子:
SELECT s.s_no,s.s_name,sc.c_no
FROM
student s
LEFT JOIN sc
ON s.s_no = sc.s_no
left join 以右表为主,左表不存在的对应的数据会填null
SELECT s.s_no,s.s_name,sc.c_no
FROM
student s
RIGHT JOIN sc
ON s.s_no = sc.s_no
多表连接
多表连接:两个以上的表进行连接
例子:
SELECT s.s_no,s.s_name,c.c_name,sc.grade
FROM
student s ,sc ,course c
WHERE s.s_no = sc.s_no
AND sc.c_no = c.c_no
参考资料中国人民大学公开课