第三章SQL语言及TSQL的应用2.ppt
- 文档编号:2123093
- 上传时间:2022-10-27
- 格式:PPT
- 页数:86
- 大小:2.37MB
第三章SQL语言及TSQL的应用2.ppt
《第三章SQL语言及TSQL的应用2.ppt》由会员分享,可在线阅读,更多相关《第三章SQL语言及TSQL的应用2.ppt(86页珍藏版)》请在冰豆网上搜索。
第三章第三章SQL语言及语言及T-SQL的应用的应用
(2)内容概要内容概要:
3.13.1关系数据库的标准语言关系数据库的标准语言SQLSQL3.23.2数据定义数据定义3.33.3数据查询语言数据查询语言(重点重点)3.43.4数据操纵语言数据操纵语言(重点重点)实例分析实例分析:
StudentCourseSC返回3.3.33.3.3多表查询(连接查询)多表查询(连接查询)连接查询连接查询n同时涉及多个表的查询称为连接查询。
同时涉及多个表的查询称为连接查询。
n用用来来连连接接两两个个表表的的条条件件称称为为连连接接条条件件或或连连接接谓谓词词n一般格式:
一般格式:
.比较运算符:
比较运算符:
=、=、=、!
=.BETWEEN.AND.n连接字段连接字段连接谓词中的列名称为连接谓词中的列名称为连接字段连接字段。
连接条件中的各连接字段类型必须是可连接条件中的各连接字段类型必须是可比的,但不必是相同的。
比的,但不必是相同的。
DBMS执行连接操作的过程:
执行连接操作的过程:
n嵌套循环法嵌套循环法(NESTED-LOOP)(NESTED-LOOP)首先在首先在表表11中中找到找到第一个元组第一个元组,然后,然后从头开始扫描从头开始扫描表表22,逐一查找满足连接件的元组,找到后就将表,逐一查找满足连接件的元组,找到后就将表11中的第一个元组与该元组拼接起来,形成结果表中的第一个元组与该元组拼接起来,形成结果表中一个元组。
中一个元组。
表表2全部全部查找完后查找完后,再找表再找表1中中第二个元组第二个元组,然,然后后再从头开始扫描表再从头开始扫描表2,逐一查找满足连接条件的,逐一查找满足连接条件的元组,找到后就将表元组,找到后就将表1中的第二个元组与该元组拼中的第二个元组与该元组拼接起来,形成结果表中一个元组。
接起来,形成结果表中一个元组。
重复重复上述操作,上述操作,直到表直到表1中的全部元组中的全部元组都处理完都处理完毕。
毕。
SQL中连接查询的主要类型:
中连接查询的主要类型:
广义笛卡尔积广义笛卡尔积等值连接等值连接自然连接自然连接非等值连接查询非等值连接查询自身连接查询自身连接查询外连接查询外连接查询复合条件连接查询复合条件连接查询一、广义笛卡尔积一、广义笛卡尔积不带连接谓词的连接不带连接谓词的连接很少使用很少使用例例11:
SELECTStudent.*,SC.*SELECTStudent.*,SC.*FROMStudent,SCFROMStudent,SCT-SQL:
T-SQL:
格式一格式一:
SELECT:
SELECT列名列表列名列表FROMFROM表名表名11CROSSJOINCROSSJOIN表名表名22例例:
select*fromstudentcrossjoinsc或或selectstudent.*,sc.*FROMSTUDENTcrossjoinsc格式二格式二:
SELECTSELECT列名列表列名列表FROMFROM表名表名11,表名,表名22返回二、等值与非等值连接查询二、等值与非等值连接查询分类:
等值连接、自然连接、非等值连接分类:
等值连接、自然连接、非等值连接等值连接:
等值连接:
.=.若子句中引用表若子句中引用表1和表和表2中中同名属性同名属性时,都时,都必须加表名前缀必须加表名前缀。
引用唯一属性名。
引用唯一属性名时可以加也可以省略表名前缀。
时可以加也可以省略表名前缀。
例例2查询每个学生及其选修课程的情况。
查询每个学生及其选修课程的情况。
SELECTStudent.*,SC.*FROMStudent,SCWHEREStudent.Sno=SC.Sno;结果表结果表返回T-SQLT-SQL中等值连接操作的格式:
中等值连接操作的格式:
SELECTSELECT列名列表列名列表FROMFROM表名表名11,表名,表名22WHEREWHERE表名表名1.1.列名列名=表名表名2.2.列名列名或或SELECTSELECT列名列表列名列表FROMFROM表名表名11INNERJOININNERJOIN表名表名22ONON表名表名1.1.列名列名=表名表名2.2.列名列名如:
如:
selectstudent.*,sc.*fromstudentinnerjoinsconstudent.sno=sc.sno自然连接自然连接,删去重复的属性列删去重复的属性列。
例例3对对例例2用自然连接完成。
用自然连接完成。
SELECTStudent.Sno,Sname,Ssex,birthday,Sdept,Cno,GradeFROMStudent,SCWHEREStudent.Sno=SC.Sno;返回非等值连接非等值连接.2比较运算符:
比较运算符:
、=、=70;SC.Grade70;返回运行结果运行结果:
StudentSC例例7查查询询每每个个学学生生的的学学号号、姓姓名名、选选修修的的课课程程名名及及成绩。
成绩。
SELECTStudent.Sno,Sname,Cname,GradeFROMStudent,SC,CourseWHEREStudent.Sno=SC.SnoandSC.Cno=Course.Cno;如结果:
如结果:
3.3.4嵌套查询嵌套查询1、嵌套查询概述嵌套查询概述一个一个SELECT-FROM-WHERE语句称为一个查询块。
语句称为一个查询块。
将一个查询块嵌套在另一个查询块的将一个查询块嵌套在另一个查询块的WHERE子句子句或或HAVING短语的条件中的查询称为嵌套查询。
短语的条件中的查询称为嵌套查询。
SELECTSname外层查询外层查询/父查询父查询FROMStudentWHERESnoIN(SELECTSno内层查询内层查询/子查询子查询FROMSCWHERECno=002);子查询子查询的的限制限制不能使用不能使用ORDERBY子句子句,其只能对最终结,其只能对最终结果排序。
果排序。
层层嵌套方式反映了层层嵌套方式反映了SQL语言的结构化。
语言的结构化。
有些嵌套查询可以用连接运算替代。
有些嵌套查询可以用连接运算替代。
2、嵌套查询分类嵌套查询分类不相关子查询不相关子查询:
子查询的查询条件不依赖于父查询。
:
子查询的查询条件不依赖于父查询。
相关子查询相关子查询:
子查询的查询条件依赖于父查询。
:
子查询的查询条件依赖于父查询。
3、嵌套查询求解方法嵌套查询求解方法不相关子查询不相关子查询:
是:
是由里向外由里向外逐层处理。
即每个子逐层处理。
即每个子查询在上一级查询处理之前求解,子查询的结果查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。
用于建立其父查询的查找条件。
相关子查询相关子查询:
首先:
首先取外层查询取外层查询中表的中表的第一个元组第一个元组,根据它根据它与内层查询相关的属性值处理内层查询与内层查询相关的属性值处理内层查询,若若父层父层WHERE子句返回值为真子句返回值为真,则,则取此元组放入取此元组放入结果表结果表;然后然后再取外层表的下一个元组再取外层表的下一个元组;重复这一过程,重复这一过程,直直至至外层表全部检查完为止外层表全部检查完为止。
4、引出子查询的谓词、引出子查询的谓词带有带有ININ谓词谓词的子查询的子查询带有带有比较运算符比较运算符的子查询的子查询带有带有ANYANY或或ALLALL谓词谓词的子查询的子查询带有带有EXISTSEXISTS谓词谓词的子查询的子查询一、带有一、带有ININ谓词的子查询谓词的子查询例例88查询与查询与“刘晨刘晨”在同一个系学习的学生。
在同一个系学习的学生。
此查询要求可以分步来完成此查询要求可以分步来完成确定确定“刘晨刘晨”所在系名所在系名SELECTSdeptSELECTSdeptFROMStudentFROMStudentWHERESname=WHERESname=刘晨刘晨;结果为:
结果为:
SdeptIS查找所有在查找所有在ISIS系学习的学生的学号、姓名、系。
系学习的学生的学号、姓名、系。
SELECTSnoSELECTSno,SnameSname,SdeptSdeptFROMStudentFROMStudentWHERESdept=ISWHERESdept=IS;结果为:
结果为:
SnoSnameSdeptSnoSnameSdept9500195001刘晨刘晨ISIS9500495004张立张立ISIS将第一步查询嵌入到第二步查询的条件中将第一步查询嵌入到第二步查询的条件中SELECTSno,Sname,SdeptSELECTSno,Sname,SdeptFROMStudentFROMStudentWHERESdeptWHERESdeptININ(SELECTSdept(SELECTSdeptFROMStudentFROMStudentWHERESname=WHERESname=刘晨刘晨););注:
此查询为注:
此查询为不相关子查询不相关子查询。
DBMSDBMS求解该查询时也是分步去做的。
求解该查询时也是分步去做的。
用用自身连接自身连接完成本查询要求完成本查询要求SELECTS1.Sno,S1.Sname,S1.SdeptFROMStudentS1,StudentS2WHERES1.Sdept=S2.SdeptANDS2.Sname=刘晨刘晨;结果为:
结果为:
例例9查询选修了课程名为查询选修了课程名为“信息系统信息系统”的学生学号和姓名。
的学生学号和姓名。
(用子查询实现)(用子查询实现)SELECTSno,Sname最后在最后在Student关系中关系中FROMStudent取出取出Sno和和SnameWHERESnoIN(SELECTSno然后在然后在SC关系中找出选关系中找出选FROMSC修了修了3号课程的学生学号号课程的学生学号WHERECnoIN(SELECTCno首先在首先在Course关系中找出关系中找出“信信FROMCourse息系统息系统”的课程号,结果为的课程号,结果为3号号WHERECname=信息系统信息系统);方法二:
方法二:
用连接查询用连接查询SELECTSno,SnameFROMStudent,SC,CourseWHEREStudent.Sno=SC.SnoANDSC.Cno=Course.CnoANDCourse.Cname=信息系统信息系统;例例10假设一个学生只可能在一个系学习,并且必须假设一个学生只可能在一个系学习,并且必须属于一个系,则在属于一个系,则在例例8可以用可以用=代替代替IN:
SELECTSno,Sname,SdeptFROMStudentWHERESdept=(SELECTSdeptFROMStudentWHERESname=刘晨刘晨);子查询子查询一定要一定要跟在比较符跟在比较符之后之后错误错误的例子:
的例子:
SELECTSnoSELECTSno,SnameSname,SdeptSdeptFROMStudentFROMStudentWHERE(SELECTSdeptWHERE(SELECTSdeptFROMStudentFROMStudentWHERESname=WHERESname=刘晨刘晨)=SdeptSdept;二、带有比较运算符的子查询二、带有比较运算符的子查询当能确切知道内层查询返回单值时,可当能确切知道内层查询返回单值时,可用比较运算符(用比较运算符(,=,=,!
=!
=或或)。
)。
n与与ANYANY或或ALLALL谓词配合使用。
谓词配合使用。
nANY表示子查询结果中的某个值,表示子查询结果中的某个值,n而而ALL表示子查询结果中的所有值。
表示子查询结果中的所有值。
带有带有ANY或或ALL谓词的比较运算符的含义:
谓词的比较运算符
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 SQL 语言 TSQL 应用