收藏 分享(赏)

mysql连接查询.doc

上传人:ysd1539 文档编号:12340663 上传时间:2021-12-11 格式:DOC 页数:9 大小:207KB
下载 相关 举报
mysql连接查询.doc_第1页
第1页 / 共9页
mysql连接查询.doc_第2页
第2页 / 共9页
mysql连接查询.doc_第3页
第3页 / 共9页
mysql连接查询.doc_第4页
第4页 / 共9页
mysql连接查询.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、14.1 实验目的(1) 掌握多表连接查询的常用方法(2) 了解外连接查询的方法14.2 预备知识1. 多表连接查询的意义很多情况下,我们要查询的结果无法从一张表中得到。例如要想知道“参与了某个项目的所有员工姓名” ,就必须通过三张表联合查询,单纯从 JOB 表中只能得到参与项目开发的员工编号以及项目编号,无法得到员工姓名和项目名称。这时要用连接查询。连接查询是关系数据库中最主要的查询,主要包括内连接、外连接和交叉连接等。通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把

2、一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,然后通过连接进行查询。内连接的连接查询结果集中仅包含满足条件的行,内连接是 SQL Server 缺省的连接方式,可以把 INNER JOIN 简写成 JOIN,根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种;交叉连接的连接查询结果集中包含两个表中所有行的组合;外连接的连接查询结果集中既包含那些满足条件的行,还包含其中某个表的全部行,有 3 种形式的外连接:左外连接、右外连接、全外连接

3、2 内连接与外连接内连接: 内连接是一种最常用的连接类型。内连接查询实际上是一种任意条件的查询。使用内连接时,如果两个表的相关字段满足连接条件,则从这两个表中提取数据并组合成新的记录,也就是说,在内连接查询中,只有满足条件的元组才能出现在结果关系中。 例如:要查询每个已经选课的学生的情况,查询语句为 SELECT * FROM 学生表 INNER JOIN 选课表 ON 学生表.学号=选课表.学号 根据比较方式分为: 1)等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。 2)不等连接:在连接条件使用除等于运算符以外的其它比较

4、运算符比较被连接的列的列值。这些运算符包括、=、!。 3)自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。外连接: 内连接的查询结果都是满足连接条件的元组。但是,有时我们也希望输出那些不满足连接条件的元组的信息。比如,我们想知道每个学生的选课情况,包括已经选课的学生(这部分学生的学号在学生表中有,在选课表中也有,是满足连接条件的) ,也包括没有选课的学生(这部分学生的学号在学生表中有,但在选课表中没有,不满足连接条件) ,这时就需要使用外连接。外连接是只限制一张表中的数据必须满足连接条件,而另一张表中的数据可以

5、不满足连接条件的连接方式。3 种外连接: 1) 左外连接(LEFT OUTER JOIN) 如果在连接查询中,连接管子左端的表中所有的元组都列出来,并且能在右端的表中找到匹配的元组,那么连接成功。如果在右端的表中,没能找到匹配的元组,那么对应的元组是空值(NULL) 。这时,查询语句使用关键字 LEFT OUTER JOIN,也就是说,左外连接的含义是限制连接关键字右端的表中的数据必须满足连接条件,而不关左端的表中的数据是否满足连接条件,均输出左端表中的内容。 例如:要查询所有学生的选课情况,包括已经选课的和还没有选课的学生,查询语句为 SELECT 学生表.学号,姓名,班级,课程号,成绩 F

6、ROM 学生表 LEFT OUTER JOIN 选课表 ON 学生表.学号=选课表.学号 左外连接查询中左端表中的所有元组的信息都得到了保留。 2)右外连接(RIGHT OUTER JOIN) 右外连接与左外连接类似,只是右端表中的所有元组都列出,限制左端表的数据必须满足连接条件,而不管右端表中的数据是否满足连接条件,均输出表中的内容。 例如:同上例内容,查询语句为 SELECT 学生表.学号,姓名,班级,课程号,成绩 FROM 学生表 RIGHT OUTER JOIN 选课表 ON 学生表.学号=选课表.学号 右外连接查询中右端表中的所有元组的信息都得到了保留。 3)全外连接(FULL OU

7、TER JOIN) 全外连接查询的特点是左、右两端表中的元组都输出,如果没能找到匹配的元组,就使用 NULL 来代替。 例如:同左外连接例子内容,查询语句为 SELECT 学生表.学号,姓名,班级,课程号,成绩 FROM 学生表 FULL OUTER JOIN 选课表 ON 学生表.学号=选课表.学号 全外连接查询中所有表中的元组信息都得到了保留自连接查询如果在一个连接查询中,涉及到的两个表都是同一个表,这种查询称为自连接查询。同一张表在 FROM 字句中多次出现,为了区别该表的每一次出现,需要为表定义一个别名。自连接是一种特殊的内连接,它是指相互连接的表在物理上为同一张表,但可以在逻辑上分为

8、两张表。 例如:要求检索出学号为 20210 的学生的同班同学的信息,查询语句为 SELECT 学生表.* FROM 学生表 JOIN 学生表 AS 学生表 1 ON 学生表.班级=学生表 1.班级 WHERE 学生表 1.学号='20210' 左连接和右连接都是外部连接,也就是区别于内部连接,它对不满足连接条件的行 并不是象内部连接一样将数据完全过滤掉,而是保留一部分数据,行数不会减少。 比如:职员表包括:name,jobid 。有如下数据 mike 01 jack 02 rose 03 职务表包括jobid,jobname。有 01 engineer02 secretry。

9、现在显示 name,jobname 两列。如果通过 jobid 的内部连接做,结果为:mike engineer ,jack secretry .若用左连接(左边表的数据必显示)结果为 mike engineer ,jack secretry,rose.右连接则必显示右边表对应的数据 14.3 实验内容1. 对两张表使用内连接进行查询【示例题目 14-1】Book 表:建表如下:第二个表:Student 表:内连接 select *from Book as b, Student as swhere b.StudentId=s.StudentId 等价于如下(也可以不要关键字 inner,此为系

10、统默认)select *from Book as b inner join Student as s ON b.StudentId=s.StudentId查询结果为:相当于内连接的向右连接。以 from Book inner join Student等式右边为基准,即以Student 表(等式右表,s 表)的 s.StudentId 为基准,遍历 Book 表(等式左表,Book 表)中与之匹配的 b.StudentId,然后拼接返回。结果含有重复的列,b.StudentId 和s.StudentId。说明这与 where b.StudentId=s.StudentId 或者 s.Studen

11、tId=b.StudentId 位置没有关系。它仅仅代表满足条件而已,不判定谁为基准。以下外连接,交叉连接相同操作。2. 对多张表进行内连接查询【示例题目 14-2】这个例子依然用的是上面建好的表:查询语句:select * from Book as b full outer join Student as s ON b.StudentId=s.StudentId或者可以写成 select * from table1 cross join table2在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结 果中列出被连接表中的所有列,包括其中的重复列生成笛卡尔积它不使用任何匹配或者选取

12、条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接或左连接 )、右表(右外连接或右连接)或两个边接表( 全外连接)中的所有数据行left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录;right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录查询结果为:3 对两张表进行左连接查询【14.3 示例题目】:这个题目依然用的是已经建好的表:即以 from Book left join Student的 Book 表为基准,即以 Book 表(b 表)的 b.St

13、udentId 为基准。遍历 Student 表(s 表)中与之匹配的 b.StudentId。若 b.StudentId 含有 s.StudentId 匹配项,则进行拼接,然后遍历 Student 表的下一条 s.StudentId,当查询完毕则进入下一条b.StudentId。若 b.StudentId 没有相应 s.StudentId 匹配项时,则显示左表的项,拼接右表的项显示为 NULL。查询结果查询结果二:4 对两张表进行右连接查询【14.4 示例题目】这个题目依然用的是已经建好的表:即以 from Book right join Student的 Book 表为基准,即以 Book

14、 表(b 表)的 b.StudentId 为基准。遍历 Student 表(s 表)中与之匹配的 b.StudentId。若 b.StudentId 含有 s.StudentId 匹配项,则进行拼接,然后遍历 Student 表的下一条 s.StudentId,当查询完毕则进入下一条b.StudentId。若 b.StudentId 没有相应 s.StudentId 匹配项时,则显示左表的项,拼接右表的项显示为 NULL。查询结果如下:结果一:由查询得到的表可以知道,左查询与右查询得到的结果是不一样的,并不是简单的把表的顺序调换,右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。查询结果二;把表换了顺序之后再继续查:结果为:

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

当前位置:首页 > 生活休闲 > 科普知识

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


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

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

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