连接查询 === 当一张表里的数据不足以满足查询需求时,就需要把多张表关联起来查询,这就是连接查询。连接查询是关系数据库中非常重要的一类能力。 ### 内连接查询 内连接通常使用 `INNER JOIN`,也可以直接写 `JOIN`。 基本语法如下: ```sql SELECT 字段列表 FROM 表1 INNER JOIN 表2 ON 表1.关联字段 = 表2.关联字段; ``` 例如查询订单及其所属用户: ```sql SELECT orders.id, orders.amount, user.name FROM orders INNER JOIN user ON orders.user_id = user.id; ``` 内连接的特点是: - 只有两张表中能匹配上的记录才会返回 - 两边没有匹配的数据不会出现在结果中 ### 外连接查询 MySQL 中常见的外连接有: - `LEFT JOIN` - `RIGHT JOIN` `LEFT JOIN` 表示返回左表全部记录,以及右表中匹配的记录。 例如: ```sql SELECT user.id, user.name, orders.amount FROM user LEFT JOIN orders ON user.id = orders.user_id; ``` 即使某个用户没有订单,这个用户也会被查出来,只不过订单字段可能是 `NULL`。 `RIGHT JOIN` 则相反,返回右表全部记录以及左表匹配记录: ```sql SELECT user.id, user.name, orders.amount FROM user RIGHT JOIN orders ON user.id = orders.user_id; ``` 在实际开发中,`LEFT JOIN` 的使用频率通常远高于 `RIGHT JOIN`。 ### 复合条件连接查询 有些连接不只是一个条件,还可能包含多个字段或附加筛选条件。 例如: ```sql SELECT a.id, a.name, b.score FROM student AS a INNER JOIN score AS b ON a.id = b.student_id AND b.course_id = 1; ``` 这表示: - 先按学生 ID 关联 - 再限定课程 ID 为 1 复合条件连接适合: - 联合业务规则匹配 - 多字段关联 - 特定业务子集关联 ### 小结 连接查询的核心是把表之间的关系写清楚。内连接适合查“双方都存在”的数据,外连接适合保留某一侧的全部记录,而复合条件连接则适合更复杂的业务规则。