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 CodeSELECT 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 CodeSELECT 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 CodeSELECT 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 CodeSELECT employees.name, departments.name
FROM employees
FULL OUTER JOIN departments ON employees.dept_id = departments.dept_id;
这将返回employees表中的每个员工以及departments表中的每个部门,并显示它们各自所属的行的名称。如果某个员工或部门没有匹配的行,则对应的列将为NULL。
以上是SQL连接(JOIN)学习笔记的简单实例,希望对您有所帮助。