MySQL多表查询

多表查询

在这里插入图片描述

emp(员工)表

在这里插入图片描述

dept(部门)表

在这里插入图片描述

内连接

在这里插入图片描述

在这里插入图片描述

外连接

在这里插入图片描述

在这里插入图片描述

子查询

在这里插入图片描述

在这里插入图片描述

单行单列

在这里插入图片描述

多行单列

在这里插入图片描述

多行多列

在这里插入图片描述

多表查询案例

emp(员工)表

在这里插入图片描述

dept(部门)表

在这里插入图片描述
job(职务)表
在这里插入图片描述

salarygrade(薪资等级)表

在这里插入图片描述

关系
job 和 emp 一对多
dept 和emp 一对多
emp的salary评定薪资等级是大于salarygrade表中的losalary,小于hisalary

在这里插入图片描述

-- 1.查询所有员工信息。查询员工编号,员工姓名,工资,职务名称,职务描述
/*
分析:
	1. 员工编号,员工姓名,工资 信息在emp 员工表中
	2. 职务名称,职务描述 信息在 job 职务表中
	3. job 职务表 和 emp 员工表 是 一对多的关系 emp.job_id = job.id

*/

-- 隐式内连接
SELECT
	emp.id,
	emp.ename,
	emp.salary,
	job.jname,
	job.description
FROM
	emp,
	job
WHERE
	emp.job_id = job.id;

-- 显式内连接
SELECT
	emp.id,
	emp.ename,
	emp.salary,
	job.jname,
	job.description
FROM
	emp
INNER JOIN job ON emp.job_id = job.id;

-- 2.查询员工编号,员工姓名,工资,职务名称,职务描述,部门名称,部门位置
/*
分析:
	1. 员工编号,员工姓名,工资 信息在emp 员工表中
	2. 职务名称,职务描述 信息在 job 职务表中
	3. job 职务表 和 emp 员工表 是 一对多的关系 emp.job_id = job.id
	4. 部门名称,部门位置 来自于 部门表 dept
	5. dept 和 emp 一对多关系 dept.id = emp.dept_id
*/

-- 隐式内连接
SELECT
	emp.id,
	emp.ename,
	emp.salary,
	job.jname,
	job.description,
	dept.dname,
	dept.loc
FROM
	emp,
	job,
	dept
WHERE
	emp.job_id = job.id
	and dept.id = emp.dept_id
;

-- 显式内连接
SELECT
	emp.id,
	emp.ename,
	emp.salary,
	job.jname,
	job.description,
	dept.dname,
	dept.loc
FROM
	emp
INNER JOIN job ON emp.job_id = job.id
INNER JOIN dept ON dept.id = emp.dept_id
;

-- 3.查询员工姓名,工资,工资等级
/*
分析:
	1. 员工姓名,工资 信息在emp 员工表中
	2. 工资等级 信息在 salarygrade 工资等级表中
	3. emp.salary >= salarygrade.losalary  
	    and 
	    emp.salary <= salarygrade.hisalary
*/

SELECT
	emp.ename,
	emp.salary,
	t2.*
FROM
	emp,
	salarygrade t2
WHERE
	emp.salary >= t2.losalary
AND emp.salary <= t2.hisalary

-- 4.查询员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级

/*
分析:
	1. 员工编号,员工姓名,工资 信息在emp 员工表中
	2. 职务名称,职务描述 信息在 job 职务表中
	3. job 职务表 和 emp 员工表 是 一对多的关系 emp.job_id = job.id
	4. 部门名称,部门位置 来自于 部门表 dept
	5. dept 和 emp 一对多关系 dept.id = emp.dept_id
	6. 工资等级 信息在 salarygrade 工资等级表中
	7. emp.salary >= salarygrade.losalary  
		and 
		emp.salary <= salarygrade.hisalary
*/
SELECT
	emp.id,
	emp.ename,
	emp.salary,
	job.jname,
	job.description,
	dept.dname,
	dept.loc,
	t2.grade
FROM
	emp
INNER JOIN job ON emp.job_id = job.id
INNER JOIN dept ON dept.id = emp.dept_id
INNER JOIN salarygrade t2 ON emp.salary 
	BETWEEN t2.losalary and t2.hisalary;

-- 5.查询出部门编号、部门名称、部门位置、部门人数
/*
分析:
	1. 部门编号、部门名称、部门位置 来自于部门 dept 表
	2. 部门人数: 在emp表中 按照dept_id 进行分组,然后count(*)统计数量
	3. 使用子查询,让部门表和分组后的表进行内连接
*/

select * from dept;
select dept_id, count(*) from emp group by dept_id;

SELECT
	dept.id,
	dept.dname,
	dept.loc,
	t1.count
FROM
	dept,
	(
		SELECT
			dept_id,
			count(*) count
		FROM
			emp
		GROUP BY
			dept_id
	) t1
WHERE
	dept.id = t1.dept_id
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱犯错的小z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值