日期:2014-05-16 浏览次数:20530 次
一、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) 只返回两张表连接列的匹配项 ?
2)左连接 --LEFT JOIN? 左连接? 即使右表中没有匹配,也从左表返回所有的行
3)右连接
4)全连接 --FULL JOIN? 返回两张表中的行 LEFT JOIN+RIGHT JOIN ?
二、GROUP BY 的用法 --GROUP BY 的用法 用于结合合计函数,根据一个或多个列对结果集进行分组 --查询每个学员选修的课程数 ?
SELECT * FROM S JOIN? SC ON S.sno=SC.sno
SELECT * FROM S INNER JOIN SC ON S.sno=SC.sno
SELECT * FROM S LEFT JOIN SC ON S.sno=SC.sno
--RIGHT JOIN 右连接? 即使左表中没有匹配,也从右表返回所有的行
SELECT * FROM S RIGHT JOIN SC ON S.sno=SC.sno
SELECT * FROM S FULL JOIN SC ON S.sno=SC.sno
SELECT sno,选修课程数=count(cno)FROM SC GROUP BY sno