一、JOIN、LEFT JOIN 、RIGHT JOIN 和 FULL JOIN
1、涉及的三张表
1)学员表(学号、姓名、单位、年龄) S(sno,sname,sdepart,sage)
2)课程(课程编号、课程名) C(cno,cname)
3)成绩表(学号、课程编号、成绩) SC(sno,sname,grade)
2、表中的数据
1)SELECT * FROM S
注:S表中sno=4 的员工在SC表中没有对应记录。
2)SELECT * FROM C
3)SELECT * FROM SC
注:SC表中sno=5在S表中没有对应记录。
3、区别与联系
1)连接(内连接)
--JOIN(INNER JOIN) 只返回两张表连接列的匹配项
SELECT * FROM S JOIN SC ON S.sno=SC.sno
SELECT * FROM S INNER JOIN SC ON S.sno=SC.sno
2)左连接
--LEFT JOIN 左连接 即使右表中没有匹配,也从左表返回所有的行
SELECT * FROM S LEFT JOIN SC ON S.sno=SC.sno
3)右连接
--RIGHT JOIN 右连接 即使左表中没有匹配,也从右表返回所有的行
SELECT * FROM S RIGHT JOIN SC ON S.sno=SC.sno
4)全连接
--FULL JOIN 返回两张表中的行 LEFT JOIN+RIGHT JOIN
SELECT * FROM S FULL JOIN SC ON S.sno=SC.sno
二、GROUP BY 的用法
--GROUP BY 的用法 用于结合合计函数,根据一个或多个列对结果集进行分组
--查询每个学员选修的课程数
SELECT sno,选修课程数=count(cno)FROM SC GROUP BY sno
三、HAVING 的用法
-- HAVING 的用法(增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用)
--查询选修课程数大于2的员工号
--1.错误
SELECT sno,选修课程数=COUNT(cno) FROM SC GROUP BY sno WHERE COUNT(cno)>2
--2.正确
SELECT sno,选修课程数=COUNT(cno) FROM SC GROUP BY sno HAVING COUNT(cno)>2