mysql 子查询:标量子查询 列子查询 行子查询 表子查询 相关子查询

发布时间:2025-05-13      访问量:54
子查询是指在一个查询语句中嵌套另一个查询语句。MySQL 中常见的子查询有以下几种类型:

标量子查询
- 标量子查询是返回单个值的子查询,通常用于在查询中作为一个常量值使用。
- 例如,查询出所有员工中工资高于平均工资的员工信息:
sql SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);

列子查询
- 列子查询返回一列数据,可用于在 `WHERE` 子句中进行比较操作,通常与 `IN`、`NOT IN`、`ANY`、`ALL` 等关键字一起使用。
- 例如,查询出与部门编号为10或20的员工职位相同的员工信息:
sql SELECT * FROM employees WHERE job_id IN (SELECT job_id FROM employees WHERE department_id IN (10, 20));

行子查询
- 行子查询返回一行数据,用于与一行数据进行比较。
- 例如,查询出与员工编号为100的员工具有相同薪资和职位的员工信息:
sql SELECT * FROM employees WHERE (salary, job_id) = (SELECT salary, job_id FROM employees WHERE employee_id = 100);

表子查询
- 表子查询返回一个结果集,该结果集可以作为一个临时表在外部查询中使用。
- 例如,查询每个部门中工资最高的员工信息:
sql SELECT * FROM (SELECT *, MAX(salary) OVER (PARTITION BY department_id) AS max_salary FROM employees) AS temp WHERE salary = max_salary;

相关子查询
- 相关子查询是指子查询的执行依赖于外部查询的值,子查询会为外部查询的每一行数据执行一次。
- 例如,查询每个员工的工资是否高于其所在部门的平均工资:
sql SELECT e.employee_id, e.salary, (SELECT AVG(salary) FROM employees d WHERE d.department_id = e.department_id) AS dept_avg_salary, CASE WHEN e.salary > (SELECT AVG(salary) FROM employees d WHERE d.department_id = e.department_id) THEN '高于平均工资' ELSE '低于或等于平均工资' END AS salary_status FROM employees e;
堆内存
多线程
strdup
初始化器
冒泡排序
增删改查
BufferedReader
输入输出
面向对象
生命周期
闭包的概念
原型链
Flask
mysql-connector-python
单例模式
浅拷贝
隔离级别
索引
InnoDB
左连接
聚合函数
PuTTY
TRUNCATE
str_starts_with_many
DateTime
array_combine
闭包的概念