当前位置:网站首页>MySQL数据库基础:子查询
MySQL数据库基础:子查询
2022-06-21 06:13:00 【袗亦】
【MySQL数据库基础:8.子查询】
作者:zhenyi
专栏:mysql数据库1
简介:MySQL基础专栏文章,适合MySQL基础阶段的学习与阅读。
文章所用文件,可与作者联系获取!如果对您有帮助,点个关注吧,持续更新中,谢谢支持。如果有问题或错误,欢迎指出私信与我联系,谢谢。
目录
例2:返回job_id与141号员工相同,salary比143号员工多的员工 姓名,job_id 和工资
例3:返回公司工资最少的员工的last_name,job_id和salary
例4:查询最低工资大于50号部门最低工资的部门id和其最低工资
例1:返回location_id是1400或1700的部门中的所有员工姓名
例2:返回其它工种中比job_id为‘IT_PROG’工种任一工资低的员工的员工号、姓名、job_id 以及salary
例3:返回其它部门中比job_id为‘IT_PROG’部门所有工资都低的员工的员工号、姓名、job_id 以及salary
子查询含义:
出现在其他语句中的select语句,称为子查询或内查询
外部的查询语句,称为主查询或外查询
分类:
按子查询出现的位置:
select后面:
仅仅支持标量子查询
from后面:
支持表子查询
where或having后面:
标量子查询(单行)
列子查询 (多行)
行子查询
exists后面(相关子查询)
表子查询
按结果集的行列数不同:
标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行)
行子查询(结果集有一行多列)
表子查询(结果集一般为多行多列)
一、where或having后面
1、标量子查询(单行子查询)
2、列子查询(多行子查询)
3、行子查询(多列多行)
特点:
①子查询放在小括号内
②子查询一般放在条件的右侧
③标量子查询,一般搭配着单行操作符使用
> < >= <= = <>
列子查询,一般搭配着多行操作符使用
in、any/some、all
④子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果
1.标量子查询
例1:谁的工资比 Abel 高?
SELECT *
FROM employees
WHERE salary>(
SELECT salary
FROM employees
WHERE last_name = 'Abel'
);
SELECT *
FROM employees
WHERE salary >(
SELECT salary
FROM employees
WHERE last_name='Abel'
);查询结果如下:

例2:返回job_id与141号员工相同,salary比143号员工多的员工 姓名,job_id 和工资
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
);
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
);查询结果如下:
例3:返回公司工资最少的员工的last_name,job_id和salary
SELECT last_name,job_id,salary
FROM employees
WHERE salary=(
SELECT MIN(salary)
FROM employees
);
SELECT last_name,job_id,salary
FROM employees
WHERE salary =(
SELECT MIN(salary)
FROM employees
);查询结果如下:

例4:查询最低工资大于50号部门最低工资的部门id和其最低工资
SELECT MIN(salary),department_id
FROM employees
GROUP BY department_id
HAVING MIN(salary)>(
SELECT MIN(salary)
FROM employees
WHERE department_id = 50
);
SELECT MIN(salary),department_id
FROM employees
GROUP BY department_id
HAVING MIN(salary)>(
SELECT MIN(salary)
FROM employees
WHERE department_id=50
);查询结果如下:

非法使用标量子查询
SELECT MIN(salary),department_id
FROM employees
GROUP BY department_id
HAVING MIN(salary)>(
SELECT salary
FROM employees
WHERE department_id = 250
);
2.列子查询(多行子查询)
例1:返回location_id是1400或1700的部门中的所有员工姓名
SELECT last_name
FROM employees
WHERE department_id <>ALL(
SELECT DISTINCT department_id
FROM departments
WHERE location_id IN(1400,1700)
);
SELECT last_name
FROM employees
WHERE department_id <>ALL(
SELECT DISTINCT department_id
FROM departments
WHERE location_id IN(1400,1700)
);查询结果如下:

例2:返回其它工种中比job_id为‘IT_PROG’工种任一工资低的员工的员工号、姓名、job_id 以及salary
SELECT last_name,employee_id,job_id,salary
FROM employees
WHERE salary<ANY(
SELECT DISTINCT salary
FROM employees
WHERE job_id = 'IT_PROG'
) AND job_id<>'IT_PROG';
或
SELECT last_name,employee_id,job_id,salary
FROM employees
WHERE salary<(
SELECT MAX(salary)
FROM employees
WHERE job_id = 'IT_PROG'
) AND job_id<>'IT_PROG';
SELECT last_name,employee_id,job_id,salary
FROM employees
WHERE salary<ANY(
SELECT DISTINCT salary
FROM employees
WHERE job_id ='IT_PROG'
)AND job_id<>'IT_PROG';查询结果如下:

例3:返回其它部门中比job_id为‘IT_PROG’部门所有工资都低的员工的员工号、姓名、job_id 以及salary
SELECT last_name,employee_id,job_id,salary
FROM employees
WHERE salary<ALL(
SELECT DISTINCT salary
FROM employees
WHERE job_id = 'IT_PROG'
) AND job_id<>'IT_PROG';
或
SELECT last_name,employee_id,job_id,salary
FROM employees
WHERE salary<(
SELECT MIN( salary)
FROM employees
WHERE job_id = 'IT_PROG'
) AND job_id<>'IT_PROG';
SELECT last_name,employee_id,job_id,salary
FROM employees
WHERE salary<(
SELECT MIN(salary)
FROM employees
WHERE job_id='IT_PROG'
) AND job_id <>'IT_PROG';查询结果如下:

3、行子查询(结果集一行多列或多行多列)
例1:查询员工编号最小并且工资最高的员工信息
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=(
SELECT MIN(employee_id)
FROM employees
) AND salary=(
SELECT MAX(salary)
FROM employees
);查询结果如下:

二、select后面
仅仅支持标量子查询
例1:查询每个部门的员工个数
SELECT d.*,(SELECT COUNT(*) FROM employees AS e WHERE e.department_id=d.department_id) AS 个数
FROM departments AS d;
SELECT d.*,(SELECT COUNT(*) FROM employees AS e WHERE e.department_id=d.department_id) AS 个数
FROM departments AS d;查询结果如下:

三、from后面
将子查询结果充当一张表,要求必须起别名
例1:查询每个部门的平均工资的工资等级
①查询每个部门的平均工资
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id
SELECT * FROM job_grades;
#②连接①的结果集和job_grades表,筛选条件平均工资 between lowest_sal and highest_sal
SELECT ag_dep.*,g.`grade_level`
FROM (
SELECT AVG(salary) ag,department_id
FROM employees
GROUP BY department_id
) ag_dep
INNER JOIN job_grades g
ON ag_dep.ag BETWEEN lowest_sal AND highest_sal;
四、exists后面(相关子查询)
语法:
exists(完整的查询语句)
结果:
1或0
SELECT EXISTS(SELECT employee_id FROM employees WHERE salary=300000);
例1:查询有员工的部门名
SELECT department_name
FROM departments d
WHERE EXISTS(
SELECT *
FROM employees e
WHERE d.`department_id`=e.`department_id`
);
SELECT department_name
FROM departments AS d
WHERE EXISTS(
SELECT *
FROM employees AS e
WHERE d.department_id=e.department_id
);查询结果如下:

如果对您有帮助,点个关注吧,持续更新中,谢谢支持。如果有问题或错误,欢迎指出与我联系,谢谢。
边栏推荐
- 微生物生态数据分析——冗余分析
- leetcode 410. 分割数组的最大值——(每日一难day30)
- FPGA - 7系列 FPGA SelectIO -06- 逻辑资源之ODELAY
- Required questions for group planning: storage system (completed, with detailed analysis attached)
- 端午节-简单侧边导航栏
- Chapter 2: Data Model (final review of database)
- Le premier caractère unique de la chaîne (4)
- Leetcode question brushing - (4) the first unique character in the string
- leetcode 675. Cutting down trees for golf competitions - (day29)
- Leetcode刷題 ——— (4)字符串中的第一個唯一字符
猜你喜欢

Refine business details

FPGA - 7 Series FPGA selectio -01- introduction and DCI technology introduction

深度学习的几种优化方法

微生物生态数据分析——冗余分析
![[mysql] MySQL file structure, page and line records](/img/e3/8b6c39f299679522d84cad64af7a42.png)
[mysql] MySQL file structure, page and line records

Digital signal processing-07-dds IP application example

高考那些事

数字信号处理-07-DDS IP应用实例

TypeError: iter() returned non-iterator of type ‘xxx‘
![[data mining] final review Chapter 4](/img/40/725c40bda7dcda02325e46991129aa.png)
[data mining] final review Chapter 4
随机推荐
高速缓存Cache(计算机组成原理笔记)
端午节-简单侧边导航栏
Dual tone search: array is incremented first and then decremented
IDEA 使用记录
Aurora8B10B IP使用 -02- IP功能设计技巧
递归建立链式二叉树,完成前中后序遍历以及其他功能(附源码)
双调查找:数组先递增后递减
FPGA - 7 Series FPGA selectio -02- introduction to source language
Memorizing Normality to Detect Anomaly: Memory-augmented Deep Autoencoder for Unsupervised Anomaly D
我的高考经历与总结
[data mining] final review Chapter 2
Improve the determination of the required items of business details. When the error information is echoed according to the returned status code, the echoed information is inconsistent with the expecta
After the code is generated by the code generator, the copy is completed, and the module is not displayed on the web page
BN的一些细节
User defined thread pool
tf. Operation
[[graduation season · advanced technology Er] - experience shared by senior students
Fastdfs cluster
深度学习的几种优化方法
Docker installing MySQL
