1、问题问题学生成绩查询显示的都是学生的学号和课程的课号信息。因为选课表中存储的只是编号。实际上最好显示学生的姓名和课程名,而姓名存储在学生表和课程表中;如何同时从这三个表中取得数据?5.3.3 5.3.3 连接查询连接查询 v连接查询:同时涉及多个表的查询连接查询:同时涉及多个表的查询v连接条件或连接谓词:用来连接两个表的条件连接条件或连接谓词:用来连接两个表的条件 一般格式:一般格式:n.n.BETWEEN.AND.v连接字段:连接谓词中的列名称连接字段:连接谓词中的列名称n连连接接条条件件中中的的各各连连接接字字段段类类型型必必须须是是可可比比的的,但但名名字字不不必是相同的必是相同的v连接
2、表的先决条件连接表的先决条件涉及到的表都是有关联关系的通过外键实现v连接方法连接方法在from子句中列出所有表在where子句中指定连接条件v注意注意对于同名字段引用时要有表名n个表连接应有n-1个连接条件3.4.2 3.4.2 连接查询连接查询 一、等值与非等值连接查询一、等值与非等值连接查询 1 1、等值连接、等值连接v连接运算符为连接运算符为 =的连接操作的连接操作.=.任任何何子子句句中中引引用用表表1和和表表2中中同同名名属属性性时时,都都必必须须加加表表名名前前缀缀。引引用唯一属性名用唯一属性名时可以加也可以省略表名前缀。时可以加也可以省略表名前缀。例例33 33 查询每个学生及其
3、选修课程的情况。查询每个学生及其选修课程的情况。SELECT Student.*,xuanke.*FROM Student,xuankeWHERE Student.Sno=xuanke.Sno;一、等值与非等值连接查询一、等值与非等值连接查询 2 2、自然连接、自然连接v等值连接的一种特殊情况,把目标列中重复的属性列去掉等值连接的一种特殊情况,把目标列中重复的属性列去掉 例例34 34 对对 例例33 33 查查询询每每个个学学生生及及其其选选修修课课程程的的情情况况用用自然连接完成自然连接完成SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
4、 FROM Student,SC WHERE Student.Sno=SC.Sno;二、自身连接二、自身连接v一个表与其自己进行连接,称为表的一个表与其自己进行连接,称为表的自身连接自身连接v需要给表起别名以示区别需要给表起别名以示区别v由于所有属性名都是同名属性,因此必须使用别名前缀由于所有属性名都是同名属性,因此必须使用别名前缀 例例3535查询每一门课的间接先修课(即先修课的先修课)查询每一门课的间接先修课(即先修课的先修课)SELECT FST.Cno,SEC.CpnoFROM Course FST,Course SECWHERE FST.Cpno=SEC.Cno自身连接(续)自身连接
5、(续)Cno CnameCpnoCcredit 1数据库数据库 5 4 2数学数学 2 3信息系统信息系统 1 4 4操作系统操作系统 6 3 5数据结构数据结构 7 4 6数据处理数据处理 2 7PASCAL语言语言 6 4Cno CnameCpnoCcredit 1数据库数据库 5 4 2数学数学 2 3信息系统信息系统 1 4 4操作系统操作系统 6 3 5数据结构数据结构 7 4 6数据处理数据处理 2 7PASCAL语言语言 6 4SECONDFIRSTcnocnocpnocpno1 17 73 35 55 56 6查询结果查询结果三三.内连接内连接v在新的在新的SQLSQL标准中内
6、(标准中内(INNERINNER)运算一般格式是:)运算一般格式是:Select From INNER JION On whereSELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeFROM Student INNER JOIN XUANKEON (XUANKE.Sno=Student.Sno)猜一猜:这样写,返回的查询结果是一样的吗?SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeFROM XUANKE INNER JOIN Student ON (Student.Sno=XUANKE.Sno
7、)再猜一猜:以下返回多少行?SELECT S.SName,C.CNO,C.GRADE From Student AS SINNER JOIN XUANKE AS CON C.SNO S.SNO内连接内连接-1-1StundentSNameSName梅超风陈玄风陆乘风曲灵风S SNONO1234查询结果查询结果SNameSName梅超风陈玄风陈玄风陆乘风C CNONOGRADEGRADE00100100200297896776陆乘风00381XUANKES SNONOC CNONOGRADEGRADE122300100100200297896776300381内连接内连接-2-2SELECT S
8、tudent.SName,Xuanke.Cno,Xuanke.GradeFROM Students,XuankeWHEREStudents.Sno=Xuanke.Sno三、外连接(三、外连接(Outer JoinOuter Join)v外连接与普通连接外连接与普通连接(内连接内连接)的区别的区别普通连接操作只输出满足连接条件的元组普通连接操作只输出满足连接条件的元组外连接操作以指定表为连接主体,将主体表中不满足连接条外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出件的元组一并输出 例例 36 36 查询每个学生及其选修课程的情况查询每个学生及其选修课程的情况(包括没有选修课
9、程的学生包括没有选修课程的学生)SELECT SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeStudent.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student FROM Student LEFT OUTER JOIN XUANKE LEFT OUTER JOIN XUANKE ON ON Student.SnoStudent.Sno=XUANKE.SnoXUANKE.Sno外连接(续外连接(续)v 左外连接左外连接列列出出左左边边关关系系(如如本本例例Student)中中所所有有的元组的元组 v
10、 右外连接右外连接列出右边关系中所有的元组列出右边关系中所有的元组 xuankeS SNONOC CNONOGRADEGRADE122300100100200297896776300381外连接外连接-左连接左连接StundentSNameSName梅超风梅超风陈玄风陈玄风陆乘风陆乘风曲灵风曲灵风S SNONO1234查询结果查询结果SNameSName梅超风梅超风陈玄风陈玄风陈玄风陈玄风陆乘风陆乘风C CNONOGRADEGRADE00100100200297896776陆乘风陆乘风00381曲灵风曲灵风NULLNULLSELECT S.SName,C.CNO,C.GRADE From St
11、udent AS SLEFT JOIN xuanke AS CON C.SNO=S.SNO猜一猜:这样写,返回的查询结果是一样的吗?SELECT S.SName,C.CNO,C.GRADEFrom xuanke AS CLEFT JOIN Student AS SONC.SNO=S.SNO五、复合条件连接五、复合条件连接WHEREWHERE子句中含多个连接条件时,称为复合条件连接子句中含多个连接条件时,称为复合条件连接 例例3737查询选修查询选修c002c002号课程且成绩在号课程且成绩在9090分以上的所有学生的分以上的所有学生的 学号、姓名学号、姓名 SELECT Student.Sno
12、,student.Sname FROM Student,xuanke WHERE Student.Sno=xuanke.Sno AND xuanke.Cno=c002 AND xuanke.Grade 90;例例38 38 查询每个学生的学号、姓名、选修的课程名及成绩。查询每个学生的学号、姓名、选修的课程名及成绩。SELECT Student.Sno,Sname,Cname,Grade FROM Student,xuanke,Course WHERE Student.Sno=xuanke.Sno and xuanke.Cno=Course.Cno;问题提出问题提出 学生信息表问题:问题:编写T-SQL语句,查看年龄比“张佳”大的学生,要求显示这些学生的信息?分析:分析:第一步:求出“张佳”的年龄;第二步:利用WHERE语句,筛选年龄比“张佳”大的学员;Sunday,November 6,2022 下课了。下课了。休息一会儿。休息一会儿。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1