MySQL_子查询_where后面的标量子查询使用

一 where 或 having 后面

1 标量子查询(单行子查询)

2 列子查询(多行子查询)

3 行子查询(多列多行)

特点

①    子查询放在小括号里

②    子查询一般放在条件的右侧

③    标量子查询,一般搭配着 单行操作符 使用

 

列子查询,一般搭配着 多行操作符 使用

IN、ANY / SOME、ALL

 

1 标量子查询(单行子查询)

案例

复制代码
 1 #谁的工资比张三高
 2 
 3 #第一步:查询张三的工资
 4 SELECT salary
 5 FROM employees
 6 WHERE name = '张三'
 7 
 8 #查询员工信息,满足 工资大于张三的 结果
 9 SELECT *
10 FROM employees
11 WHERE salary > (
12     SELECT salary
13     FROM employees
14     WHERE name = '张三'
15 );
复制代码

非法使用标量子查询 – 不是一行一列

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

 

2 列子查询(多行子查询)

· 返回多行

· 使用多行比较操作符

操作符 含义
IN / NOT IN 等于列表中的任意一个
ANY / SOM 和子查询返回的某一个值比较
ALL 和子查询返回的所有值比较

  IN:=

  ANY / SOME:如a>any() 相当于 大于最小的即可

  ALL:a>all() 相当于 大于最大的

案例

复制代码
#IN

#返回location_id是00000或者12345的部门中的所有员工姓名

#第一步:查询location_id是00000或者12345的部门编号
SELECT DISTINCT department_id
FROM departments
WHERE location_id IN(00000,12345)

#第二步:查询员工姓名,要求部门号是第一步列表中的某一个
SELECT name
FROM employees
WHERE department_id IN(
    SELECT DISTINCT department_id
    FROM departments
    WHERE location_id IN(00000,12345)
);
复制代码

 

3 行子查询(结果集:一行多列 多列多行)

案例

复制代码
#查询员工编号最小并且工资最高的员工信息

#第一步;
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
)
复制代码

 

posted @   yzhone  阅读(354)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 我与微信审核的“相爱相杀”看个人小程序副业
· DeepSeek “源神”启动!「GitHub 热点速览」
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示