SQL--多表查询
SQL--多表查询
多表关系
一对多(多对一)
多对多
通过中间表维护两张表.
一对一
多表查询概述
多表查询--笛卡尔积
# 多表查询,笛卡尔积
SELECT * from emp,dept;
消除笛卡尔积
# 消除笛卡尔积
SELECT * from emp,dept where emp.dept_id=dept.id;
分类
1. 链接查询
2. 子查询
内连接
内连接查询的是两张表交集的部分.
隐式内连接
# -内连接演示
# --1.查询每一个员工的姓名及关联的部门的名称(隐式内连接实现)
# 表结构 emp,dept
# 连接条件 emp.dept_id=dept.id;
select emp.name,dept.name from emp,dept where emp.dept_id=dept.id;
# 给表起别名,起了别名之后不能再用原本的名字操作数据库
select e.name,d.name from emp e,dept d where e.dept_id=d.id;
显示内连接
# --2.查询每一个员工的姓名,及关联的部门的名称(显式内连接实现)
select * from emp e inner join dept d on e.dept_id=d.id;
select * from emp e join dept d on e.dept_id=d.id;
外连接
左外连接完全包含左表的数据.
# 外连接演示
# --1.查询mp表的所有数据,和对应的部门信息(左外连接)
# 表结构 emp dept
# 连接条件 emp.dept_id = dept.id
select e.*,d.name from emp e left outer join dept d on e.dept_id=d.id;
select e.*,d.name from emp e left join dept d on e.dept_id=d.id;
右外连接完全包含右表的数据.
右外连接可以改成左外连接
# --2.查询dept表的所有数据,和对应的员工信息(右外连接)
select d.*,e.* from emp e right outer join dept d on e.dept_id=d.id;
select d.*,e.* from dept d left outer join emp e on e.dept_id=d.id;
自连接
自连接--内连接
# 自连接
# --1.查询员工及其所属领寻的名字
# 将一张表看成两张表,必须起别名
# 表结构 emp
select a.name,b.name from emp a,emp b where a.managerid=b.id;
自连接--左外连接
# --2.查询所有员工emp及其领导的名字emp,如果员工没有领导,也需要查询出来
# 自连接--左外连接
select a.name,b.name from emp a left outer join emp b on a.managerid=b.id;