日期:2014-05-16  浏览次数:20503 次

数据库学习笔记(1)——内连接、左(右)连接、全连接

一、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

?