MySQL的多表查询

多表关系

MySQL的多表查询_第1张图片

一对多(多对一)->

MySQL的多表查询_第2张图片

多对多->

MySQL的多表查询_第3张图片

一对一->

MySQL的多表查询_第4张图片


概述

概述

MySQL的多表查询_第5张图片

多表查询分类

MySQL的多表查询_第6张图片


内连接

MySQL的多表查询_第7张图片


代码演示-->

-- 内连接演示
-- 1.查询每一个员工的姓名,及关联的部门的名称(隐式内连接实现)
select emp.name, dept.name from emp,dept where emp.dept_id = dept.id;

结果-->

MySQL的多表查询_第8张图片


-- 2.查询每一个员工的姓名,及关联的部门的名称(显式内连接实现)
select e.name, d.name from emp e inner join dept d on e.dept_id = d.id;

结果-->

MySQL的多表查询_第9张图片


外连接

MySQL的多表查询_第10张图片

代码演示-->

-- 外连接演示
-- 1.查询emp表的所有数据,和相应的部门信息(左外连接)
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 join dept d on e.dept_id = d.id;

结果-->

自连接

MySQL的多表查询_第11张图片

代码演示-->

-- 自连接演示
-- 1.查询员工 及其 所有领导的名字
select e1.*,e2.name from emp e1 join emp e2 where e1.managerid = e2.id;

结果:


-- 2.查询所有员工 emp 及其领导的名字 emp,如果员工没有领导
select e1.name,e2.name from emp e1 left join emp e2 on e1.managerid = e2.id;

结果:

MySQL的多表查询_第12张图片


联合查询-union, union all

MySQL的多表查询_第13张图片

代码演示->

-- 联合查询
-- 1.将薪资低于7000的员工和年龄大于50的员工全部查询出来
select * from emp where salary < 7000
union all
select * from emp where age > 50;

结果-->如果需要去重,将all删除


子查询

MySQL的多表查询_第14张图片

标量子查询

MySQL的多表查询_第15张图片


代码演示-->

-- 子查询
-- 标量子查询
-- 1.查询"销售部"的所有员工信息
select * from emp where dept_id = (select id from dept where name = '销售部');

结果:


-- 2.查询杨逍入职之后的员工信息
select * from emp where entrydate > (select entrydate from emp where name = '杨逍');

结果:


列子查询

MySQL的多表查询_第16张图片

代码演示-->

-- 列子查询
-- 1.查询"销售部"和"市场部"的所有员工信息
select * from emp where dept_id in (select id from dept where name = '销售部' or name = '市场部');

结果-->


-- 2.查询比财务部所有人工资都高的员工
select * from emp where salary > all (select salary from emp where dept_id = (select id from dept where name = '财务部'));

结果-->


-- 3.查询比财务部其中任意一人工资高的员工
select * from emp where salary > any (select salary from emp where dept_id = (select id from dept where name = '财务部'));

结果-->


行子查询

MySQL的多表查询_第17张图片

代码演示-->

-- 行子查询
-- 1.查询与"张无忌"的薪资及其直属领导相同的员工信息
select salary,managerid from emp where name = '张无忌';
select * from emp where (salary,managerid) = (select salary,managerid from emp where name = '张无忌');

结果-->


表子查询

MySQL的多表查询_第18张图片

代码演示-->

-- 表子查询
-- 1.查询与"杨苟","金庸"的职位和薪资相同的员工信息
select * from emp where (job,salary) in (select job,salary from emp where name = '杨苟' or name = '金庸');

结果:


-- 2.查询入职日期是"2005-01-01"之后的员工信息,及其部门信息
select e.*,d.* from (select * from emp where entrydate > '2005-01-01') e left join dept d on e.dept_id = d.id;

结果:

你可能感兴趣的:(MySQL,mysql,数据库)