SQL联结查询与嵌套查询
数据库系统概论An Introduction to Database System第三章 关系数据库标准语言SQL 关系数据库标准语言SQL(续1) 续 )
武汉大学计算机科学与技术学院An Introduction to Database System
SQL联结查询与嵌套查询
3.33.3.1 3.3.2 3.3.3 3.3.4 3.3.5
查询概述 单表查询 连接查询 嵌套查询 集合查询
3.3.6 小结
An Introduction to Database System
SQL联结查询与嵌套查询
3.3.3 连接查询同时涉及多个表的查询称为连接查询 用来连接两个表的条件称为连接条件或连接谓词一般格式:[<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2>
比较运算符:=、>、<、>=、<=、!= [<表名1>.]<列名1> BETWEEN [<表名2>.]<列名2> AND [<表名2>.]<列名3>An Introduction to Database System
SQL联结查询与嵌套查询
连接查询连接字段
(续)
连接谓词中的列名称为连接字段 连接条件中的各连接字段类型必须是可比的, 连接条件中的各连接字段类型必须是可比的, 但不必是相同的
An Introduction to Database System
SQL联结查询与嵌套查询
连接操作的执行过程嵌套循环法(NESTED嵌套循环法(NESTED-LOOP) (NESTED首先在表1中找到第一个元组, 然后从头开始扫描表2 首先在表 1 中找到第一个元组 , 然后从头开始扫描表 2 , 逐一查找满足连接件的元组,找到后就将表1 逐一查找满足连接件的元组,找到后就将表1中的第一个 元组与该元组拼接起来,形成结果表中一个元组。 元组与该元组拼接起来,形成结果表中一个元组。 全部查找完后,再找表1中第二个元组, 表 2 全部查找完后 , 再找表 1 中第二个元组 , 然后再从头 开始扫描表2 逐一查找满足连接条件的元组, 开始扫描表2,逐一查找满足连接条件的元组,找到后就 将表1中的第二个元组与该元组拼接起来, 将表1中的第二个元组与该元组拼接起来,形成结果表中 一个元组。 一个元组。 重复上述操作,直到表1 重复上述操作,直到表1中的全部元组都处理完毕An Introduction to Database System
SQL联结查询与嵌套查询
排序合并法(SORT排序合并法(SORT-MERGE) (SORT常用于=连接 常用于 连接首先按连接属性对表1和表 排序 首先按连接属性对表 和表2排序 和表 对表1的第一个元组,从头开始扫描表2 对表1的第一个元组,从头开始扫描表2,顺序查找 满足连接条件的元组,找到后就将表1 满足连接条件的元组,找到后就将表1中的第一个元 组与该元组拼接起来,形成结果表中一个元组。当 组与该元组拼接起来, 形成结果表中一个元组。 遇到表2中第一条大于表1连接字段值的元组时, 遇到表2中第一条大于表1连接字段值的元组时,对 表2的查询不再继续
An Introduction to Database System
SQL联结查询与嵌套查询
排序合并法找到表1的第二条元组, 找到表 1 的第二条元组 , 然后从刚才的中断点处继续 顺序扫描表2 查找满足连接条件的元组, 顺序扫
描表2 ,查找满足连接条件的元组,找到后就 将表1中的第二个元组与该元组拼接起来, 将表 1 中的第二个元组与该元组拼接起来 , 形成结果 表中一个元组。直接遇到表2中大于表1 表中一个元组。直接遇到表2中大于表1连接字段值的 元组时,对表2 元组时,对表2的查询不再继续 重复上述操作,直到表1或表 或表2中的全部元组都处理 重复上述操作 , 直到表 或表 中的全部元组都处理 完毕为止
An Introduction to Database System
SQL联结查询与嵌套查询
索引连接(INDEX索引连接(INDEX-JOIN) (INDEX对表2按连接字段建立索引 对表 按连接字段建立索引 对表1中的每个元组,依次根据其连接字段 值查询表2的索引,从中找到满足条件的元 组,找到后就将表1中的第一个元组与该元 组拼接起来,形成结果表中一个元组
An Introduction to Database System
SQL联结查询与嵌套查询
连接查询
(续)
SQL中连接查询的主要类型 中连接查询的主要类型 广义笛卡尔积 等值连接(含自然连接 等值连接 含自然连接) 含自然连接 非等值连接查询 自身连接查询 外连接查询 复合条件连接查询
An Introduction to Database System
SQL联结查询与嵌套查询
一、广义笛卡尔积不带连接谓词的连接 很少使用
例:SELECT Student.* , SC.* FROM Student, SC
An Introduction to Database System
SQL联结查询与嵌套查询
二、等值与非等值连接查询等值连接、自然连接、 等值连接、自然连接、非等值连接
[例32] 查询每个学生及其选修课程的情况。SELECT Student.*,SC.* FROM Student,SC WHERE Student.Sno = SC.Sno;
An Introduction to Database System
SQL联结查询与嵌套查询
等值连接连接运算符为 = 的连接操作[<表名1>.]<列名1> = [<表名2>.]<列名2> 任何子句中引用表1和表2中同名属性时,都必须加 表名前缀。引用唯一属性名时可以加也可以省略表 名前缀。
An Introduction to Database System
SQL联结查询与嵌套查询
等值连接 假设Student表、SC表分别有下列数据: Student表Sno 95001 95002 95003 95004 Sname 李勇 刘晨 王敏 张立 Ssex 男 女 女 男
Sage Sdept20 19 18 19 CS IS MA IS
An Introduction to Database System
SQL联结查询与嵌套查询
等值连接 SC表Sno95001 95001 95001 95002 95002
Cno1 2 3 2 3
Grade92 85 88 90 80
An Introduction to Database System
SQL联结查询与嵌套查询
等值连接结果表Student.Sno Sname Ssex 95001 95001 95001 95002 95002 李勇 李勇 李勇 刘晨 刘晨 男 男 男 女 女 Sage 20 20 20 19 19 Sdept CS CS CS IS IS SC.Sno 95001 95001 95001 95002 95002 Cno Grade 1 2 3 2 3 92 85 88 90 80
An Introduction to Database System
SQL联结查询与嵌套查询
自然连接等值连接的一种特殊情况, 等值连接的一种特殊情况,把目标列中重复的 属性列去掉。 属性列去掉。
[例33] 对[例32]用自然连接完成。SELECT Student.Sno,Sname,Ssex,Sage, Sdept,Cno,Grade FROM Student,SC WHERE Student.Sno = SC.Sno;An Introduction to Database System