# 子查询

URL: https://caijiao.org/sqlite/query/subquery
Source: docs/sqlite/query/subquery.md
Description: 本章节介绍 SQLite 中子查询的使用方法，包括在 SELECT、INSERT、UPDATE 和 DELETE 语句中的嵌套查询，帮助实现更复杂的数据操作。

子查询是指在一个 SQL 语句中嵌套另一个查询，作为条件或数据源，提升查询灵活性。

## 基本用法

子查询可以放在 `SELECT`、`WHERE`、`FROM` 等语句中。

### 1. 在 WHERE 中使用子查询

查询年龄大于所有管理员年龄的用户：

```sql
SELECT * FROM users
WHERE age > (SELECT MAX(age) FROM admins);
```

### 2. 在 FROM 中使用子查询（派生表）

查询每个年龄的用户数量，并筛选数量大于 5 的年龄段：

```sql
SELECT age, user_count FROM (
  SELECT age, COUNT(*) AS user_count
  FROM users
  GROUP BY age
) WHERE user_count > 5;
```

### 3. 在 SELECT 中使用子查询

查询每个用户最新订单时间：

```sql
SELECT name,
  (SELECT MAX(order_date) FROM orders WHERE user_id = users.id) AS last_order
FROM users;
```

## 子查询的优势

- 实现复杂条件筛选
- 代替多步查询，简化操作
- 与 JOIN 结合提升查询效率

合理使用子查询，能够有效增强 [SQLite](/sqlite/) 查询的表达力和功能。
