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 )
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 我与微信审核的“相爱相杀”看个人小程序副业
· DeepSeek “源神”启动!「GitHub 热点速览」
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库