小小程知识库 小小程知识库
首页
Golang
MySQL
归档
GitHub (opens new window)

xxcheng

记录美好生活~
首页
Golang
MySQL
归档
GitHub (opens new window)
  • 学习记录

    • 安装 & 连接
    • 基本SELECT语句
    • 运算符的使用
    • 排序与分页
    • 多表查询
    • 单行函数
    • 聚合函数
    • 子查询
      • 子查询
        • 规范
        • 分类
      • 单行子查询
      • 多行子查询
      • 不相关子查询
      • 相关子查询
      • 其他
        • 派生表
      • 参考链接
    • DDL 操作
  • MySQL
  • 学习记录
xxcheng
2023-08-05
目录

子查询

# 子查询

将一个查询语句嵌套在查询语句里的一个查询语句。被嵌套在内的叫子查询(内查询)、外面的叫主查询(外查询)。

# 规范

  • 子查询必须写在括号内;
  • 子查询为了可读性,一般写在操作符的右边;
  • 子查询不支持 GROUP BY 子句和 LIMIT 子句;

# 分类

可分为两类

  • 单行子查询和多行子查询;

    单行子查询的子查询(内查询)返回一条查询结果,多行子查询返回多条查询结果

  • 相关子查询和非相关子查询;

    非相关子查询的子查询(内查询)的数据是固定的,不会使用到主查询的数据,而相关子查询会使用到主的查询的数据。

# 单行子查询

子查询(内查询)返回一条查询结果。

使用 = > >= < <= <> 操作符

查询比平均工资高的员工

SELECT last_name,salary
FROM employees
WHERE salary > (
	SELECT AVG(salary)
	FROM employees
);
1
2
3
4
5
6

# 多行子查询

子查询(内查询)返回多条查询结果。

使用 IN ANY SOME ALL 操作符

操作符 含义
IN 等于列表中的任意一个
ANY 需要和单行比较操作符一起使用,和子查询返回的某一个值比较
ALL 需要和单行比较操作符一起使用,和子查询返回的所有值比较
SOME 实际上是 ANY 的别名,作用相同,一般常使用 ANY

查询所在部门大于平均工资的员工

SELECT last_name,department_id,salary 
FROM employees
WHERE department_id IN (
	SELECT department_id
	FROM employees
	GROUP BY department_id
	HAVING AVG(salary) >(
		SELECT AVG(salary)
		FROM employees
	)
);
1
2
3
4
5
6
7
8
9
10
11

# 不相关子查询

不依赖于外部查询的数据。

上面两个子查询的示例就是

# 相关子查询

查询工资大于本部门平均工资的员工

SELECT salary,last_name,department_id
FROM employees e
WHERE salary >(
	SELECT AVG(d.salary)
	FROM employees d
	WHERE d.department_id=e.department_id
);
1
2
3
4
5
6
7

# 其他

# 派生表

当子查询位于 FROM 子句时,这个子查询称为派生表,并且派生表必须要有别名

查询在使用的部门的编号小于100的编号

SELECT t.department_id
FROM (
	SELECT department_id
	FROM employees
	GROUP BY department_id
)	t
WHERE t.department_id<100; 
1
2
3
4
5
6
7

# 参考链接

  • MySQL 子查询 (opens new window)
  • SELECT中常用的子查询操作 (opens new window)
上次更新: 2023/08/05, 10:48:31
聚合函数
DDL 操作

← 聚合函数 DDL 操作→

最近更新
01
Go:GMP模型深入理解
01-10
02
rpc学习:进阶到gRPC
01-04
03
配置
12-12
更多文章>
Theme by Vdoing | Copyright © 2019-2024 xxcheng | 浙ICP备19024050号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式