SQL数据查询——连接查询

等值/与非等值连接查询

用来连接两个表的条件称为连接条件或连接谓词:
其一般格式为:
(1)[表名 1.] 列名1 比较运算符 [表名 2.] 列名2
(2)[表名 1.] 列名1 BETWEEN [表名 2.] 列名2 AND [表名 2.] 列名3
其中比较运算符主要有:=、>、<、>=、<=、!=,当连接运算符为=时,称为等值连接,使用其它运算符称为非等值连接。

#例:查询每个学生及其选修课程的情况
SELECT Student.*,SC.*
FROM Student,SC
WHERE Student.Sno=SC.Sno  --等值连接

自然(内)连接查询

连接运算中两种特殊情况:
(1)广义笛卡尔积:不带连接谓词的连接,其中一表中的每一元组都要与另一表中的每一元组作拼接
(2)自然连接:按照连个表中的相同属性进行等值连接,且目标列中去掉了重复的属性列,保留了所有不重复的属性列

#例:查询每个学生及其选修课程的情况
#内连接 -sql-server
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student,SC
WHERE Student.Sno=SC.Sno  --由于Sno在两个表中都出现了,因此引用时必须加上表名前缀

#内连接 -ANSI
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student INNER JOIN SC ON Student.Sno=SC.Sno  --FROM语句直接内连接也可以

自身连接查询

一个表与其自己进行连接这种连接称为表的自身连接
使用时需注意:
(1)需要给表起别名以示区别
(2)由于所有属性名都是同名属性,因此必须用表别名前缀

#例:查询每一门课的间接先修课(先修课的先修课)
SELECT FIRST.Cno,SECOND.Pcno
FROM Course FIRST,Course SECOND  --定义两个不同的别名加以区分
WHERE FIRST.Pcno=SECOND.Cno

#例:查询比李涛年龄大的学生姓名、年龄和李涛的年龄
SELECT X.Sname,X.Sage,Y.Sage
FROM Student AS X,Student AS Y
WHERE X.Sage>Y.Sage AND Y.Sname='李涛'

外连接查询

在通常的连接操作中,只有满足连接条件的元组才能作为结果输出,如关于选课情况查询,若该学生没有选课,则在结果中没有关于该学生的信息。但是有时我们想以Student表为主体列出每个学生的基本情况及其选课情况,若某个学生没有选课,则只输出基本情况信息,其选课信息为空值即可,这时就需要使用外连接(Outer Join)

#例:查询每个学生及其选修课程的情况
#外连接 -sql-server
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student,SC
WHERE Student.Sno=SC.Sno(*)
--外连接符*(+)出现在连接运算符的右边称其为左外连接,若外连接符出现在连接运算符的左边,则称右外连接

#外连接 -ANSI
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student LEFT JOIN SC ON Student.Sno=SC.Sno
--外连接符LEFT [OUTER] JOIN称为左外连接
--RIGHT [OUTER] JOIN称为右外连接
--FULL [OUTER] JOIN称为全外连接

【注】外连接与普通连接的区别:
普通连接操作只输出满足连接条件的元组;外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出

复合条件连接查询

WHERE子句中有多个条件的连接操作称为复合条件连接

#例:查询选修课2号课程且成绩在90分以上的所有学生
SELECT Student.Sno,Sname
FROM Student,SC
WHERE Student.Sno=SC.Sno AND SC.Cno='2' AND GRADE>90 --多个条件

#例:查询男同学学生(学号、姓名)选修的课程名及成绩
SELECT Student.Sno,Sname
FROM Student,Course,SC
WHERE Ssex='男' AND SC.Cno=Course.Cno AND SC.Sno=Student.Sno
发布了20 篇原创文章 · 获赞 16 · 访问量 1276

猜你喜欢

转载自blog.csdn.net/SAMSARS/article/details/105517260