查询联结查询_第1页
查询联结查询_第2页
查询联结查询_第3页
查询联结查询_第4页
查询联结查询_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

查询联结查询第一页,共三十四页,编辑于2023年,星期日联接查询查询男生的学号、姓名、课程名称和成绩,并按成绩从高到低排序。引例:第二页,共三十四页,编辑于2023年,星期日涉及的表及字段TEACHER(TNO,TNAME,CNO,SAL,DNAME,TSEX,AGE)COURSE1(CNO,CNAME,CTIME,SCOUNT,CTEST)STUDETN1(SNO,SNAME,DNAME,SSEX,CNO,MARK,TYPE)第三页,共三十四页,编辑于2023年,星期日第四页,共三十四页,编辑于2023年,星期日1第五页,共三十四页,编辑于2023年,星期日1第六页,共三十四页,编辑于2023年,星期日联接查询的实现

在FROM中指定表,在WHERE子句中指定联结条件使用JOIN关键字,即在FROM子句中实现联结联结查询第七页,共三十四页,编辑于2023年,星期日联结查询创建表的基本联结,需要遵守的基本原则:FROM子句中列出所有联结的表的表名。WHERE子句中定义联结条件。当列名为多个表共有时,要指明列的所在表。第八页,共三十四页,编辑于2023年,星期日1.连接查询的语法结构连接查询中用来连接两个表的条件称为连接条件或连接谓词,其形式为:

[<表1>].<列名1><连接运算符>[<表2>].<列名2>常见的连接运算符包括:比较运算符:=、>、<、>=、<=、!=、BETWEEN和AND。逻辑运算符:NOT、AND、OR。使用BETWEEN和AND的连接查询形式为:

[<表1>].<列名1><BETWEEN>[<表2>].<列名2>AND[<表2>].<列名3>联结查询第九页,共三十四页,编辑于2023年,星期日2.连接查询的分类

1)按照是否使用“=”连接运算符分类等值连接:使用“=”。非等值连接:不使用“=”。

2)按照结果集分类:内连接和外连接3.笛卡尔积连接笛卡尔积是不带连接谓词的连接,只是两个表记录的交叉乘积,其结果会产生一些无意义的组合值。其语法如下:

SELECTselect_listFROMtable1,table2联结查询第十页,共三十四页,编辑于2023年,星期日一、表的基本联结—两个表【例】查询每个教师的姓名、所在系、所教课程名及该课程的考试时间。SELECTTNAME,DNAME,CNAME,CTESTFROMTEACHER,COURSE1WHERETEACHER.CNO=COURSE1.CNO第十一页,共三十四页,编辑于2023年,星期日一、表的基本联结—多个表(复合连接)【例】查询每个学生的姓名、所在系、所选修课程名称、该课程的考试时间、考试成绩和授课教师姓名。SELECTSNAME,STUDENT1.DNAME,CNAME,CTEST,MARK,TNAMEFROMTEACHER,COURSE1,STUDENT1WHERESTUDENT1.CNO=COURSE1.CNOANDTEACHER.CNO=STUDENT1.CNO第十二页,共三十四页,编辑于2023年,星期日一、表的基本联结—使用表别名【例】查询每个学生的姓名、所在系、所选修课程名称、该课程的考试时间、考试成绩和授课教师姓名。SELECTSNAME,S.DNAME,CNAME,CTEST,MARK,TNAMEFROMTEACHERAST

,COURSE1ASC,STUDENT1SWHERES.CNO=C.CNOANDT.CNO=S.CNO注:使用别名后,在语句中就不能再使用表的原名。第十三页,共三十四页,编辑于2023年,星期日二、采用JOIN关键字建立联结在FROM子句中实现表的联结,有助于将联结条件与WHERE的搜索条件区分开,WHERE子句包含的搜索条件,用于进一步筛选根据联结条件选择的行。第十四页,共三十四页,编辑于2023年,星期日JOIN联结的语法格式SELECT……FROMfirst_tablejoin_typesecond_table

ON[(]join_condition[)]WHERE……..【例】FROMSTUDENTJOINS_C

ON(STUDENT.SNO=S_C.SNO)注:1.Join_type:联结的类型。2.ON子句:指出联结条件。第十五页,共三十四页,编辑于2023年,星期日联接查询分类内部联接(INNERJOIN):外部联接(OUTERJOIN):

左向外部联接(LEFTOUTERJOIN)

右向外部联接(RIGHTOUTERJOIN)

完整外部联接(FULLOUTERJOIN)交叉联接(CROSSJOIN):也称作笛卡儿积。第十六页,共三十四页,编辑于2023年,星期日内部联接(INNERJOIN)典型的联接运算,也可以叫做等同联接,使用类似于“=”或“<>”的比较运算符根据每个表的通用列中的值匹配两个表中的行。返回结果集是两个表中所有相匹配的数据,而舍弃不匹配的数据。第十七页,共三十四页,编辑于2023年,星期日内部联接(INNERJOIN)XYX

INNERJOIN

Y

ON

X.C=Y.C第十八页,共三十四页,编辑于2023年,星期日内部联结

【例】从STUDENT1表和TEACHER表中查询学生姓名、所在系、所修的所有课程的课程号及开课教师姓名。SELECTSNAME,S.DNAME,S.CNO,TNAMEFROMSTUDENT1ASS

INNERJOIN

TEACHERASTONS.CNO=T.CNO第十九页,共三十四页,编辑于2023年,星期日练习查询学生修的非本系教师开设的课程信息,包括学生的学号、姓名、所在系、课程号、成绩、以及开课教师的姓名。SELECTS.SNO,SNAME,S.DNAME,S.CNO,MARK,TNAMEFROMSTUDENT1ASS

INNERJOIN

TEACHERAST

ONS.CNO=T.CNO

ANDS.DNAME<>T.DNAME第二十页,共三十四页,编辑于2023年,星期日外部联接XY左外部联结(LEFTOUTERJOIN)的结果集包括左表的所有行,而不仅仅是匹配行。表示为:左外连接=内连接+左边表中失配的元组XLEFTOUTERJOINYONX.C=Y.C第二十一页,共三十四页,编辑于2023年,星期日外部联接右外部联结(RIGHTOUTERJOIN)的结果集包括右表的所有行,而不仅仅是匹配行。表示为:右外连接=内连接+右边表中失配的元组XRIGHTOUTERJOINYONX.C=Y.CXY第二十二页,共三十四页,编辑于2023年,星期日外部联接完整外部联结(FULLOUTERJOIN)的结果集包括左表和右表的所有行,而不仅仅是匹配行。XFULLOUTERJOINYONX.C=Y.CXY第二十三页,共三十四页,编辑于2023年,星期日查询所有学生的学号、姓名、课程号、课程名称、考试时间和成绩。即使该学生所选的课程不包含在COURSE1表内。SELECTS.SNO,SNAME,S.CNO,CNAME,CTEST,S.MARKFROMSTUDENT1ASS

LEFTOUTER

JOIN

COURSE1ASC

ONS.CNO=C.CNO实例第二十四页,共三十四页,编辑于2023年,星期日练习SELECTS.SNO,SNAME,S.CNO,TNAMEFROMSTUDENT1ASS

RIGHTOUTERJOIN

TEACHERAST

ONS.CNO=T.CNO

查询学生的学号、姓名、课程号和授课教师。即使有些老师没有授课课程。第二十五页,共三十四页,编辑于2023年,星期日交叉联结(CROSSJOIN)交叉联接:也称作笛卡儿积。左表中的每一行均与右表中的所有行组合。第二十六页,共三十四页,编辑于2023年,星期日交叉联结(CROSSJOIN)SELECTS.SNO,SNAME,S.CNO,CNAME,CTEST,MARKFROMSTUDENT1ASS

CROSSJOINCOURSE1ASC注意:使用CROSSJOIN所得到的只是两个表的笛卡尔积,得不到想要的结果。我们可以使用WHERE关键字指定搜索条件,这样就和内连接的作用相同了。WHERES.CNO=C.CNO第二十七页,共三十四页,编辑于2023年,星期日自联结自联结是指表与其自身进行联结。【例】查询存在不及格课程的学生的姓名、所在系、不及格的课程及成绩信息。SELECTSNAME,DNAME,CNO,MARKFROMSTUDENT1WHEREMARK<60第二十八页,共三十四页,编辑于2023年,星期日查询存在不及格课程的学生的姓名、所在系、所有的课程号及成绩信息。SELECTDISTINCTS1.SNAME,S1.DNAME,S1.CNO,S1.MARKFROMSTUDENT1ASS1

JOINSTUDENT1ASS2

ON

S1.SNO=S2.SNO

ANDS2.MARK<60

实例自联接中必须为表创建两个不同的别名,使之成为逻辑上的两张表。第二十九页,共三十四页,编辑于2023年,星期日分析—两步SELECTdistinctSNOFROMSTUDENT1WHEREMARK<60SELECTSNAME,DNAME,CNO,MARKFROMSTUDENT1WHERESNOIN('9702','9703','9705')ORDERBYSNAME第三十页,共三十四页,编辑于2023年,星期日分析—一步SELECTDISTINCTS1.SNAME,S1.CNO,S1.MARK…FROMSTUDENT1ASS1JOINSTUDENT1ASS2ONS1.SNO=S2.SNOANDS2.MARK<60不加distinct的结果:第三十一页,共三十四页,编辑于2023年,星期日练习在course表中,查询课程学分相同,但名字不同的课程的编号(CNO)、名称(CNAME)和学分(CREDIT)。USEteachingSELECTDISTINCTC.CNO,C.CNAME,C.CREDITFROMCOURSEASCJOINCOURSEASCCONC.CREDIT=CC.CREDITANDC.CNAME<>CC.CNAME第三十二页,共三十四页,编辑于2023年,星期日使用UNION子句使用UNION子句的查询称为联合查询,它可以将两个或更多查询的结果集组合为一个结果集。

使用UNION组合两个查询的结果集的两个基本规则是:(1)所有查询中的列数和列的顺序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论