# 子查询

URL: https://caijiao.org/mariadb/program/join/subquery
Source: docs/mariadb/program/join/subquery.md
Description: 本节介绍 MariaDB 中的子查询用法，讲解如何在查询中嵌套另一个查询，实现复杂的数据筛选和条件判断。

## 1. 什么是子查询

子查询是嵌套在另一个 SQL 查询中的查询语句，常用于在主查询中使用另一个查询的结果。

## 2. 基本语法

```sql
SELECT column1, column2
FROM table1
WHERE column3 IN (
    SELECT column3
    FROM table2
    WHERE condition
);
````

## 3. 示例

查询所有有订单的客户：

```sql
SELECT name
FROM customers
WHERE id IN (
    SELECT customer_id
    FROM orders
);
```

## 4. 标量子查询

子查询只返回一个值，可以用于赋值或比较：

```sql
SELECT name
FROM customers
WHERE id = (
    SELECT customer_id
    FROM orders
    WHERE order_id = 1001
);
```

## 5. 相关子查询

子查询依赖外层查询的字段，每行执行一次：

```sql
SELECT c.name,
       (SELECT COUNT(*) FROM orders o WHERE o.customer_id = c.id) AS order_count
FROM customers c;
```

---

子查询能够增强查询灵活性，实现复杂的数据筛选和多表关联。
