MySQL 连接查询(多表查询 二)

基本介绍

作用:连接查询(Join)操作,用于联结多个表以获取更全面和准确的数据

基本分类:

  • 内连接:相当于查询A、B交集部分数据(去掉迪卡尔积无效组合)
  • 外连接:
    • 左外连接:查询左表所有数据,以及两张表交集部分数据
    • 右外连接:查询右表所有数据,以及两张表交集部分数据
  • 自连接:当前表与自身的连接查询,自连接必须使用表别名

内连接

语法(两种语法不同,作用相同):

隐式内连接:select 字段列表 from 表1 , 表2 where 条件 ... ;

显式内连接:select 字段列表 from 表1 [  inner ] join 表2 on 连接条件 ... ;

-- 内连接 查询员工与部门关联信息
select employees.name 员工名字, departments.name 部门名称
from employees
inner join departments
on employees.department_id = departments.id

MySQL 连接查询(多表查询 二)_第1张图片

外连接(左外连接和右外连接可以相互替换)

左外连接

语法:select 字段列表 from 表1 left [ outer] join 表2 on 条件 ... ;

-- 左外连接 从员工表查询对应部门
select employees.name, departments.name 部门名称
from employees
left join departments
on employees.department_id = departments.id
limit 5,6;

MySQL 连接查询(多表查询 二)_第2张图片

右外连接

语法:select 字段列表 from 表1 right [ outer] join 表2 on 条件 ... ;

-- 右外连接 从部门表查询对应员工信息
select employees.name, departments.name 部门名称
from employees
right join departments
on employees.department_id = departments.id
limit 5,6;

MySQL 连接查询(多表查询 二)_第3张图片

全连接

MySQL不支持全连接的关键字(full join),但可以通过左连接和右连接的组合实现全连接

-- 全连接 查询员工和对应部门的对应关系
select employees.name, departments.name 部门名称
from employees
left join departments
on employees.department_id = departments.id

union

select employees.name, departments.name 部门名称
from employees
right join departments
on employees.department_id = departments.id
limit 5,8;

MySQL 连接查询(多表查询 二)_第4张图片

自连接

语法:select 字段列表 from 表A 别名A join 表A 别名B on 条件 ... ;

-- 自连接 查询每个员工和对应的领导名字
SELECT e1.name AS 员工姓名, e2.name AS 上级领导姓名
FROM employees e1
INNER JOIN employees e2
ON e1.manager_id = e2.id;

也可以实现联合查询:

SELECT 字段列表 FROM 表A 条件 ...
union [ all]
SELECT 字段列表 FROM 表B 条件....;

-- 查询薪水小于5000 或 年龄大于50的员工
select * from employees where salary < 5000
union
select * from employees where age > 50;

注意点:

  • 对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。
  • union all 会将全部的数据直接合并在一起(不去重),union 会对合并之后的数据去重。

上一篇:MySQL 多表关系(多表查询 一)

下一篇:MySQL 子查询(多表查询 三)

你可能感兴趣的:(MySQL数据库,mysql,数据库)