《多表查询》word版_第1页
《多表查询》word版_第2页
《多表查询》word版_第3页
《多表查询》word版_第4页
全文预览已结束

下载本文档

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

文档简介

1、.多表查询1多表连接使用关系数据库的主要优点是可以通过构造多个表中的数据来消除数据冗余。在数据库设计阶段,由于一致性、方便性及性能的要求,表中的一列数必须有限制,而不能将所有数据都存储在一个表中,因此,许多信息将分散存储在不同的表中,以防止数据冗余、更新复杂等问题的产生。要从多个表中查询数据,就需要使用连接操作,连接操作给用户带来很大的灵活性,它们可以在任何时候增加新的数据类型,而能够从多个表中选择和操作数据。(1)笛卡尔乘积查询笛卡尔乘积就是从多个表中取数据时,在WHERE子句中没有指定多个表的公共关系。笛卡尔乘积查询实际上就是在两个表之间的交叉连接实现查询的方式,此连接不带WHERE子句,

2、返回到结果集合中的数据行数等于一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例如:A表中有M条记录,B表中有N条记录,其笛卡尔乘积是M×N条记录。在关系数据库中,表就是一个联合,当从两个(或多个)表中查询数据时,如果没有指定条件,那么这种查询结果就是笛卡尔乘积。例1 将学生课程数据库中的表Student和表SC进行笛卡尔乘积查询(即交叉查询)。Select * from Student,SC或Select Student.*,SC.* from Student Cross Join SC(2)通过WHERE子句连接多表在连接中,可以实现3个表或者多个表的连接。通

3、过WHERE子句实现多表连接,首先在FROM子句中连接多个表的名称,然后将任意两个表的连接条件分别写在WHERE子句后即可。语法格式如下:Select 字段名表From 表1,表2,表3Where 表1.字段=表2.字段 And 表2.字段=表3.字段 and 说明:在交叉连接查询语句中使用了WHERE子句时,返回的结果集是被连接的两个基表所有行的笛卡尔积中满足WHERE子句条件搜索到的行数的所有行数。例2 将学生课程数据库中的表Student和表SC进行按照WHERE子句的条件进行笛卡尔乘积查询(即交叉查询)。Select * from Student,SC where Student.Sn

4、o=SC.Sno或Select Student.*,SC.* from Student Cross Join SC where Student.Sno=SC.Sno(3)通过FROM子句连接多表FROM子句连接多个表就是内连接的扩展。在FROM子句中连接多个表的语法如下:Select 字段名表From 表1 Join 表2 Join 表3ON 表3.字段=表2.字段 ON 表2.字段=表1.字段 and 注意:在FROM子句中连接多个表时,FROM子句中所列出表的顺序(如:表1、表2和表3),一定要与ON语句后所列表的顺序相反(例如:表3、表2和表1),否则查询语句将不会执行。例3 将学生课程

5、数据库中的表Student、表SC和Course实现这3个表的连接查询,查询3个表中学号相同的学生选修课的有关信息和学生有关信息。Select Student.*,SC.*,Course.* from Student Join SC Join CourseON Course.Cno=SC.Cno ON SC.Sno=Student.Sno2内连接内连接就是使用比较运算符进行表与表之间列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。内连接可以用来组合两个或者多个表中的数据。一般用INNER JOIN或JOIN关键字来指定内连接,它是连接查询默认的连接方式。内连接的语法格式如下:SELE

6、CT select_listFROM 表名1 INNER JOIN 表名2 ON join_conditionWHERE search_conditionsORDER BY order_expression在内连接中,根据使用的比较方式不同,可以将内连接分为以下3种。等值连接:在连接条件中使用等于运算符比较被连接的列。不等值连接:在连接条件中使用除等于运算符外的其他比较运算符比较被连接的列。自然连接:它是等值连接的一种特殊情况,用来把目标中重复的属性列去掉。使用Join运算时,应当注意以下两点:在Join运算中,可以连接任何两个相同类型的数值列。如果被连接列不是数值型的,则它们必须具有相同的数

7、据类型,并且包含相同类型的数据,但是列名称不必相同。如果两个来源表中包含名称相同的列,用SELECT子句选取这些列时就应当冠以表名,否则会出现错误提示信息:列名“XXXXXX”不明确。(1)等值连接等值连接就是在连接条件中使用比较运算符等于号(=)来比较连接列的列值,其查询结果中将列出被连接表中的所有列,并且包括重复列。等值连接用于返回所有连接表中具有匹配值的行,而排除所有其他的行。等值连接查询有两种表示方法。例4 使用等值连接从两个表中检索数据。在学生课程数据库中,从表Student、表SC检索学生的课程、课程成绩和学生信息,要求以两个表的Sno作为连接列。方法一(使用内连接来查询)SELE

8、CT Student.*,SC.* FROM Student INNER JOIN SC ON Student.Sno=SC.Sno方法二(使用基本连接来查询)SELECT Student.*,SC.* FROM Student,SC where Student.Sno=SC.Sno(2)非等值连接非等值连接是指在连接条件中使用除等于运算符以外的其他比较运算符比较被连接的列值。可以使用的运算符包括:>、>=、<=、<、!>、!<、<>或!=。也可以使用范围运算符BETWEEN。例5 使用非等值连接从两个表中检索数据。在学生课程数据库中,从表Stu

9、dent、表SC检索学生的课程、课程成绩Grade>90的学生信息,要求以两个表的Sno作为连接列。方法一(使用内连接来查询)SELECT Student.*,SC.* FROM Student INNER JOIN SC ON Student.Sno=SC.Sno and Grade>90方法二(使用基本连接来查询)SELECT Student.*,SC.* FROM Student,SC where Student.Sno=SC.Sno and Grade>90(3)自然连接自然连接是等值连接的一种特殊形式。如果是按照两个表中的相同属性进行等值连接,且目标中去除重复的列,

10、保留所有不重复的列,则可以称之为自然连接。自然连接只有在两个表中有相同名称的列且列的含义相似时才能使用。例6 使用自然连接从两个表中检索数据。在学生课程数据库中,从表Student、表SC检索学生的学生的课程、课程成绩和学生信息,并且去除两表中的重复列。要求以两个表的Sno作为连接列。方法一(使用内连接来查询)SELECT Student.*,SC.Cno,SC.Grade FROM Student INNER JOIN SC ON Student.Sno=SC.Sno方法二(使用基本连接来查询)SELECT Student.*,SC.Cno,SC.Grade FROM Student,SC

11、where Student.Sno=SC.Sno3外连接内连接只是返回符合查询条件(where搜索条件和having条件)和连接条件的行,并返回所有满足连接条件的记录。而有时需要显示表中的所有记录,包括那些不符合连接条件的记录,此时就需要使用外连接。外连接的查询结果是内连接查询结果的扩展。在使用外连接查询时,所用的基表有主从表之分,连接时是以主表中每行的数据去匹配从表中的数据行,如果符合连接条件则返回到结果集中;如果没有找到匹配行,则主表的行仍然保留,并且返回到结果集中,相应的从表中的数据行被填上NULL值后也返回到结果集中。根据返回匹配行与不匹配行的主从表形式不同,外连接又分为左外连接、右外

12、连接和全外连接3种。外连接与内连接不同的是,外连接返回的不仅仅包含符合连接条件的行,而且还包括左表(左连接时)、右表(右外连接时)或两个连接表(全外连接)中的所有不符合搜索条件的数据行。(1)左外连接左外连接是返回所有的匹配行并从关键字JOIN左边的表中返回所有不匹配行。也就是说左外连接保留左表的所有行,但只包括右表与左表匹配的行,如果左表的某数据行没有在右表找到相应匹配的数据行,则结果集中右表的对应位置填入NULL值。在左外连接查询中左表就是主表,右表则是从表。左外连接的语法格式如下:SELECT select_listFROM 表名1 LEFT OUTER JOIN 表名2 ON join

13、_conditionsWHERE search_conditionsORDER BY order_expression例7 使用左外连接从两个表中检索数据。在学生课程数据库中,从表Student、表SC中检索数据,以查看学生及学生的学习成绩。SELECT Student.*,SC.Cno,SC.Grade FROM Student LEFT OUTER JOIN SC ON Student.Sno=SC.Sno说明:使用左外连接时首先应确定主表和从表。主表中不符合连接条件的行也包含在结果中。在本例中,因Student表中的个别学生可能没有选修课程,所以选用左外连接方式。(2)右外连接右外连接是

14、返回所有的匹配行并从关键字JOIN右边的表中返回所有不匹配行。右外连接是左外连接的反向,右外连接保留了右表的所有行,但只包含左表与右表匹配的行,如果右表的某数据行没有在左表找到相应的匹配的数据行,则结果集中左表的对应位置填入NULL值。在右外连接查询中右表成了主表,而左表则是从表。右外连接的语法格式如下:SELECT select_listFROM 表名1 RITGHT OUTER JOIN 表名2 ON join_conditionsWHERE search_conditionsORDER BY order_expression例8 使用右外连接从两个表中检索数据。改用右外连接实现例7的功能

15、。SELECT Student.*,SC.Cno,SC.Grade FROM SC RIGHT OUTER JOIN Student ON Student.Sno=SC.Sno说明:此例是例7的一个翻版,即把Student表和SC表之间的连接方式更改为右外连接,同时也把这两个表的前后位置交一换下。(3)全外连接全外连接又称为完全外连接,完全外连接查询返回左表和右表中所有行的数据。当一个基表中的某行在另一个基表中没有匹配行时,则另一个基表与之相对应的列值设为NULL值。如果基表之间有匹配行,则整个结果集包含基表的数据值。全外连接保留了两个基表中的所有行,并尽可能多的匹配数据和连接条件。其语法格式

16、如下:SELECT select_listFROM 表名1 FULL OUTER JOIN 表名2 ON join_conditionsWHERE search_conditionsORDER BY order_expression例9 使用完全外连接从两个表中检索数据。在学生课程数据库中,从表SC、表Course中检索数据,以查看学生的选修课、选修课的成绩及所有选修课信息。SELECT SC.Cno,Course.Cname,Course.Cpno,Course.Ccredit,SC.Grade FROM Course FULL OUTER JOIN SC ON Course.Cno=SC.Cno4自连接连接操作不仅可以在两个或多个基表之间进行,也可以在一个表内进行,这种在一个表内的连接方式称为自连接,或自身连接。自连接的连接操作是通过给基表定义别名的方式来实现的。实际上,

温馨提示

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

评论

0/150

提交评论