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 left关联查询 mysql关联查询原理_mysql left关联查询

dept

mysql left关联查询 mysql关联查询原理_字段_02

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

两张表的数据如下

emp

mysql left关联查询 mysql关联查询原理_mysql left关联查询_03

dept

mysql left关联查询 mysql关联查询原理_自连接_04

sql语句如下

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

查询结果如下

mysql left关联查询 mysql关联查询原理_关联查询_05

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

外连接

分类

左连接

特点

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

使用

两张表数据如下

emp

mysql left关联查询 mysql关联查询原理_自连接_06

dept

mysql left关联查询 mysql关联查询原理_mysql_07

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

sql语句如下

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

查询结果如下

mysql left关联查询 mysql关联查询原理_mysql left关联查询_08

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

右连接

特点

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

使用

两张表数据如下

emp

mysql left关联查询 mysql关联查询原理_自连接_06

dept

mysql left关联查询 mysql关联查询原理_mysql_07

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

sql语句如下

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

查询结果如下

mysql left关联查询 mysql关联查询原理_关联查询_11

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

全外连接

特点

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

使用

两张表的数据如下

emp

mysql left关联查询 mysql关联查询原理_自连接_06

dept

mysql left关联查询 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 left关联查询 mysql关联查询原理_自连接_06

dept

mysql left关联查询 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 left关联查询 mysql关联查询原理_自连接_16

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