MYSQL学习笔记22: 多表查询
多表查询
单表查询
查询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;

包含了左表中存在, 右表中为空的字段(市场部,财务部,销售部)


浙公网安备 33010602011771号