二、数据查询语言(七)

MySQL


一、初识数据库

二、数据查询语言(一)

二、数据查询语言(二)

二、数据查询语言(三)
二、数据查询语言(四)

二、数据查询语言(五)

二、数据查询语言(六)

二、数据查询语言(七)

数据查询语言包括: 基础查询 条件查询 排序查询 分组查询 连接查询 子查询 分页查询 联合查询

前言


提示:以下是本篇文章正文内容,下面案例可供参考
且所用数据表为:可自行下载

子查询-重要经典案例

1. 查询工资最低的员工信息: last_name, salary

USE `myemployees`;

SELECT last_name, salary
FROM employees
WHERE salary=(
	SELECT MIN(salary)
	FROM employees
);
 

2. 查询平均工资最低的部门信息

#复杂做法
#1
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id;
#2
SELECT MIN(ag)
FROM(
	SELECT AVG(salary) ag,department_id
	FROM employees
	GROUP BY department_id) ag_dep
	
#3查询哪个部门的平均工资=②
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id
HAVING AVG(salary)=(
	SELECT MIN(ag)
	FROM(
	SELECT AVG(salary) ag,department_id
	FROM employees
	GROUP BY department_id) ag_dep
);
#4查询部门信息
SELECT d.*
FROM departments d
WHERE d.`department_id`=(
	SELECT department_id
	FROM employees
	GROUP BY department_id
	HAVING AVG(salary)=(
		SELECT MIN(ag)
		FROM(
			SELECT AVG(salary) ag,department_id
			FROM employees
			GROUP BY department_id) ag_dep
			)
		);
#简单做法
#①各部门的平均工资
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id

#②求出最低平均工资部门编号
SELECT department_id
FROM employees
GROUP BY department_id
ORDER BY AVG(salary)
LIMIT 1;

#③查询部门信息
SELECT *
FROM departments
WHERE department_id=(
	SELECT department_id
	FROM employees
	GROUP BY department_id
	ORDER BY AVG(salary)
	LIMIT 1);

3. 查询平均工资最低的部门信息和该部门的平均工资

#①查询所以部门的平均工资
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id;

#②查询平均工资最低的部门编号
SELECT department_id
FROM employees
GROUP BY department_id
ORDER BY AVG(salary)
LIMIT 1;

#③查询平均工资最低的部门信息和该部门的平均工资
SELECT d.*,ag
FROM departments d
JOIN (
	SELECT AVG(salary) ag,department_id
	FROM employees
	GROUP BY department_id
	ORDER BY AVG(salary)
	LIMIT 1
)ag_dep
ON d.`department_id`=ag_dep.department_id;

4. 查询平均工资最高的 job 信息

#①查询每个job的平均工资
SELECT AVG(salary),job_id
FROM employees
GROUP BY job_id;

#②平局工资最高的job编号
SELECT AVG(salary),job_id
FROM employees
GROUP BY job_id
ORDER BY AVG(salary) DESC 
LIMIT 1;

#③查询平均工资最低的job信息
SELECT *
FROM `jobs`
WHERE job_id=(
	SELECT job_id
	FROM employees
	GROUP BY job_id
	ORDER BY AVG(salary) DESC 
	LIMIT 1);

5. 查询平均工资高于公司平均工资的部门有哪些?

#①查询公司的平均工资
SELECT AVG(salary)
FROM employees;
#②查询各个部门的平均工资
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id;
#查询大于公司平均工资的部门
SELECT AVG(salary) ag,department_id
FROM employees
GROUP BY department_id
HAVING ag>(
	SELECT AVG(salary)
	FROM employees)

6. 查询出公司中所有 manager 的详细信息.

#查询所有manager_id号
SELECT DISTINCT `manager_id`
FROM employees;

SELECT *
FROM employees
WHERE employee_id IN(
	SELECT DISTINCT `manager_id`
	FROM employees);
```c
**7. 各个部门中 最高工资中最低的那个部门的 最低工资是多少**
```c
#①各个部门的最高工资
SELECT MAX(salary),department_id
FROM employees
GROUP BY department_id;

#②查询①中最低工资的部门
SELECT MAX(salary),department_id
FROM employees
GROUP BY department_id
ORDER BY MAX(salary)
LIMIT 1

#③查询②中最低工资
SELECT MIN(salary),department_id
FROM employees
WHERE department_id=(
	SELECT department_id
	FROM employees
	GROUP BY department_id
	ORDER BY MAX(salary)
	LIMIT 1)

8. 查询平均工资最高的部门的 manager 的详细信息: last_name, department_id, email, salary

#①查询所有部门的平均工资的最高工资的部门
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id
ORDER BY AVG(salary)DESC
LIMIT 1
#②查询manager 的详细信息last_name, department_id, email, salary

SELECT 
	last_name, d.department_id, email, salary
FROM 
	employees e
INNER JOIN 
	departments d ON d.`manager_id`=e.`employee_id`
WHERE 
	d.department_id=(
	SELECT department_id
	FROM employees
	GROUP BY department_id
	ORDER BY AVG(salary)DESC
	LIMIT 1);

联合查询

union 联合 合并:将多条查询语句的结果合并成一个结果

语法:
查询语句1
union
查询语句2
...

应用场景
	要查询的结果来自多个表,且多个表没有直接的连接关系,但查询的信息一致时
	
特点:
	1、要求多条查询语句的查询列数是一致的
	2、要求多条查询语句的查询的每一列的类型和顺序最好一致
	3、使用union关键字默认去重,如果使用union all可以包含重复项

引入案例:查询部门编号>90,或邮箱包含a的员工信息

SELECT * FROM employees WHERE email LIKE '%a%' OR department_id>90;

联合查询

SELECT * FROM employees WHERE email LIKE '%a%'
UNION 
SELECT * FROM employees WHERE department_id>90;

案例:查询中国用户中男性的信息以及外国用户中男性的用户信息

SELECT id,cname,csex FROM t_ca WHERE csex='男'
UNION
SELECT t_id,tName,tGender FROM t_ua WHERE tGender='male';	

总结

期待大家和我交流,留言或者私信,一起学习,一起进步!

猜你喜欢

转载自blog.csdn.net/CltCj/article/details/121737861