MySQL~多表查询(内连接、外连接、自连接)

一、介绍

1.概述

  • 多表查询就是指从多张表中查询数据
  • 默认条件(不加限制条件)情况下,会出现多张表所有记录的组合情况,这种现象称之为笛卡尔积
  • 笛卡尔积:笛卡尔积是在数学中,两个集合A和集合B中所有的组合情况

2.示例

  • 例如
    • emp表中有5条数据,dept表中有12条数据
    • emp表中dept_id字段为1,2,3,4,5dept表中id为1,2,3,4,5的只有10条记录
# 不加限制条件
# 查询到60条记录
select * from emp, dept;
# 添加限制条件,查询到10条记录
select * from emp, dept where emp.dept_id = dept.id;

二、分类

1.连接查询

  • 内连接:相当于查询A、B交集部分数据
  • 外连接:
    • 左外连接:查询左表所有数据,以及两张表交集部分数据
    • 右外连接:查询右表所有数据,以及两张表交集部分数据
  • 自连接:当前表与自身的连接查询,自连接必须使用表别名

2.子查询

A查询的结果作为B查询的数据源

三、内连接

1.语法

# 隐式内连接
select 字段列表 from1,2 where 条件 ...;

# 显式内连接
select 字段列表 from1 [inner] join2 on 链接条件 ...;

2.示例

select emp.name, dept.name from emp, dept where emp.dept_id = dept.id;
select emp.name, dept.name from emp inner join dept on emp.dept_id = dept.id;

四、外连接

1.语法

# 左外连接
select 字段列表 from1 left [outer] join2 on 条件 ...;
# 右外连接
select 字段列表 from1 right [outer] join2 on 条件 ...;

2.示例

select * from emp left outer join dept on emp.dept_id = dept.id;
select * from dept right outer join emp on dept.id = emp.dept_id;

3.注意事项

左外连接和右外连接是可以相互替换的,只需要调整在连接查询时SQL中,表结构的先后顺序就可以了。而我们在日常开发使用时,更偏向于左外连接

五、自连接

1.语法

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

2.注意事项

自连接查询可以是内连接查询也可以是外连接查询

3.示例

select e1.name, e2.name from emp e1 join emp e2 on e1.managerid=e2.id;
select e1.name, e2.name from emp e1 left join emp e2 on e1.managerid=e2.id;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值