MySQL的多表查询

多表关系

一对多(多对一)->

多对多->

一对一->


概述

概述

多表查询分类


内连接


代码演示-->

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

结果-->


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

结果-->


外连接

代码演示-->

-- 外连接演示
-- 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;

结果-->

自连接

代码演示-->

-- 自连接演示
-- 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;

结果:


联合查询-union, union all

代码演示->

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

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


子查询

标量子查询


代码演示-->

-- 子查询
-- 标量子查询
-- 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 = '杨逍');

结果:


列子查询

代码演示-->

-- 列子查询
-- 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 = '财务部'));

结果-->


行子查询

代码演示-->

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

结果-->


表子查询

代码演示-->

-- 表子查询
-- 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;

结果:

相关推荐

  1. MySQL - 查询

    2023-12-06 05:04:02       41 阅读
  2. MySQL-查询

    2023-12-06 05:04:02       41 阅读
  3. MySQL查询

    2023-12-06 05:04:02       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-06 05:04:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-06 05:04:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-06 05:04:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-06 05:04:02       18 阅读

热门阅读

  1. 给 Redis 设置密码

    2023-12-06 05:04:02       36 阅读
  2. [Ubuntu 18.04] RK3399搭建SSH服务实现远程访问

    2023-12-06 05:04:02       47 阅读
  3. 如何使用简单的分支策略来保护您的 Git 项目

    2023-12-06 05:04:02       35 阅读
  4. Android PDFium 编译

    2023-12-06 05:04:02       41 阅读
  5. leetcode 210.课程表 II

    2023-12-06 05:04:02       33 阅读
  6. Golang与MongoDB的完美组合

    2023-12-06 05:04:02       36 阅读