多表查询
内连接
隐式内连接
查询每一个员工的姓名 , 及关联的部门的名称(隐式内连接实现) 表结构: 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;
显式内连接
查询每一个员工的姓名 , 及关联的部门的名称(隐式内连接实现) 表结构: emp ,dept 连接条件: emp.dept_id = dept.id
select e.name, d.name from emp e inner join dept d on e.dept_id = d.id;
select e.name, d.name from emp e join dept d on e.deptid = d.id;
注意:显式内连接inner可以省略
外连接
左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER]JOIN 表2 0N 条件 ...;
相当于查询左表的所有数据和 表1表2交集部分的数据
右外连接
SELECT 字段列表 FROM 表1 RIGHT [ OUTER]JOIN 表2 0N 条件 ...;
相当于查询右表的所有数据和 表1表2交集部分的数据
外连接演示
-
查询emp表的所有数据, 和对应的部门信息(左外连接) 表结构: emp,dept 连接条件:emp.dept_id = dept.id
select e.*, d.name from emp e leftouterjoin 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;
-
查询dept表的所有数据, 和对应的员工信息(右外连接)
select d.*, e,* from emp e right outer join dept d on e.dept_id = d.id;
自连接
自连接查询语法
SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件...;
注意:自连接查询,可以是内连接查询,也可以是外连接查询。
查询员工 及其 所属领导的名字 表结构: emp--
select a.name , b.name from emp a , emp b where a.managerid = b.id;
查询所有员工 emp 及其领导的名宁 emp , 如果员工没有领导, 也需要查询出来
表结构: emp a,emp b
select a.name '员工', b.name '领导' from emp a left join emp b on a,managerid = b.id;
联合查询
案例:将薪资低于5000的员工和年龄大于 50 岁的员工全部查询出来
union all
select * from emp where salary < 5000
union all
select * from emp where age > 50:
union all查询结果不去重,单纯拼接在一起
union
select * from emp where salary < 5000
union
select * from emp where age > 50:
union查询结果去重,并拼接在一起