SQL 表连接操作

SQL 表连接操作是数据库查询中一个非常重要的概念,它允许从多个表中检索相关数据。表连接的主要类型包括 INNER JOINLEFT JOIN(或 LEFT OUTER JOIN)、RIGHT JOIN(或 RIGHT OUTER JOIN)、FULL JOIN(或 FULL OUTER JOIN)以及 CROSS JOIN。下面是详细解释每种连接操作及其使用场景:

1. INNER JOIN(内连接)

功能

  • 返回两个表中都有匹配记录的行。

SQL 语法

SELECT columns
FROM table1
INNER JOIN table2
ON table1.common_column = table2.common_column;

示例

SELECT Employees.name, Departments.department_name
FROM Employees
INNER JOIN Departments
ON Employees.department_id = Departments.id;

结果

  • 仅返回 EmployeesDepartments 表中 department_idid 匹配的记录。
  • 如果 Employees 中的记录在 Departments 中没有匹配的记录,则该员工不会出现在结果中。
2. LEFT JOIN(左外连接)

功能

  • 返回左表的所有记录,以及右表中匹配的记录。如果右表中没有匹配记录,则结果中的右表字段为 NULL

SQL 语法

SELECT columns
FROM table1
LEFT JOIN table2
ON table1.common_column = table2.common_column;

示例

SELECT Employees.name, Departments.department_name
FROM Employees
LEFT JOIN Departments
ON Employees.department_id = Departments.id;

结果

  • 返回所有 Employees 表中的记录,即使在 Departments 表中没有匹配的记录。
  • 如果 Employees 表中的记录在 Departments 表中没有对应的部门,则 department_name 字段为 NULL
3. RIGHT JOIN(右外连接)

功能

  • 返回右表的所有记录,以及左表中匹配的记录。如果左表中没有匹配记录,则结果中的左表字段为 NULL

SQL 语法

SELECT columns
FROM table1
RIGHT JOIN table2
ON table1.common_column = table2.common_column;

示例

SELECT Employees.name, Departments.department_name
FROM Employees
RIGHT JOIN Departments
ON Employees.department_id = Departments.id;

结果

  • 返回所有 Departments 表中的记录,即使在 Employees 表中没有匹配的记录。
  • 如果 Departments 表中的记录在 Employees 表中没有对应的员工,则 name 字段为 NULL
4. FULL JOIN(全外连接)

功能

  • 返回两个表中的所有记录,左表和右表中没有匹配记录的部分将以 NULL 进行填充。

SQL 语法

SELECT columns
FROM table1
FULL JOIN table2
ON table1.common_column = table2.common_column;

示例

SELECT Employees.name, Departments.department_name
FROM Employees
FULL JOIN Departments
ON Employees.department_id = Departments.id;

结果

  • 返回 Employees 表和 Departments 表中的所有记录。
  • 如果某些记录在一个表中存在但在另一个表中没有对应记录,结果中的缺失部分将用 NULL 填充。
5. CROSS JOIN(交叉连接)

功能

  • 返回两个表的笛卡尔积,即左表的每一行与右表的每一行组合在一起。

SQL 语法

SELECT columns
FROM table1
CROSS JOIN table2;

示例

SELECT Employees.name, Projects.project_name
FROM Employees
CROSS JOIN Projects;

结果

  • 返回 Employees 表的每一行与 Projects 表的每一行的组合。
  • 这种连接方式生成的结果集可能非常大,通常用于特定的分析场景。
连接操作对性能的影响
  • INNER JOIN: 高效,通常在表上有索引的情况下执行快速,但可能丢失主表中的记录。
  • LEFT JOINRIGHT JOIN: 返回所有主表记录,可能会引入大量 NULL 值。性能受影响较大,尤其是当主表非常大时。
  • FULL JOIN: 性能较差,因为它需要返回两个表的所有记录,结果集可能非常大。
  • CROSS JOIN: 性能可能非常差,因为结果集的大小是两个表记录数量的乘积。
选择合适的连接类型
  • INNER JOIN: 当你只关心两个表中都存在的记录时使用。
  • LEFT JOIN: 当你需要保留左表的所有记录并查看右表的匹配情况时使用。
  • RIGHT JOIN: 当你需要保留右表的所有记录并查看左表的匹配情况时使用(较少用)。
  • FULL JOIN: 当你需要保留两个表的所有记录,无论是否有匹配时使用。
  • CROSS JOIN: 通常用于生成所有可能的组合,分析时使用。
posted @   脑袋凉凉  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示