0
点赞
收藏
分享

微信扫一扫

MySQL 中常见的 JOIN 类型


在 MySQL 中,JOIN 操作用于根据某些条件将两个或多个表中的行组合在一起。MySQL 支持多种类型的 JOIN,每种类型都有其特定的用途和行为。以下是 MySQL 中常见的 JOIN 类型及其描述:

1. 内连接(INNER JOIN)

描述
  • 内连接 是最常用的 JOIN 类型。
  • 它返回两个表中满足连接条件的所有行。
示例

SELECT orders.order_id, customers.customer_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;

2. 左外连接(LEFT OUTER JOIN 或 LEFT JOIN)

描述
  • 左外连接 返回左表中的所有行,以及右表中满足连接条件的行。如果右表中没有匹配的行,则结果集中对应的列包含 NULL
  • 如果省略 OUTER 关键字,效果相同。
示例

SELECT orders.order_id, customers.customer_name
FROM orders
LEFT JOIN customers ON orders.customer_id = customers.customer_id;

3. 右外连接(RIGHT OUTER JOIN 或 RIGHT JOIN)

描述
  • 右外连接 返回右表中的所有行,以及左表中满足连接条件的行。如果左表中没有匹配的行,则结果集中对应的列包含 NULL
  • 如果省略 OUTER 关键字,效果相同。
示例

SELECT orders.order_id, customers.customer_name
FROM orders
RIGHT JOIN customers ON orders.customer_id = customers.customer_id;

4. 全外连接(FULL OUTER JOIN)

描述
  • 全外连接 返回两个表中的所有行,只要它们在另一个表中有匹配的行或者没有匹配的行。
  • MySQL 不直接支持 FULL OUTER JOIN,但可以通过结合 LEFT JOINRIGHT JOIN 来实现类似的效果。
示例(模拟全外连接)

SELECT orders.order_id, customers.customer_name
FROM orders
LEFT JOIN customers ON orders.customer_id = customers.customer_id

UNION

SELECT orders.order_id, customers.customer_name
FROM orders
RIGHT JOIN customers ON orders.customer_id = customers.customer_id
WHERE orders.order_id IS NULL;

5. 自连接(Self JOIN)

描述
  • 自连接 是指一个表与自身进行连接。
  • 常用于查询层次结构数据,如员工与其上级的关系。
示例

SELECT e1.employee_name AS Employee, e2.employee_name AS Manager
FROM employees e1
LEFT JOIN employees e2 ON e1.manager_id = e2.employee_id;

6. 交叉连接(CROSS JOIN)

描述
  • 交叉连接 会生成两个表的笛卡尔积,即每个表中的每一行都与另一个表中的每一行组合。
  • 结果集的行数等于两个表行数的乘积。
示例

SELECT orders.order_id, customers.customer_name
FROM orders
CROSS JOIN customers;

7. 自然连接(NATURAL JOIN)

描述
  • 自然连接 是一种特殊的 JOIN,它自动基于两个表中同名的列进行连接。
  • 注意:使用时要小心,因为可能会意外地基于不正确的列进行连接。
示例

SELECT orders.order_id, customers.customer_name
FROM orders
NATURAL JOIN customers;

8. 使用 USING 子句

描述
  • 当两个表有相同的列名时,可以使用 USING 子句来简化 JOIN 语句。
  • USING 子句指定用于连接的列,并避免重复列出这些列。
示例

SELECT orders.order_id, customers.customer_name
FROM orders
JOIN customers USING (customer_id);


举报

相关推荐

0 条评论