1. INNER JOIN(内连接) - 最常用
概念:只返回两个表中都有匹配的记录
SELECT *
FROM 表A
INNER JOIN 表B
ON 表A.id = 表B.a_id;
图示:
示例:
sql
-- 获取既有订单又有客户的记录
SELECT orders.id, customers.name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.id;
2. LEFT JOIN(左连接) - 也很常用
概念:返回左表的所有记录 + 右表的匹配记录(没有匹配则为NULL)
sql
SELECT *
FROM 表A
LEFT JOIN 表B
ON 表A.id = 表B.a_id;
图示:
示例:
sql
-- 获取所有客户及其订单(即使没有订单的客户也显示)
SELECT customers.id, customers.name, orders.order_date
FROM customers
LEFT JOIN orders ON customers.id = orders.customer_id;
3. RIGHT JOIN(右连接) - 较少用
概念:返回右表的所有记录 + 左表的匹配记录(没有匹配则为NULL)
sql
SELECT *
FROM 表A
RIGHT JOIN 表B
ON 表A.id = 表B.a_id;
图示:
示例:
sql
-- 获取所有订单及其客户(即使客户信息已删除)
SELECT orders.id, customers.name
FROM customers
RIGHT JOIN orders ON customers.id = orders.customer_id;