数据库有几种连接查询(三数据库查询)(1)

表a

数据库有几种连接查询(三数据库查询)(2)

表b

  1. 一般连接

数据库有几种连接查询(三数据库查询)(3)

一般连接

2.等值连接

数据库有几种连接查询(三数据库查询)(4)

等值连接

3.自然连接

数据库有几种连接查询(三数据库查询)(5)

自然连接

4.外连接

数据库有几种连接查询(三数据库查询)(6)

外连接

5.左外连接

数据库有几种连接查询(三数据库查询)(7)

左外连接

6.右外连接

数据库有几种连接查询(三数据库查询)(8)

右外连接

1、等值与非等值连接查询

连接查询的WHERE子句中用来连接两个表的条件称为连接条件或连接谓词,其一般格式为:

[<表名1>.]<列名1><比较运算符>[<表名2>/]<列名2>

其中比较运算符主要有:=、>、<、>=、<=、!= 等。

此外连接谓词还可以使用下面形式:

[<表名1>.]<列名1>BETWEEN [<表名2>.]<列名2> AND [<表名2>.]<列名3>

当连接运算符为=时,称为等值连接。使用其它运算符称为非等值连接。

查询每个学生及其选修课程的情况。

SELECT Student.* ,SC.* FROM Student,SC WHERE Student.Sno=SC.Sno;

查询结果如下:

数据库有几种连接查询(三数据库查询)(9)

DBMS执行该连接操作的可能过程是:

首先在表Student中找到第一个元组,然后从头开始扫描SC表,逐一查找与Student第一个元组的Sno相等的SC元组,找到后就将Student中的第一个元组与该元组拼接起来,形成结果表中的一个元组。SC全部查找完后,再找Student中第二个元组,然后再从头开始扫描SC,逐一查找满足连接条件的元组,找到后就将Student中的第二个元组与该元组拼接起来,形成结果表中一个元组。重复上述操作,直至Student中的全部元组都处理完毕为止。

若把等值连接中把目标列中重复的属性列去掉则为自然连接。

对上一例子用自然连接完成

SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student,SC WHERE Student.Sno=SC.Sno;

例中,由于Sno,Sname,Ssex,Sage,Sdept,Cno和Grade属性列在Student和SC表中是唯一的,因此引用是可以去掉表明前缀。而Sno在两个表都出现了,因此引用是必须加上表明前缀。

2、自身连接

连接操作不仅可以在两个表之间进行,也可以是一个表与其自己进行连接,称为表的自身连接。

查每门课的间接先修课。

数据库有几种连接查询(三数据库查询)(10)

FIRST表

数据库有几种连接查询(三数据库查询)(11)

SECOND 表

SELECT FIRST.Cno,SECOND.Cpno WHERE Course FIRST ,Course SECOND WHERE FIRST.Cpno=SECOND.Cno;

结果为:

数据库有几种连接查询(三数据库查询)(12)

3、外连接

如果把舍弃的元组保存在结果关系中,而在其他属性上填空值(NULL),那么这种连接就叫做外连接(outer jion);

如果只把左边关系中要舍弃的元组保存就叫做左外连接(LEFT OUTER JION 或LEFT JION);

如果只把右边关系中要舍弃的元组保存就叫做右外连接 (RIGHT OUTER JION 或RIGHT JION)。

SELECT Student.Sno,Sname,Ssex,Sdept,Cno,Grade FROM Student LEFT OUT JOIN ON(Student.Sno=SC.Sno); /*也可以使用USING来去掉结果中的重复值: FROM Student LEFT OUT JOIN SC USING (Sno);*/

4、复合条件连接

WHERE子句中可以有多个连接条件,称为复合条件连接。

查询选修2号课程且成绩在90分以上的所有学生的学号和名字。

SELECT Student.Sno,Sname FROM Student,SC WHERE Student.Sno=SC.Sno AND SC.Cno='2' AND SC.Grade>90;

多表连接

查询每个学生的学号、姓名、选修课程名及成绩

SELECT Student.Sno,Sname,Cname,Grade FROM Student,SC,Course WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno;

,