SQL 连接(JOIN)学习笔记

在SQL中,JOIN是将两个或更多表中的行连接起来的方式。JOIN有多种类型,包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN。

INNER JOIN

INNER JOIN又称为等值连接(Equi-Join)或内连接(Inner Join),它返回两个表中的匹配行。例如,我们有两个表:employees和departments。

sqlCopy Code
-- employees表 CREATE TABLE employees ( emp_id INT PRIMARY KEY, name VARCHAR(50), dept_id INT ); -- departments表 CREATE TABLE departments ( dept_id INT PRIMARY KEY, name VARCHAR(50) );

我们可以使用以下SELECT语句获得employees和departments表中有关联的行:

sqlCopy Code
SELECT employees.name, departments.name FROM employees INNER JOIN departments ON employees.dept_id = departments.dept_id;

这将返回两张表之间的交集,即只返回同时存在于employees和departments表中的行。

LEFT JOIN

LEFT JOIN又称为左外连接(Left Outer Join),它返回左边表中的所有行以及右边表中与它们匹配的行。如果右表中没有匹配的行,则结果为NULL。例如,我们使用以下SELECT语句获得employees表中每个员工的部门名称(如果他们有一个):

sqlCopy Code
SELECT employees.name, departments.name FROM employees LEFT JOIN departments ON employees.dept_id = departments.dept_id;

这将返回employees表中的每个员工,并显示他们所属的部门名称(如果他们有一个)。如果某个员工没有一个部门,那么对应的departments列将为NULL。

RIGHT JOIN

RIGHT JOIN又称为右外连接(Right Outer Join),它返回右边表中的所有行以及左边表中与它们匹配的行。如果左表中没有匹配的行,则结果为NULL。例如,我们使用以下SELECT语句获得departments表中每个部门的员工名称(如果他们有一个):

sqlCopy Code
SELECT employees.name, departments.name FROM employees RIGHT JOIN departments ON employees.dept_id = departments.dept_id;

这将返回departments表中的每个部门,并显示属于该部门的员工名称(如果有的话)。如果某个部门没有员工,那么对应的employees列将为NULL。

FULL OUTER JOIN

FULL OUTER JOIN又称为全外连接(Full Outer Join),它返回左右两个表中所有的行,如果某一张表中没有匹配的行,则对应的列为NULL。例如,我们使用以下SELECT语句获取所有员工和部门的名称:

sqlCopy Code
SELECT employees.name, departments.name FROM employees FULL OUTER JOIN departments ON employees.dept_id = departments.dept_id;

这将返回employees表中的每个员工以及departments表中的每个部门,并显示它们各自所属的行的名称。如果某个员工或部门没有匹配的行,则对应的列将为NULL。

以上是SQL连接(JOIN)学习笔记的简单实例,希望对您有所帮助。