多表查询
单表查询
查询emp表
select * from emp;
查询dept表
select * from dept;
笛卡尔积(全组合)
#emp表有4条记录, dept表有6条记录
#笛卡尔积有4*6=24条记录
select * from emp,dept;
消除无效的笛卡尔积 (emp和dept通过dept_id连接)
select * from emp,dept
where emp.dept_id = dept.id;
多表查询分类
-
连接查询
-
子查询
连接查询
-
内连接
- 相当于查询A,B交集部分的数据 ($A∩B$)
- 隐式内连接
- 显式内连接
-
外连接
-
左外连接: 查询左表所有数据, 以及两张表交集部分的数据
-
右外连接: 查询右表所有数据,以及两张表交集部分的数据
-
-
自联接
- 当前表与自身的连接查询, 自联接必须使用表别名
内连接
查询两张表的交集部分
-
隐式内连接
select 字段列表 from 表1, 表2 where 条件...;
查询
#查询每一个员工姓名,以及关联的部门名称
select emp.name, dept.name from emp, dept
where dept_id = dept.id;
通过别名简化查询
select e.name '员工名称', d.name '部门名称'
from emp e,
dept d
where e.id = d.id;
-
显式内连接
#inner关键字可以省略
select 字段列表 from 表1 [inner] join 表2 on 连接条件...;
查询
select e.name '员工名称', d.name '部门名称'
from emp e
inner join dept d
on e.dept_id = d.id;
#inner关键字可以省略,结果是相同的
select e.name '员工名称', d.name '部门名称'
from emp e
join dept d
on e.dept_id = d.id;
外连接
左外连接
查询表1(左表)的所有数据, 包含表1和表2交集部分的数据
#outer关键字可以省略
select 字段列表 from 表1 left [outer] join 表2 on 条件...;
左外连接
select * from emp e
left outer join dept d
on e.dept_id = d.id;
右外连接
查询表1(右表)的所有数据, 包含表1和表2交集部分的数据
#outer关键字可以省略
select 字段列表 from 表1 right[outer] join 表2 on 条件...;
左外连接
select * from dept d
left outer join emp e
on d.id = e.dept_id;
包含了左表中存在, 右表中为空的字段(市场部,财务部,销售部)
标签:多表,22,连接,查询,dept,emp,MYSQL,id,select From: https://www.cnblogs.com/HIK4RU44/p/18062724