Mysql关联查询的分类
关联查询语法
内连接
SELECT 
e.`name`,e.sex,d.deptName 
FROM emp e 
inner JOIN dept d 
on 
e.deptId=d.deptId
左外关联
 select 
e.name,e.sex,d.deptName 
from dept d 
left join emp e 
on 
d.deptId=e.deptId
右外关联
 select 
e.name,e.sex,d.deptName 
from dept d 
right join emp e 
on 
d.deptId=e.deptId
 全外关联
 select
 e.name,e.sex,d.deptName 
from dept d
 right join emp e 
on 
d.deptId = e.deptId
 union
select
 e.NAME,e.sex,d.deptName 
from dept d
 left join emp e 
on
d.deptId = e.deptId
自连接 
 select 
e.name as empName,
b.name as bossName 
from emp e 
left join emp b 
on e.boosId=b.id

在Mysql关联查询中 可以大概分为以下几种关联查询分时分别如下 内连接 外连接(左外连接 右外连接 全外连接) 自连接

内连接

特点

只查询两张表能关联上的字段信息,如果关联不上什么信息都不显示

思路

编写关联查询分为三个步骤

  1. 先确定需要关联的表
  2. 在确定需要查询的字段
  3. 最后确定表之间的关联字段

使用

例如 我有两张表分别是 emp 表 和 dept表 它们的字段如下

emp




MySQL中员工号英文 mysql查询员工姓名_关联查询


dept


MySQL中员工号英文 mysql查询员工姓名_字段_02


假如我们有如下需求我们要查询这个员工所在的部门名称以及它的姓名与性别 我们该如何操作呢,我们会发现这两个表没有哪一张表是把整个数据都存进去的, 这个时候我们就要用到关联查询了 我们先来看看内连接是个怎么样的效果吧

两张表的数据如下

emp


MySQL中员工号英文 mysql查询员工姓名_字段_03


dept


MySQL中员工号英文 mysql查询员工姓名_关联查询_04


sql语句如下

SELECT e.`name`,e.sex,d.deptName FROM emp e inner JOIN dept d on e.deptId=d.deptId

查询结果如下


MySQL中员工号英文 mysql查询员工姓名_字段_05


总结:这个时候我们会发现没有周六的信息是不是非常符合内连接的特定呢? 只查询两张表能关联上的字段信息,如果关联不上什么信息都不显示

外连接

分类

左连接

特点

以左边的表为基础关联另外的表,左边的表的字段无论如何都会被查询出来,如果左边的表关联不上另外一张表则另外一张表的字段显示为空值

使用

两张表数据如下

emp


MySQL中员工号英文 mysql查询员工姓名_关联查询_06


dept


MySQL中员工号英文 mysql查询员工姓名_字段_07


需求还是查询员工的姓名以及性别和所属部门

sql语句如下

select e.name,e.sex,d.deptName from dept d left join emp e on d.deptId=e.deptId

查询结果如下


MySQL中员工号英文 mysql查询员工姓名_MySQL中员工号英文_08


总结:这个时候我们会发现部门为设计部的信息是不是非常符合左外连接的特点呢? 以左边的表为基础关联另外的表,左边的表的字段无虑如何都会被查询出来,如果左边的表关联不上另外一张表则另外一张表的字段显示为空值

右连接

特点

以右边的表为基础关联另外的表,右边的表的字段无虑如何都会被查询出来,如果右边的表关联不上另外一张表则另外一张表的字段显示为空值

使用

两张表数据如下

emp


MySQL中员工号英文 mysql查询员工姓名_关联查询_06


dept


MySQL中员工号英文 mysql查询员工姓名_字段_07


需求还是查询员工的姓名以及性别和所属部门

sql语句如下

select e.name,e.sex,d.deptName from dept d right join emp e on d.deptId=e.deptId

查询结果如下


MySQL中员工号英文 mysql查询员工姓名_MySQL中员工号英文_11


总结:这个时候我们会发现员工周六的信息是不是非常符合右外连接的特点呢? 以右边的表为基础关联另外的表, 右边的表的字段无虑如何都会被查询出来,如果右边的表关联不上另外一张表则另外一张表的字段显示为空值

全外连接

特点

把两张表全部都为基础表,没有关联上的字段显示为空值

使用

两张表的数据如下

emp


MySQL中员工号英文 mysql查询员工姓名_关联查询_06


dept


MySQL中员工号英文 mysql查询员工姓名_字段_07


sql语句如下

SELECT
 e.NAME,
 e.sex,
 d.deptName 
FROM
 dept d
 RIGHT JOIN emp e ON d.deptId = e.deptId
 UNION
SELECT
 e.NAME,
 e.sex,
 d.deptName 
FROM
 dept d
 left JOIN emp e ON d.deptId = e.deptId

总结这个时候我们会发现这种查询方式是不是非常符合全外连接的特点呢? 把两张表全部都为基础表,没有关联上的字段显示为空值

自连接

特点

把同一张表看成是另外一张表在这张表的基础上面做关联查询这种查询方式被称作为自连接

使用

两张表数据如下

emp


MySQL中员工号英文 mysql查询员工姓名_关联查询_06


dept


MySQL中员工号英文 mysql查询员工姓名_字段_07


需求查询每个员工的姓名以及上级领导的名称是谁?

sql语句如下

select e.name as empName,b.name as bossName from emp e left join emp b on e.boosId=b.id

查询结果如下


MySQL中员工号英文 mysql查询员工姓名_关联查询_16


总结:这个时候我们会发现这种查询方式是不是非常符合自连接的特点呢? 把同一张表看成是另外一张表在这张表的基础上面做关联查询这种查询方式被称作为自连接