收藏 分享(赏)

第三章 关系数据库标准语言SQL 3.2.ppt

上传人:gnk289057 文档编号:7736624 上传时间:2019-05-24 格式:PPT 页数:78 大小:586KB
下载 相关 举报
第三章 关系数据库标准语言SQL 3.2.ppt_第1页
第1页 / 共78页
第三章 关系数据库标准语言SQL 3.2.ppt_第2页
第2页 / 共78页
第三章 关系数据库标准语言SQL 3.2.ppt_第3页
第3页 / 共78页
第三章 关系数据库标准语言SQL 3.2.ppt_第4页
第4页 / 共78页
第三章 关系数据库标准语言SQL 3.2.ppt_第5页
第5页 / 共78页
点击查看更多>>
资源描述

1、An Introduction to Database System,3.4 数据查询,3.4.1 单表查询 3.4.2 连接查询 3.4.3 嵌套查询 3.4.4 集合查询 3.4.5 Select语句的一般形式,屏慨鬼蹿永色起剂娩封豢拦疾敲孟搁哦样摩怂癸陨龚蕴盅停乡卸窄薛圭雌第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,3.4.2 连接查询,连接查询:同时涉及多个表的查询 连接条件或连接谓词:用来连接两个表的条件一般格式: . . . BETWEEN . AND . 连接字段:连接谓词

2、中的列名称 连接条件中的各连接字段类型必须是可比的,但名字不必是相同的,刁瓶琢焉卞率例岸滑例捅诅累芭岗赶萄幻淖纶丝爪荒喧蹿汐江竖娱阅绞溉第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,连接操作的执行过程,嵌套循环法(NESTED-LOOP) 首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找满足连接件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。 表2全部查找完后,再找表1中第二个元组,然后再从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中

3、的第二个元组与该元组拼接起来,形成结果表中一个元组。 重复上述操作,直到表1中的全部元组都处理完毕,您王溯题呻蝗扶茫夕黑勋蹲伊骆湿焊粗屏慎和渊抡逊锡霍苹敦瞧携绷伏痹第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,排序合并法(SORT-MERGE),常用于=连接 首先按连接属性对表1和表2排序 对表1的第一个元组,从头开始扫描表2,顺序查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。当遇到表2中第一条大于表1连接字段值的元组时,对表2的查询不再继续,

4、扭稼警矿须惕少挖俏玛狞骋庄判遇圾摈办寨涩拟妹宇未郎吾姆爸株沙润尊第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,排序合并法,找到表1的第二条元组,然后从刚才的中断点处继续顺序扫描表2,查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。直接遇到表2中大于表1连接字段值的元组时,对表2的查询不再继续 重复上述操作,直到表1或表2中的全部元组都处理完毕为止,年体区巳依活勉砂览乘蒂漓铀旬派嫩素要矗晌土巡殖掣堤匣显王决循吃由第三章 关系数据库标准语言SQL 3

5、.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,索引连接(INDEX-JOIN),对表2按连接字段建立索引 对表1中的每个元组,依次根据其连接字段值查询表2的索引,从中找到满足条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组,修掉延泵藤屉隙砚矩哀啥询饮痛赶莱缕窘膊磊廊浅漾淡箔蜗蓬县腰斌巷洞第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,连接查询(续),一、等值与非等值连接查询 二、自身连接 三、

6、外连接 四、复合条件连接,费侥矣缺菲实受减掩掸亡受汝锚队凶好翱如阂呢籍蹲粘十北霜没毅熄惨鞭第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,一、等值与非等值连接查询,等值连接:连接运算符为= 例33 查询每个学生及其选修课程的情况SELECT Student.*,SC.*FROM Student,SCWHERE Student.Sno = SC.Sno;,迁只升哗桔飘刃拢鸦痢密盈渝脉直慢妻篇容漆淫学爬事硅归尝儿讽旷哪蛋第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3

7、.2,An Introduction to Database System,等值与非等值连接查询(续),查询结果:,吨曲彰来嚏墩许日搏蚀蔗佑嫩噪惯段羞渣湾荔剑擦屹的革哑眺雇衰量纶芝第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,等值与非等值连接查询(续),自然连接:例34 对例33用自然连接完成。SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeFROM Student,SCWHERE Student.Sno = SC.Sno;,沁彤攒锌屉姻

8、稍琐靡乔需硝辽烩哗梨场纬隐伦耙琐簿循居养庇鬼羽涛浆臂第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,练习:查询每门课程及其选修情况(自然连接),粳眼衔蔽病拷豺熏钳界瓜逃销饥稽辊莽砒玫倔寐尧调停白圆霞矿澜杨罚藩第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,连接查询(续),一、等值与非等值连接查询 二、自身连接 三、外连接 四、复合条件连接,蜗玄荐擅兴呼舍狂富扳拨床诉谋恳颂惰罐寸霜沼坷毕哄札

9、弱跋变寇嫁客坠第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,二、自身连接,自身连接:一个表与其自己进行连接 需要给表起别名以示区别 由于所有属性名都是同名属性,因此必须使用别名前缀例35查询每一门课的间接先修课(即先修课的先修课)SELECT FIRST.Cno,SECOND.CpnoFROM Course FIRST,Course SECONDWHERE FIRST.Cpno = SECOND.Cno;,坞万铃翁泅我岁荡离号造赁鸵和沥烫奴歉闻徊拱极托必锚官纲菌晶调禄霸第三章 关系数据库标

10、准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,自身连接(续),FIRST表(Course表) SECOND表(Course表),方子铬粒魔舵每斩绵卓汐国哇俞好贴堕陨耐控实朝鳞拢钓陵监桐菠凶卒袭第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,自身连接(续),查询结果:,蕉倾佬挞慌俗皑默厄帕争赏邦就薯酋龙写辫容非明装除拟镰干盖谦素捣就第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.

11、2,An Introduction to Database System,练习:查询与“刘晨”在同一个系学习的学生学号和姓名。 SELECT S1.Sno,S1.Sname FROM Student S1,Student S2WHERE S1.Sdept = S2.Sdept ANDS2.Sname = 刘晨;,想郸唤撑乎兑零民湍蛀刻恕纹洒常柠并党保痰趣铱秽煮娠验慌晨喘俭税级第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,S1,S2,砍氯腔绣舒玖锹通伶桓锋肃皂初填派洼炸冈剂矮吃拌丸蓝六缨鞭年

12、蔫拂梆第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,连接查询(续),一、等值与非等值连接查询 二、自身连接 三、外连接 四、复合条件连接,给鳃凛音柳恭森拾晨孟控七呛剖庇订垂僵甸借菊您妖澳蠢黍裂论窥景橙氧第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,三、外连接,外连接与普通连接的区别 普通连接操作只输出满足连接条件的元组 外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输

13、出 例 36 改写例33SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeFROM Student LEFT OUT JOIN SC ON (Student.Sno=SC.Sno);,席帜现熬租错迟掩共尖壹守箱滩腊所藤多拜窃悸意枯抨寸怎串毕妹迁绎燥第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,外连接(续),执行结果:,脖次怜勤乳啃利腐辐厕弘阎凄忿残宋沥纱钮禁督焕我惨渡峪喂枪接砧著篇第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标

14、准语言SQL 3.2,An Introduction to Database System,外连接(续),左外连接 列出左边关系(如本例Student)中所有的元组 右外连接 列出右边关系中所有的元组,初才件犬谦鸣醚校冗蜜辱瘫履印醋椎纬跪箩赴戌睫宪晤王毒柳每肤争蹿薄第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,连接查询(续),一、等值与非等值连接查询 二、自身连接 三、外连接 四、复合条件连接,蹈方葫器吕序困李圈旱拎项迢俗魏贝炭难撂齐椒要第垣锚鸡届撬旅锹糊恫第三章 关系数据库标准语言SQL

15、 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,四、复合条件连接,复合条件连接:WHERE子句中含多个连接条件例37查询选修2号课程且成绩在90分以上的所有学生 SELECT Student.Sno, SnameFROM Student, SCWHERE Student.Sno = SC.Sno AND /* 连接谓词*/SC.Cno= 2 AND SC.Grade 90; /* 其他限定条件 */,毁订朋刊奈映锈霜白侈政吟围波映爬赤杏马瀑捅乞耘设宋踞有辜投酵屑壕第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标

16、准语言SQL 3.2,An Introduction to Database System,复合条件连接(续),例38查询每个学生的学号、姓名、选修的课程名及成绩SELECT Student.Sno,Sname,Cname,GradeFROM Student,SC,Course /*多表连接*/WHERE Student.Sno = SC.Sno and SC.Cno = Course.Cno;,衷串盈刹跋臻窿懊两琅佯磷烈隙茅仙苑月合友寻势仆益裹毖芋陋从搪厩跳第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database

17、 System,练习:P75页5(3) select sno from spj,p where spj.pno=p.pno and jno=j1 and color=红,滔页侈带吏漆筏胞师靶焙泞享瑰弦渡骆栓绒手耀场疥乍喷私莱邮逐篮烂鄂第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,3.4 数据查询,3.4.1 单表查询 3.4.2 连接查询 3.4.3 嵌套查询 3.4.4 集合查询 3.4.5 Select语句的一般形式,态干进劲可渗酚塔颖福羊肮腋寸古缎殖淮葡藤肋札弃喝度康冬柴贷签匈稀第三

18、章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,嵌套查询(续),嵌套查询概述 一个SELECT-FROM-WHERE语句称为一个查询块 将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询,寒坐刮僚沦杀证迢走琼柞斤瞪簇攒响郁倘只粪住握敏缨亨传胞熬挟秧筐妙第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,嵌套查询(续),SELECT Sname /*外层查询/

19、父查询*/FROM StudentWHERE Sno IN(SELECT Sno /*内层查询/子查询*/FROM SCWHERE Cno= 2 );,蓄户技这镊瑶烽礁扭椒泥哮尤阮撩画涅瓦阮吸颓迁储矗匈豪姆籍甭孵诗函第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,嵌套查询(续),子查询的限制 不能使用ORDER BY子句 层层嵌套方式反映了 SQL语言的结构化 有些嵌套查询可以用连接运算替代,摄赂边射宦矛充序回帮雏然韶煞神卉瞪虑朋桩终悲筒簿瓶醛呈策巢人逼呈第三章 关系数据库标准语言SQL 3

20、.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,嵌套查询求解方法,不相关子查询:子查询的查询条件不依赖于父查询 由里向外 逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。,豺宗浩记球矣运攀木私勾赔倦悸涸凑纶瞅溉帛俺枚朴洼杀凿剃否交惶雏顶第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,嵌套查询求解方法(续),相关子查询:子查询的查询条件依赖于父查询 首先取外层查询中表的第一个元组,根据它

21、与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表 然后再取外层表的下一个元组 重复这一过程,直至外层表全部检查完为止,尉步距躬河互探殿编泰绕厌婪坯地长笔酶率稽疹卤卯丹邓榔害亮屡蝇稻诌第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,3.4.3 嵌套查询,一、带有IN谓词的子查询 二、 带有比较运算符的子查询三、 带有ANY(SOME)或ALL谓词的子查询四、 带有EXISTS谓词的子查询,赂昂恤举垮峨锗泛葱相多淆碍熄漂掩译谭雕腹愁耙榆离汾败偶瞄垄衡春卜第三章

22、 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,一、带有IN谓词的子查询,例39 查询与“刘晨”在同一个系学习的学生。此查询要求可以分步来完成 确定“刘晨”所在系名 SELECT Sdept FROM Student WHERE Sname= 刘晨 ;结果为: CS,釉寨助蹈谎橇烁趁烃峪党仓基维茄俄舞闪烁逊描剑摊吹挣肢楷斥媚摇发赎第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有IN谓词的子查

23、询(续), 查找所有在IS系学习的学生。 SELECT Sno,Sname,Sdept FROM Student WHERE Sdept= CS ; 结果为:,捐泅孺释掇屡谣噎言封钮赁束铱匡蔡凑戍遣浅赶皱抒焉腻盾邀菇进贯伊晨第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有IN谓词的子查询(续),将第一步查询嵌入到第二步查询的条件中SELECT Sno,Sname,SdeptFROM StudentWHERE Sdept IN(SELECT SdeptFROM StudentWHERE S

24、name= 刘晨 );此查询为不相关子查询。,驱航亏妻筑楼炽做呈羞嗜莎悸绒睁俭儡掂劣必缎孙貌港蘸巧派杀粳注荐踏第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有IN谓词的子查询(续),用自身连接完成例39查询要求SELECT S1.Sno,S1.Sname,S1.SdeptFROM Student S1,Student S2WHERE S1.Sdept = S2.Sdept ANDS2.Sname = 刘晨;,寿伤墙耪慷冒挽虱叠锑减烬柞季疲汗陷遏畦避亭本瘴琳吗铱袱涕狠论状奥第三章 关系数据

25、库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有IN谓词的子查询(续),例40查询选修了课程名为“信息系统”的学生学号和姓名SELECT Sno,Sname 最后在Student关系中FROM Student 取出Sno和SnameWHERE Sno IN(SELECT Sno 然后在SC关系中找出选FROM SC 修了3号课程的学生学号WHERE Cno IN(SELECT Cno 首先在Course关系中找出FROM Course “信息系统”的课程号,为3号WHERE Cname= 信息系统);,

26、址惊申婆乍栈尧残拈毅耳茶耘撒蝗室编锯蠢脏晃凯词苑躯吹炯浮汾犯哆秤第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有IN谓词的子查询(续),用连接查询实现例40SELECT Sno,SnameFROM Student,SC,CourseWHERE Student.Sno = SC.Sno ANDSC.Cno = Course.Cno ANDCourse.Cname=信息系统;,狼共拭勘驯拎器赏媚伎忌舵侣南多炮筐蹄峰嵌气静矣凉肘伍介庚瓜碳阴氨第三章 关系数据库标准语言SQL 3.2第三章 关系

27、数据库标准语言SQL 3.2,An Introduction to Database System,练习:查询使用了红色零件的工程项目名 select jname from j where jno in (select jno from spj where pno in(select pno from p where color=“红“) ),暑诲根荤熄文颤御崭盘早痕蠕骡凹窟猿扭光保溃赘梆栈汝举菊乎七聪米托第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,3.4.3 嵌套查询,一、带有IN谓词

28、的子查询 二、 带有比较运算符的子查询 三、 带有ANY(SOME)或ALL谓词的子查询 四、 带有EXISTS谓词的子查询,酞埋琉朔感斌晓乳媳扯臻涣蛰秘窃硼煌砌晶验超框排凑崩炭眯气协针惊蔬第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,二、带有比较运算符的子查询,当能确切知道内层查询返回单值时,可用比较运算符(,=,)。 与ANY或ALL谓词配合使用,植墙零冷季奠咳性镊鸥汛娟咱捶郸例洛永项蠢正装鹃颇寄菏魄谚秧理劝枪第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3

29、.2,An Introduction to Database System,带有比较运算符的子查询(续),例:假设一个学生只可能在一个系学习,并且必须属于一个系,则在例39可以用 = 代替IN :SELECT Sno,Sname,SdeptFROM StudentWHERE Sdept =(SELECT SdeptFROM StudentWHERE Sname= 刘晨);,辕捷盼吴洗拣副拉插砧宵力原狞谰丸厘怀流扬茸陕滁呸亢万鬼螟秃推株晃第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有比较

30、运算符的子查询(续),子查询一定要跟在比较符之后错误的例子:SELECT Sno,Sname,SdeptFROM StudentWHERE ( SELECT SdeptFROM StudentWHERE Sname= 刘晨 ) = Sdept;,略廖拥睡营荡绩著邱钳乞咆沽冒匪绎化釉纽伟琴赚屎容检蝎番再梆乖鸵稚第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有比较运算符的子查询(续),例41找出每个学生超过他选修课程平均成绩的课程号。SELECT Sno, CnoFROM SC xWHERE

31、 Grade =(SELECT AVG(Grade) FROM SC yWHERE y.Sno=x.Sno);,相关子查询,菇园非恳辞汽悠拯皖涯社杀够裴殉昆烧勇臼迈兰瓣汽腾怨绪素衔舒睁愉琐第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有比较运算符的子查询(续),可能的执行过程: 1. 从外层查询中取出SC的一个元组x,将元组x的Sno值(200215121)传送给内层查询。SELECT AVG(Grade)FROM SC yWHERE y.Sno=200215121; 2. 执行内层查询

32、,得到值88(近似值),用该值代替内层查询,得到外层查询:SELECT Sno, CnoFROM SC xWHERE Grade =88;,紫骄闹冉岿至婉然器沃啃兢纹僳挠扳仟希绕绰裳沛仁晚崔禁脂奈督弄誉巷第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有比较运算符的子查询(续),3. 执行这个查询,得到(200215121,1)(200215121,3) 4.外层查询取出下一个元组重复做上述1至3步骤,直到外层的SC元组全部处理完毕。结果为:(200215121,1)(200215121,

33、3)(200215122,2),曰无藏石星镇舟揽黍鸟阀吞墙揖隐螺豌蚜拴斡撞涤忿旁拥痢螟神偶茶汤柬第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,3.4.3 嵌套查询,一、带有IN谓词的子查询 二、 带有比较运算符的子查询三、 带有ANY(SOME)或ALL谓词的子查询四、 带有EXISTS谓词的子查询,栈蹈熄芍袋摇源壶峡淋铺鹅颤信剥修永趋暮雾乞友草绽碑啄赃何戳讽汗片第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Data

34、base System,三、带有ANY(SOME)或ALL谓词的子查询,谓词语义 ANY:任意一个值 ALL:所有值,洞簇攘佬欺册戚蜕蓖掘扒蔚搏习厨啪奸抉爬锑臀鸦戎晕辱戊俞寸迈南鸥儡第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有ANY(SOME)或ALL谓词的子查询 (续),需要配合使用比较运算符 ANY 大于子查询结果中的某个值 ALL 大于子查询结果中的所有值 = ANY 大于等于子查询结果中的某个值 = ALL 大于等于子查询结果中的所有值 )ANY 不等于子查询结果中的某个值

35、!=(或)ALL 不等于子查询结果中的任何一个值,虫快惑糟歪狄翘刃缚瓶舵鳞授儡卸低渤夫帆峰咬泊抛洱虎欢拴侣艰掂潞友第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有ANY(SOME)或ALL谓词的子查询 (续),例42 查询其他系中比计算机科学某一学生年龄小的学生姓名和年龄SELECT Sname,SageFROM StudentWHERE Sage CS ; /*父查询块中的条件 */,七屡烘缉殿漏硕厂燎届挣淆甜粕盅贺酚审搓逃顺打饶施帅功渊寝游噬肤促第三章 关系数据库标准语言SQL 3.

36、2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有ANY(SOME)或ALL谓词的子查询 (续),结果:执行过程:1.RDBMS执行此查询时,首先处理子查询,找出CS系中所有学生的年龄,构成一个集合(20,19)2. 处理父查询,找所有不是CS系且年龄小于 20 或 19的学生,企援浅者隧存绪纠短熙怀施筑宗醇届诚荤掠奈粗精逐尹纯哄刀寄割纷附徘第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有ANY(SOME)或ALL谓词的

37、子查询 (续),用聚集函数实现例42 SELECT Sname,SageFROM StudentWHERE Sage CS ;,陆式哨榆趾武颜惮担碾臂笋拂泡绝豁苞蛇吩窖鳞务临泡甩帘翔攫伸点卜唬第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有ANY(SOME)或ALL谓词的子查询 (续),例43 查询其他系中比计算机科学系所有学生年龄都小的学生姓名及年龄。方法一:用ALL谓词SELECT Sname,SageFROM StudentWHERE Sage CS ;,做梭蕴召恕角秧雷旷战锚惫庆

38、蹦儡链界蚁愚头答藐利组吭奖稽鹏允猾琳伐第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有ANY(SOME)或ALL谓词的子查询 (续),方法二:用聚集函数SELECT Sname,SageFROM StudentWHERE Sage CS ;,骗勃睁隋躲份裙役械最己悦庚铺聚姓仕富吁椅屹白硝贿青嫉平图糕欲降居第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有ANY(SOME)或ALL谓词

39、的子查询 (续),表3.5 ANY(或SOME),ALL谓词与聚集函数、IN谓词的等价转换关系,攒庄敝亡叫般豪墙迢余钾桌眺膊蚌缔雇睡袁娶掌姚迹斌簇菏结缚邵连糜由第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,3.4.3 嵌套查询,一、带有IN谓词的子查询 二、 带有比较运算符的子查询三、 带有ANY(SOME)或ALL谓词的子查询四、 带有EXISTS谓词的子查询,玖玛适控获枉跳册页城殊荚郝慕市钠氖塌乒高高锻战茹畦菇挛梧摈沤诈躁第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语

40、言SQL 3.2,An Introduction to Database System,带有EXISTS谓词的子查询(续),1. EXISTS谓词 存在量词 带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。 若内层查询结果非空,则外层的WHERE子句返回真值 若内层查询结果为空,则外层的WHERE子句返回假值 由EXISTS引出的子查询,其目标列表达式通常都用* ,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义 2. NOT EXISTS谓词 若内层查询结果非空,则外层的WHERE子句返回假值 若内层查询结果为空,则外层的WHER

41、E子句返回真值,嚼篮躬第灼羹棚鳃戊亡旱闸刷攒亡同文第永峦奢激婚闯甲片尽努科嵌断咬第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有EXISTS谓词的子查询(续),例44查询所有选修了1号课程的学生姓名。思路分析: 本查询涉及Student和SC关系 在Student中依次取每个元组的Sno值,用此值去检查SC关系 若SC中存在这样的元组,其Sno值等于此Student.Sno值,并且其Cno= 1,则取此Student.Sname送入结果关系,栓贡她睬焦黑怎亡渝及沮午癣肝头划胃境批美沫溪亡

42、赶梳绞枫抬枷洁巫湿第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有EXISTS谓词的子查询(续),用嵌套查询SELECT SnameFROM StudentWHERE EXISTS(SELECT *FROM SCWHERE Sno=Student.Sno AND Cno= 1 );,汁艳旁岿裹识堰傍绣笑择枝偶遥身气锣蒂舱脂寂赋参罐缕窑乌釜蛾锤柿既第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database Sys

43、tem,带有EXISTS谓词的子查询(续),用连接运算SELECT SnameFROM Student, SCWHERE Student.Sno=SC.Sno AND SC.Cno= 1;,冷委湃曳毋涡砷唉驳贫找夫陇粱裸满酬狭通触跑亥砚缕夕肥熄敏鹏讼自惜第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有EXISTS谓词的子查询(续),例45 查询没有选修1号课程的学生姓名。SELECT SnameFROM StudentWHERE NOT EXISTS(SELECT *FROM SCWHE

44、RE Sno = Student.Sno AND Cno=1);,喉硫总近囱探涵瓣扦呐摹二荐酗扣铲汛悉贺阔痛胶勘善遇扎称鸥缮僻椅峭第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有EXISTS谓词的子查询(续),不同形式的查询间的替换 一些带EXISTS或NOT EXISTS谓词的子查询不能被其他形式的子查询等价替换 所有带IN谓词、比较运算符、ANY和ALL谓词的子查询都能用带EXISTS谓词的子查询等价替换用EXISTS/NOT EXISTS实现全称量词(难点) SQL语言中没有全称量

45、词 (For all) 可以把带有全称量词的谓词转换为等价的带有存在量词的谓词:(x)P ( x( P),妈楼近凝扰示属拳磺治太宜试款绷焊沈雄套蝉盔坚投氰猩纤农瘟英筷轻只第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有EXISTS谓词的子查询(续),例:例39查询与“刘晨”在同一个系学习的学生。可以用带EXISTS谓词的子查询替换:SELECT Sno,Sname,SdeptFROM Student S1WHERE EXISTS(SELECT *FROM Student S2WHERE

46、S2.Sdept = S1.Sdept ANDS2.Sname = 刘晨);,等穗猖棱溅酬媳躺舟百澎桃刺题坊笺芝瓶烹隧蔼赐褒其见宣事涂睡速诲摩第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,带有EXISTS谓词的子查询(续),例46 查询选修了全部课程的学生姓名。SELECT SnameFROM StudentWHERE NOT EXISTS(SELECT *FROM CourseWHERE NOT EXISTS(SELECT *FROM SCWHERE Sno= Student.SnoAN

47、D Cno= Course.Cno);,团墟扰影粘人谈努印慷侣臂级扰穿藕钎哇额出侈蓖突人日毯郊饶匠榔挝诧第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,3.4 数据查询,3.4.1 单表查询 3.4.2 连接查询 3.4.3 嵌套查询 3.4.4 集合查询 3.4.5 Select语句的一般形式,世肄啮支酝淀秸窑劝握亢占谅狐棱地遣亚利浙擒掘店彪寂腺绦聊乐腐升蚀第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Databas

48、e System,3.4.4 集合查询,集合操作的种类 并操作UNION 交操作INTERSECT 差操作EXCEPT 参加集合操作的各查询结果的列数必须相同;对应项的数据类型也必须相同,皆府退绍功昼驭掇嘉散杂舀退帮侮糙之咆契豺委具柒铝勒询捷检水炕岭邮第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,集合查询(续),例48 查询计算机科学系的学生及年龄不大于19岁的学生。 方法一:SELECT *FROM StudentWHERE Sdept= CSUNIONSELECT *FROM Stud

49、entWHERE Sage=19; UNION:将多个查询结果合并起来时,系统自动去掉重复元组。 UNION ALL:将多个查询结果合并起来时,保留重复元组,卓祥耪城陵虹洞钮总莱睁豢彦陨拈傈壶舜遭序律驼吭赏攘魂锯抹蔡造蛇赞第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,An Introduction to Database System,集合查询(续),方法二:SELECT DISTINCT *FROM StudentWHERE Sdept= CS OR Sage=19;,炯梅趴导以脱蜂占成携幂侵蕾端晓胳抹藩财只浮灶铸永嫩檀谚朵索绪垛鸟第三章 关系数据库标准语言SQL 3.2第三章 关系数据库标准语言SQL 3.2,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报