大纲
- 等值或其他比较连接
- 自身连接
- 外连接
- 多表连接
SQL中“连接”是用“连接条件来表达的”。
连接条件一般格式:
表1.列名1<比较运算符>表2.列名2。
等值连接:连接运算符为“=”
自然连接:把目标列中重复的属性列去掉。
在SQL中没有自然连接,即自动把冗余部分删掉,故需要在SELECT中需显示的字段显示出来。
查询选修2课程并且分数大于80分的学生的学号和名字。
SELECT Student.Sno,Sname
From Student,SC
WHERE Student.Sno=SC.Sno AND
SC.Cno='2' AND SC.Grade>80
连接操作的执行过程:
1、嵌套循环法
2、排序合并法,排序之后使用指针移动
3、索引连接
自身连接
- 一个表与其自己进行连接,是一种特殊的连接。
- 需要给表起别名以示区别。
- 由于所有属性名都是同名属性,因此必须使用别名前缀
查询每一个每门课的先修课名称。
SELECT FIRST.Cname,SECOND.Cname
From Course First,Course Second
Where First.Cpno=Second.Cno
外连接
外连接一般格式:
Select …
From 表一 Right/Left outer JOIN 表二 ON
(连接条件)
外连接与普通连接的区别:
- 普通连接操作只输出满足连接条件的元组。
- 外连接以指定表为连接主体,不满足连接条件的元组也输出
- 左外连接:以左边为主体,列出左边关系,Left outer JOIN
- 右外连接:以右边为主体,列出右边关系,Right outer JOIN
- 如想列出每个学生的基本情况和选课情况,若有些学生没有选课,使用普通连接时这些学生的信息就被舍弃掉。而外连接则会保留这些学生的信息,在选课的属性写Null。
列出每个学生的基本情况和选课情况
Select Student.Sno,Sname,Ssex,Sage,Sdept,cno,grade
From Student Student Left outer JOIN SC ON
(Student.Sno=SC.Sno)
多表连接
两个以上的表进行连接
查询每个学生的学号,姓名,选修课程名及成绩。