- student表
- 课程表
- 成绩表
- 交叉连接
两个表的广义笛卡尔积——没有连接条件的多表查询
select stdname,elename from Student,Elective
或select stdname,elename from Student cross join Elective
-
内连接
默认连接——返回交叉连接结果中所有符合连接条件的行
select a.StdName,b.EleName
from Student a,Elective b,Student_Elevtive c
where a.StdId=c.StdId and b.EleId=c.EleId
或
select a.StdName,c.EleName
from Student a join Student_Elevtive b on a.StdId=b.StdId
join Elective c on c.EleId=b.EleId
缺点:
若存在没有选修任何选修课的学生,Student_Elevtive表中不存在这些学生,无查询结果
- 外连接
两个表的左右连接
select a.StdName,b.EleId
from Student a left join Student_Elevtive b on a.StdId=b.StdId
多于两个表的左右连接
select a.StdName,c.EleName
from Student a left join Student_Elevtive b on a.StdId=b.StdId
left join Elective c on c.EleId=b.EleId
- 全连接
select ISNULL(a.cusid,b.cusid),a.cusname,b.goodsname,b.quantity
from Customer a full join sale b on a.cusid=b.cusid
order by 1
isnull()函数:若第一个函数非空,返回第一个,若为空,返回第二个
- 自连接
select a.StdId,a.StdName,b.StdName
from Student a left join student b on a.SideId=b.StdId