MySQL只多表查询

发布时间 2023-07-19 15:46:08作者: 镰刀战士

多表查询

内连接

隐式内连接

查询每一个员工的姓名 , 及关联的部门的名称(隐式内连接实现) 表结构: 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交集部分的数据

外连接演示

  1. 查询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;

     

  1. 查询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查询结果去重,并拼接在一起

注意:对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。