MySql的多表查询

    我们在使用MySql数据库时,总是会碰到需要查询多个表的情况,下面就让小编介绍一些多表查询的方式方法吧。

一、多表查询的定义

    所谓多表查询顾名思义就是一次性查询多个数据表。在我们的使用过程中,我们碰到的多表查询的方法有内连接查询、外连接查询、自连接查询、联合查询、子查询、标量子查询、行子查询、列子查询、表子查询。

二、 多表查询的具体使用

注:下面所有查询都是基于下面展示的表student与表course。
表student的内容:
在这里插入图片描述
表course的内容:
在这里插入图片描述

1.内连接查询

1)隐式内连接

     隐式查询实际上类似直接使用select * from 表 where 条件字段=条件值,只不过区别是隐式查询需要查询的表有两个、后面跟的条件分别位于两个不同的表;但相同的是两者都有关键字where
(1)基本格式

select 需要显示的字段 from 表1,表2 [where 表1条件=表2条件];

(2)使用示例
示例1:显示表studnet的StudentId字段与表course的StudentId字段相等的所有数据
解决方案:
代码展示:

 select * from student s,course c where s.StudentId=c.StudentId;

图片展示:
在这里插入图片描述

示例2:显示表studnet的StudentId字段与表course的StudentId字段相等所有数据的StudentName值与CourseName值

 select s.StudentName,c.CourseName from student s,course c where s.StudentId=c.StudentId;

在这里插入图片描述
(说明:上述查询代码form后面接上的 student s,course c中s是student的别名,c是course的别名。)

2)显示内连接

    在显示内连接查询中,使用的关键字为[inner] join……on……,但在我们使用的过程中inner可以省略不码。
(1)基本格式

select 需要显示的数据 from 表1 [inner] join 表2 on 表1条件=表2条件;

(2)使用示例
示例1:显示表studnet的StudentId字段与表course的StudentId字段相等的所有数据
解决方案:
代码展示:

select * from student s inner join course c on s.StudentId=c.StudentId;

图片展示:
在这里插入图片描述
示例2:显示显示表studnet的StudentId字段与表course的StudentId字段相等所有数据的StudentName值与CourseName值

 select s.StudentName,c.CourseName from student s inner join course c on s.StudentId=c.StudentId;

在这里插入图片描述

2.外连接查询

    在显示外连接中,不管是左外连接还是右外连接,它们使用的共同关键字为……join ……on……

1)左外连接查询

(1)基本格式

select 字段列表 form 表1 left [outer] join  表2 on 条件;

(2)查询范围
左外查询查询的数据包括表1的数据与表1交表2的数据,即
在这里插入图片描述

(3)使用示例
示例1:查询表student中字段StudnetId值等于course表中StudentId的值的所有数据

select * from course c left join student s on c.StudentId=s.StudentId;

在这里插入图片描述

示例2:我们需要查找student表中学生选择的课程名称,那么我们可以用下面这用方式查询

select c.CourseName,s.StudentName from course c left join student s on c.StudentId=s.StudentId;

在这里插入图片描述

2)右外连接查询

(1)基本格式

select 字段列表 form 表1 right [outer] join  表2 on 条件;

(2)查询数据说明
右外连接查询查询得到的数据来源与表2以及表1与表2交集部分之和的数据,即
在这里插入图片描述

(3)使用示例

示例1:同上面示例1

select * from student s right join course c on c.StudentId=s.StudentId;

在这里插入图片描述
示例2:同上述示例2

select c.CourseName,s.StudentName from student s right join  course c on c.StudentId=s.StudentId;

在这里插入图片描述

3)两种外连接查询之间的联系

    通过上述两个示例,我们很清晰的能够看出来,当我们使用右外连接查询想要查询出与左外连接查询一样的数据时,我们只需要将两个表的位置相互调换即可。在使用过程中,一般使用左外连接查询次数较多。一般的右外连接查询也能够转换成左外连接查询。

3.自连接查询

    所谓自连接查询,它就是先通过将一张表通过取别名的方式看成两张表,再通过内连接查询或外连接查询的一个过程。

1)查询格式

查询格式可以见上述两种查询。

2)使用示例

示例1:通过自连接的方式查询表中的所有数据

select * from Student s1 join Student s2 on s1.StudentName=s2.StudentName;

在这里插入图片描述

3)使用范围

    通过上图,我们不难看出自连接就相当于查询一个表两次,那么我们什么时候使用自连接查询合适呢?在我们建立的表中,当某一个字段的值指向另一个字段时,我们在查询的过程中可以使用自查询,来查询两个字段的指向关系。

4.联合查询

    联合查询,就是通过union或者union all将两次的查询结果在一张表上呈现出来。但union与union all的区别是,union all是将两次查询结果直接相连接,不做去重处理;而union不但将两次结果相连接,还会有出重操作。不过,需要注意的是:联合查询的多张表需要有相同的行数以及相同的字段。

1)基本格式
select 需要显示字段 from 表1 [条件]
union
select 需要显示字段 from 表2 [条件]
2)使用示例

例如,显示表student中CourseId为"c002"与StudentId大于"s002"的数据
在这里插入图片描述

总结

    当我们需要查询多个表或者查询一个表中存在某种关系的两列数据时,我们可以使用多表查询。在上述的多表查询的方式中,连接查询就是直接查询一个或者两个表中符合某一个条件的所有数据,而联合查询得到的数据就是将两次查询的结果连在一张表中呈现出来。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值