自学内容网 自学内容网

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: 通常用于生成所有可能的组合,分析时使用。

原文地址:https://blog.csdn.net/qq_51641196/article/details/144756720

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!