跳到主要内容

SQL连接查询

  • 内连接inner join :获取两个表中字段匹配关系的记录(可以省略inner)。
  • 左连接left join :获取左表所有记录,即使右表没有对应匹配的记录。
  • 右连接right join :获取右表所有记录,即使左表没有对应匹配的记录

内连接

可以省略inner

内连接(INNER JOIN)用于查询多张表中符合条件的记录,结果中仅包含所有关联表中符合条件的记录行。从所有参与连接的表中选择那些在连接条件下匹配的行,不符合条件的记录不会出现在结果中。例如:

SELECT orders.order_id, customers.customer_name, products.product_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id
INNER JOIN order_items ON orders.order_id = order_items.order_id
INNER JOIN products ON order_items.product_id = products.product_id;

左/右连接

左连接(LEFT JOINLEFT OUTER JOIN)用于查询多张表时,返回左表中的所有记录以及右表中符合连接条件的记录。如果右表没有匹配的记录,结果中对应的右表字段将返回 NULL。假设有两个表:

  • Table_A(包含 idname 列)
  • Table_B(包含 idage 列)

查询:

SELECT Table_A.name, Table_B.age
FROM Table_A
LEFT JOIN Table_B ON Table_A.id = Table_B.id;

结果说明:

  • 这条语句将返回 Table_A 中的所有记录。
  • 如果 Table_A 中的某个 idTable_B 中找不到匹配,结果中的 age 列将显示为 NULL

使用场景:

左连接常用于需要保留左表所有数据的情况,即使右表没有匹配项。例如,获取所有用户及其可能的订单信息,即使某些用户没有下过订单。

参考资料