学习
路无止境!

没有伞的孩子要学会努力奔跑!


  • 首页

  • 归档

  • 关于我

  • 公益404

  • 搜索

MySQL-子查询

子查询

#1.where或having后面

#单行,多行,多列多行

/*

()内 条件的右边

*/

#谁的工资比abel高

SELECT salary
FROM employees
WHERE last_name= 'Abel';
SELECT
*
FROM
employees
WHERE salary >
(SELECT
salary
FROM
employees
WHERE last_name = 'Abel') ;

#返回job_id与141员工相同,salary比143员工高的员工姓名和job id和工资

SELECT job_id
FROM employees
WHERE employee_id=141;
SELECT salary
FROM employees
WHERE employee_id=143;
SELECT
last_name,
job_id,
salary
FROM
employees
WHERE job_id =
(SELECT
job_id
FROM
employees
WHERE employee_id = 141)
AND salary >
(SELECT
salary
FROM
employees
WHERE employee_id = 143) ;

#查询工资最少的员工的名字,job id和工资

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

#查询最低工资大于50号部门的最低工资的部门id和最低工资

SELECT MIN(salary)
FROM employees
WHERE department_id=50
SELECT manager_id,MIN(salary)
FROM employees
GROUP BY manager_id
HAVING MIN(salary)>(SELECT MIN(salary)
FROM employees
WHERE department_id=50);

#多行子程序

/*

in | not in

any | some 等同于min

all 等同于 max

*/

#返回location id是1400或1700的部门中的所有员工姓名

SELECT DISTINCT	  department_id
FROM departments
WHERE location_id IN (1400,1700)
SELECT
last_name,
department_id
FROM
employees
WHERE manager_id IN
(SELECT DISTINCT
department_id
FROM
departments
WHERE location_id IN (1400, 1700)) ;
SELECT
last_name,
department_id
FROM
employees
WHERE manager_id =ANY
(SELECT DISTINCT
department_id
FROM
departments
WHERE location_id IN (1400, 1700)) ;

#其他部门比job id 为IT_proG部门的任意工资低的员工的工资,姓名

SELECT DISTINCT salary
FROM employees
WHERE job_id='IT_PROG'
SELECT salary,last_name,job_id
FROM employees
WHERE salary < SOME(SELECT DISTINCT salary
FROM employees
WHERE job_id='IT_PROG')
AND job_id <> 'IT_PROG';

#其他部门比job id 为IT——proG部门的所有工资低的员工的工资,姓名

SELECT salary,last_name,job_id
FROM employees
WHERE salary < ALL(SELECT DISTINCT salary
FROM employees
WHERE job_id='IT_PROG')
AND job_id <> 'IT_PROG';

#一行多列,多行多列

#查询员工编号最小且工资最高的员工共信息

SELECT MIN(employee_id)
FROM employees
SELECT MAX(salary)
FROM employees
SELECT *
FROM employees
WHERE employee_id=(SELECT MIN(employee_id)
FROM employees
)
AND
salary=(SELECT MAX(salary)
FROM employees);
SELECT *
FROM employees
WHERE (employee_id,salary)=(
SELECT MIN(employee_id),MAX(salary)
FROM employees
);
SELECT
d.**,
(SELECT
COUNT(**)
FROM
employees e
WHERE e.department_id = d.department_id) 个数
FROM
departments d ;

#查询每个部门的员工数量

查询员工号=102的部门名

SELECT
d.department_name
FROM
departments d,
employees e
WHERE e.employee_id = 102
AND e.department_id = d.department_id ;
SELECT (
SELECT department_name
FROM departments d
JOIN employees e
ON e.department_id=d.department_id
WHERE e.employee_id=102
)部门;

放在from后面

查询每个部门平均工资的工资等级

#平均工资
SELECT AVG(salary)
FROM employees
GROUP BY department_id;
SELECT
av_dep.平均工资,
jg.grade_level,
av_dep.部门号
FROM
(SELECT
AVG(salary) 平均工资,
department_id 部门号
FROM
employees
GROUP BY 部门号) av_dep
JOIN job_grades jg
ON av_dep.平均工资 BETWEEN jg.lowest_sal
AND jg.highest_sal ;

#查询没有女朋友的男信息

SELECT
bo.*
FROM
boys bo
WHERE NOT EXISTS
(SELECT
boyfriend_id
FROM
beauty b
WHERE bo.id=b.boyfriend_id) ;
SELECT
bo.*
FROM
boys bo
WHERE bo.id NOT IN
(SELECT
boyfriend_id
FROM
beauty) ;

#myemployees中每个部门比平均工资多的员工的信息

#平均工资/部门

SELECT AVG(salary),department_id FROM employees
GROUP BY department_id;
SELECT
*
FROM
employees e
JOIN
(
SELECT
AVG(salary) av,
department_id
FROM
employees
GROUP BY department_id
) av_d
ON av_d.department_id = e.department_id
WHERE e.salary > av_d.av ;

#查询所有manager的信息

SELECT DISTINCT manager_id
FROM employees;
SELECT
*
FROM
employees
WHERE employee_id IN
(SELECT DISTINCT
manager_id
FROM
employees) ;

#查询平均工资最高的部门manager的信息信息

#平均工资最高的部门id
SELECT department_id,AVG(salary)
FROM employees
GROUP BY department_id
ORDER	BY AVG(salary) DESC
LIMIT 1;
SELECT d.manager_id
FROM departments d
JOIN (
SELECT department_id,AVG(salary)
FROM employees
GROUP BY department_id
ORDER	BY AVG(salary) DESC
LIMIT 1
)av_s
ON d.department_id=av_s.department_id
SELECT e.*
FROM employees e
WHERE e.employee_id=(SELECT d.`manager_id`
FROM `departments` d
JOIN (

	SELECT `department_id`,AVG(salary)
	FROM `employees`
	GROUP BY department_id
	ORDER	BY AVG(salary) DESC
	LIMIT 1

)av_s
ON d.`department_id`=av_s.`department_id`
);
SELECT e.*
FROM employees e
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
);
  • 文章目录
  • 站点概览
Etaon

Etaon

Kepp Going!

80 日志
15 分类
43 标签
GitHub CSDN
友情链接
  • Kubernetes
  • Cisco
  • W3School
  • 廖雪峰
标签云
  • Mysql
  • Aws
  • Dql
  • Hadoop
  • Kubernetes
  • Nsx t
  • Redis
  • Azure
  • Cicd
  • Git
  • 子查询
    • 放在from后面
© 2010 - 2023 路无止境!
Powered by - Hugo v0.101.0 / Theme by - NexT
/
Storage by Azure static web apps /
0%