INNER JOIN, LEFT JOIN, RIGHT JOIN 的区别

今天我们来一起探索下JOIN,JOIN作为数据库操作的核心概念,用于合并两个或多个表中的数据。

一、JOIN (INNER JOIN)

1、基本功能: 返回两个表中匹配成功的行。

2、特点:

  • 只保留两表中都满足连接条件的记录;
  • 如果某行在一个表中存在但在另一个表中没有匹配项,则该行不会出现在结果中;
  • 结果集的行数**≤**两个原表的行数。

3、语法

复制代码
SELECT columns
FROM table1
[INNER] JOIN table2 ON table1.column = table2.column;

4、示例

复制代码
SELECT orders.order_id, customers.customer_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;

二、LEFT JOIN (LEFT OUTER JOIN)

1、基本功能:返回左表的所有行,即使右表中没有匹配。

2、特点

  • 保留左表的全部记录;
  • 当右表无匹配时,右表字段显示为 NULL
  • 结果集的行数**=**左表的行数。

3、语法

复制代码
SELECT columns
FROM table1
LEFT [OUTER] JOIN table2 ON table1.column = table2.column;

4、示例

复制代码
SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.dept_id = departments.dept_id;

三、RIGHT JOIN (RIGHT OUTER JOIN)

1、基本功能:返回右表的所有行,即使左表中没有匹配。

2、特点

  • 保留右表的全部记录;
  • 当左表无匹配时,左表字段显示为 NULL
  • 结果集的行数**=**右表的行数;
  • 实际使用较少,通常可以用 LEFT JOIN 替代。

3、语法

复制代码
SELECT columns
FROM table1
RIGHT [OUTER] JOIN table2 ON table1.column = table2.column;

4、示例

复制代码
SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.dept_id = departments.dept_id;

实际使用建议

  • INNER JOIN是最常用的,适用于需要两个表都有数据的场景;
  • LEFT JOIN 常用于需要主表完整数据,关联表可有可无的情况;
  • RIGHT JOIN 使用较少,通常可以通过调换表顺序用 LEFT JOIN 实现;
  • 注意 NULL值的处理,特别是在 WHERE 条件中。

在强者的世界中,即便是戴着镣铐跳舞,舞也会跳得铿锵有力。-- 烟沙九洲