Skip to content

Latest commit

 

History

History
86 lines (57 loc) · 1.97 KB

File metadata and controls

86 lines (57 loc) · 1.97 KB

连接查询

当一张表里的数据不足以满足查询需求时,就需要把多张表关联起来查询,这就是连接查询。连接查询是关系数据库中非常重要的一类能力。

内连接查询

内连接通常使用 INNER JOIN,也可以直接写 JOIN

基本语法如下:

SELECT 字段列表
FROM1
INNER JOIN2 ON1.关联字段 =2.关联字段;

例如查询订单及其所属用户:

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 表示返回左表全部记录,以及右表中匹配的记录。

例如:

SELECT user.id, user.name, orders.amount
FROM user
LEFT JOIN orders ON user.id = orders.user_id;

即使某个用户没有订单,这个用户也会被查出来,只不过订单字段可能是 NULL

RIGHT JOIN 则相反,返回右表全部记录以及左表匹配记录:

SELECT user.id, user.name, orders.amount
FROM user
RIGHT JOIN orders ON user.id = orders.user_id;

在实际开发中,LEFT JOIN 的使用频率通常远高于 RIGHT JOIN

复合条件连接查询

有些连接不只是一个条件,还可能包含多个字段或附加筛选条件。

例如:

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

复合条件连接适合:

  • 联合业务规则匹配
  • 多字段关联
  • 特定业务子集关联

小结

连接查询的核心是把表之间的关系写清楚。内连接适合查“双方都存在”的数据,外连接适合保留某一侧的全部记录,而复合条件连接则适合更复杂的业务规则。