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关联查询中 可以大概分为以下几种关联查询分时分别如下 内连接 外连接(左外连接 右外连接 全外连接) 自连接
内连接
特点
只查询多张表能关联上的字段信息,如果关联不上什么信息都不显示
思路
编写关联查询分为三个步骤
-
先确定需要关联的表
-
在确定需要查询的字段
-
最后确定表之间的关联字段
使用
例如 我有两张表分别是 emp 表 和 dept表 它们的字段如下
emp
dept
假如我们有如下需求我们要查询这个员工所在的部门名称以及它的姓名与性别 我们该如何操作呢,我们会发现这两个表没有哪一张表是把整个数据都存进去的, 这个时候我们就要用到关联查询了 我们先来看看内连接是个怎么样的效果吧
两张表的数据如下
emp
dept
sql语句如下
SELECT e.`name`,e.sex,d.deptName FROM emp e inner JOIN dept d on e.deptId=d.deptId
查询结果如下
总结:这个时候我们会发现没有周六的信息是不是非常符合内连接的特定呢? 只查询两张表能关联上的字段信息,如果关联不上什么信息都不显示
外连接
分类
左连接
特点
以左边的表为基础关联另外的表,左边的表的字段无论如何都会被查询出来,如果左边的表关联不上另外一张表则另外一张表的字段显示为空值
使用
两张表数据如下
emp
dept
需求还是查询员工的姓名以及性别和所属部门
sql语句如下
select e.name,e.sex,d.deptName from dept d left join emp e on d.deptId=e.deptId
查询结果如下
总结:这个时候我们会发现部门为设计部的信息是不是非常符合左外连接的特点呢? 以左边的表为基础关联另外的表,左边的表的字段无虑如何都会被查询出来,如果左边的表关联不上另外一张表则另外一张表的字段显示为空值
右连接
特点
以右边的表为基础关联另外的表,右边的表的字段无虑如何都会被查询出来,如果右边的表关联不上另外一张表则另外一张表的字段显示为空值
使用
两张表数据如下
emp
dept
需求还是查询员工的姓名以及性别和所属部门
sql语句如下
select e.name,e.sex,d.deptName from dept d right join emp e on d.deptId=e.deptId
查询结果如下
总结:这个时候我们会发现员工周六的信息是不是非常符合右外连接的特点呢? 以右边的表为基础关联另外的表, 右边的表的字段无虑如何都会被查询出来,如果右边的表关联不上另外一张表则另外一张表的字段显示为空值
全外连接
特点
把两张表全部都为基础表,没有关联上的字段显示为空值
使用
两张表的数据如下
emp
dept
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
dept
需求查询每个员工的姓名以及上级领导的名称是谁?
sql语句如下
select e.name as empName,b.name as bossName from emp e left join emp b on e.boosId=b.id
查询结果如下