数据库作业数据库作业7::SQL练习练习4 – SELECT(连接查询、嵌套查询)(连接查询、嵌套查询)
数据查询数据查询2—连接查询连接查询:同时涉及两个以上的表的查询同时涉及两个以上的表的查询
连接条件:用来连接两个表的条件连接条件:用来连接两个表的条件
[.] [.] 连接字段:连接条件中的列名称连接字段:连接条件中的列名称(注意:连接字段类型必须是可比的,但名字不必相同注意:连接字段类型必须是可比的,但名字不必相同)
连接查询连接查询—(1)等值与非等值连接查询等值与非等值连接查询:等值连接:连接运算符为等值连接:连接运算符为=(对比关系代数中的等值连接)(对比关系代数中的等值连接)
【例3.49】查询每个学生及其选修课程的情况.
SELECT Student.*,SC.*
FROM Student,SC
WHERE Student.Sno=SC.Sno;
从两个表中查询,需要先用笛卡尔积将两个表连接起来,连接之后再找出符合条件相等的。
【思考】:如何用SQL表达笛卡尔积×?
SELECT Student.*,SC.*
FROM Student,SC;
不写条件时就是笛卡尔积,将两个表连接起来,形成一个25行,8列的大表
【拓展1】非等值连接:连接形成的表减去等值连接形成的表
SELECT Student.*,SC.*
FROM Student,SC
WHERE Student.Sno!=SC.Sno;
【拓展2】自然连接:去掉重复的列,查询内容需要依次列出.注意:对于重复的列需要用表名指定属性名,不重复的列的属性
名可以不用表名限制。
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student,SC
WHERE Student.Sno=SC.Sno;
【拓展3】对于查询两个表的所有内容也可以写成下面这种形式,更加简单:
SELECT *
FROM Student,SC
WHERE Student.Sno=SC.Sno;
【拓展4】连接操作的执行过程:
(1)嵌套循环法:在表1中找到第一个元组,然后从头扫描表2找到满足条件的元组,再将这两个元组连接起来,待表2全部
扫描后,按照此流程依次完成表1的其他元组的操作。(表2每次都需要从头扫描)
(2)排序合并法:首先将表1 和表2排序,使之有规律。对表1的第一个元组,开始从头扫描顺序查找满足条件的元组,找到后
将两个元组连接起来。当遇到表2中第一条大于表1连接字段值的元组时,对表2的查询不再继续.找到表1的第二条元组,然后