sql server 等值连接 非等值连接

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

WHERE Student.Sno = SC.Sno;
An Introduction to Database System
等值与非等值连接查询(续) 等值与非等值连接查询(
查询结果: 查询结果:
Student.Sno 200215121 200215121 200215121 200215122 200215122
An Introduction to Database System
四、复合条件连接
复合条件连接:WHERE子句中含多个连接条件
[例37]查询选修2号课程且成绩在90分以上的所有学生 SELECT Student.Sno, Sname FROM Student, SC WHERE Student.Sno = SC.Sno AND /* 连接谓词*/ o= ‘2’ AND SC.Grade > 90; /* 其他限定条件 */
An Introduction to Database System
带有比较运算符的子查询(续) 带有比较运算符的子查询(
例:假设一个学生只可能在一个系学习,并且必须属于一个 系,则在[例39]可以用 = 代替IN : SELECT Sno,Sname,Sdept FROM Student WHERE Sdept = (SELECT Sdept FROM Student WHERE Sname= ‘刘晨’);
ANY:任意一个值 ALL:所有值
An Introduction to Database System
带有ANY(SOME)或ALL谓词的子查询 (续) ( 带有 ) 谓词的子查询
[例42] 查询其他系中比计算机科学某一学生年龄小的学生姓 名和年龄 SELECT Sname,Sage FROM Student FROM AND Sdept <> ‘CS ' ; Student /*父查询块中的条件 */ WHERE Sage < ANY (SELECT Sage WHERE Sdept= ' CS ')
An Introduction to Database System
3.4.3 嵌套查询
一、带有IN谓词的子查询 二、 带有比较运算符的子查询 三、 带有ANY(SOME)或ALL谓词的子查询 四、 带有EXISTS谓词的子查询
An Introduction to Database System
带有IN谓词的子查询( 带有 谓词的子查询(续) 谓词的子查询
自身连接:一个表与其自己进行连接 需要给表起别名以示区别 由于所有属性名都是同名属性,因此必须使用别名前缀
[例35]查询每一门课的间接先修课(即先修课的 Course FIRST,Course SECOND WHERE FIRST.Cpno = o;
An Introduction to Database System
三、外连接
外连接与普通连接的区别
普通连接操作只输出满足连接条件的元组 外连接操作以指定表为连接主体,将主体表中不满足连接条件的 元组一并输出 [例 36] 改写[例33] SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student LEFT OUT JOIN SC ON (Student.Sno=SC.Sno);
An Introduction to Database System
自身连接( 自身连接(续)
FIRST表(Course表) Cno 1 2 3 4 5 6 7 Cname 数据库 数学 信息系统 操作系统 数据结构 数据处理 PASCAL语言 语言 Cpno 5 1 6 7 6 Ccredit 4 2 4 3 4 2 4
An Introduction to Database System
排序合并法
找到表1的第二条元组,然后从刚才的中断点处继续顺 序扫描表2,查找满足连接条件的元组,找到后就将表1 中的第二个元组与该元组拼接起来,形成结果表中一个 元组。直接遇到表2中大于表1连接字段值的元组时,对 表2的查询不再继续 重复上述操作,直到表1或表2中的全部元组都处理完毕 为止
若内层查询结果非空则外层的where子句返回真值若内层查询结果为空则外层的where子句返回假值exists谓词若内层查询结果非空则外层的where子句返回假值若内层查询结果为空则外层的where子句返回真值databasesystemexists用嵌套查询selectsnamefromstudentwhereexistsselectfromscwheresnostudentsnodatabasesystemexists用连接运算selectsnamefromstudentscwherestudentsnoscsnodatabasesystem345select语句的一般格式selectalldistinct目标列表达式别名目标列表达式别名from表名或视图名别名表名或视图名别名where条件表达式group列名1having条件表达式order列名2ascdescdatabasesystem休息一会儿
将第一步查询嵌入到第二步查询的条件中 SELECT Sno,Sname,Sdept FROM Student WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname= ‘ 刘晨 ’); 此查询为不相关子查询。
An Introduction to Database System
3.4.3 嵌套查询
一、带有IN谓词的子查询 二、 带有比较运算符的子查询 三、 带有ANY(SOME)或ALL谓词的子查询 四、 带有EXISTS谓词的子查询
An Introduction to Database System
二、带有比较运算符的子查询
当能确切知道内层查询返回单值时,可用比较运 算符(>,<,=,>=,<=,!=或< >)。
嵌套查询(续 嵌套查询 续)
子查询的限制 不能使用ORDER BY子句 层层嵌套方式反映了 SQL语言的结构化 有些嵌套查询可以用连接运算替代
An Introduction to Database System
id name |id score | 1 lee |1 90 | 2 zhang |2 100 | 4 wang |3 70 | 一、外连接 1.概念:包括左向外联接、右向外联接或完整外部联接 2.左连接:left join 或 left outer join select * from table1 left join table2 on table1.id=table2.id 1 lee 1 90 2 zhang 2 100 4 wang NULL NULL 右连接:right join 或 right outer join select * from table1 right join table2 on table1.id=table2.id 1 lee 1 90 2 zhang 2 100 NULL NULL 3 70 .内连接:join 或 inner join select * from table1 join table2 on table1.id=table2.id 1 lee 1 90 2 zhang 2 100
An Introduction to Database System
3.4.3 嵌套查询
一、带有IN谓词的子查询 二、 带有比较运算符的子查询 三、 带有ANY(SOME)或ALL谓词的子查询 四、 带有EXISTS谓词的子查询
An Introduction to Database System
三、带有ANY(SOME)或ALL谓词的子查询 带有 ( ) 谓词的子查询 谓词语义
An Introduction to Database System
嵌套查询(续 嵌套查询 续)
SELECT Sname FROM Student WHERE Sno IN (SELECT Sno FROM SC
/*外层查询/父查询*/
/*内层查询/子查询*/
WHERE Cno= ' 2 ');
An Introduction to Database System
An Introduction to Database System
连接查询(续) 连接查询(
一、等值与非等值连接查询 二、自身连接 三、外连接 四、复合条件连接
An Introduction to Database System
一、等值与非等值连接查询
等值连接:连接运算符为= [例33] 查询每个学生及其选修课程的情况 SELECT Student.*,SC.* FROM Student,SC
WHERE Student.Sno = SC.Sno;
An Introduction to Database System
连接查询(续) 连接查询(
一、等值与非等值连接查询 二、自身连接 三、外连接 四、复合条件连接
An Introduction to Database System
二、自身连接
An Introduction to Database System
外连接( 外连接(续)
执行结果: 执行结果:
Student.Sno 200215121 200215121 200215121 200215122 200215122 200215123 200215125 Sname 李勇 李勇 李勇 刘晨 刘晨 王敏 张立 Ssex 男 男 男 女 女 女 男 Sage 20 20 20 19 19 18 19 Sdept CS CS CS CS CS MA IS Cno 1 2 3 2 3 NULL NULL Grade 92 85 88 90 80 NULL NULL
An Introduction to Database System
带有比较运算符的子查询(续) 带有比较运算符的子查询(
[例41]找出每个学生超过他选修课程平均成绩的课程号。 SELECT Sno, Cno 相关子查询 FROM SC x WHERE Grade >=(SELECT AVG(Grade) FROM SC y WHERE y.Sno=x.Sno);
Sname 李勇 李勇 李勇 刘晨 刘晨
Ssex 男 男 男 女 女
Sage 20 20 20 19 19
Sdept CS CS CS CS CS
SC.Sno 200215121 200215121 200215121 200215122 200215122
Cno 1 2 3 2 3
Grade 92 85 88 90 80
An Introduction to Database System
自身连接( 自身连接(续)
查询结果:
Cno 1 3 5 Pcno 7 5 6
An Introduction to Database System
连接查询(续) 连接查询(
一、等值与非等值连接查询 二、自身连接 三、外连接 四、复合条件连接
An Introduction to Database System
自身连接( 自身连接(续)
SECOND表(Course表) Cno 1 2 3 4 5 6 7 Cname 数据库 数学 信息系统 操作系统 数据结构 数据处理 PASCAL语言 语言 Cpno 5 1 6 7 6 Ccredit 4 2 4 3 4 2 4
An Introduction to Database System
排序合并法(SORT-MERGE) 排序合并法
常用于=连接
首先按连接属性对表1和表2排序 对表1的第一个元组,从头开始扫描表2,顺序查找满足 连接条件的元组,找到后就将表1中的第一个元组与该 元组拼接起来,形成结果表中一个元组。当遇到表2中 第一条大于表1连接字段值的元组时,对表2的查询不再 继续
连接操作的执行过程
嵌套循环法(NESTED-LOOP)
首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找 满足连接件的元组,找到后就将表1中的第一个元组与该元组拼 1 接起来,形成结果表中一个元组。 表2全部查找完后,再找表1中第二个元组,然后再从头开始扫描 表2,逐一查找满足连接条件的元组,找到后就将表1中的第二个 元组与该元组拼接起来,形成结果表中一个元组。 重复上述操作,直到表1中的全部元组都处理完毕
An Introduction to Database System
带有比较运算符的子查询(续) 带有比较运算符的子查询(
子查询一定要跟在比较符之后 错误的例子: 错误 SELECT Sno,Sname,Sdept FROM Student WHERE ( SELECT Sdept FROM Student WHERE Sname= ‘ 刘晨 ’ ) = Sdept;
An Introduction to Database System
等值与非等值连接查询( 等值与非等值连接查询(续)
自然连接:
[例34] 对[例33]用自然连接完成。
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student,SC
相关文档
最新文档