
SQL语句中的左外连接与右外连接
在SQL中,外连接(Outer Join)用于返回两个表中满足连接条件的所有记录,以及其中一个表(左表或右表)中不满足连接条件的记录。这些不满足连接条件的记录在结果集中会以NULL值填充。根据返回不满足连接条件记录的表的不同,外连接可以分为左外连接和右外连接。
左外连接(LEFT OUTER JOIN 或 LEFT JOIN)
左外连接会返回左表中的所有记录,即使它们在右表中没有匹配的记录。如果右表中没有匹配项,则结果集中的对应列将包含NULL值。
语法:
SELECT 列名1, 列名2, ... FROM 表1 LEFT OUTER JOIN 表2 ON 表1.列名 = 表2.列名; -- 或者简写形式 SELECT 列名1, 列名2, ... FROM 表1 LEFT JOIN 表2 ON 表1.列名 = 表2.列名;示例: 假设有两个表 employees 和 departments,我们希望列出所有员工及其所属的部门名称,即使某些员工没有分配部门。
SELECT employees.employee_id, employees.name, departments.department_name FROM employees LEFT JOIN departments ON employees.department_id = departments.department_id;在这个查询中,如果某个员工没有分配到部门,那么他的 department_name 将显示为 NULL。
右外连接(RIGHT OUTER JOIN 或 RIGHT JOIN)
右外连接会返回右表中的所有记录,即使它们在左表中没有匹配的记录。如果左表中没有匹配项,则结果集中的对应列将包含NULL值。
语法:
SELECT 列名1, 列名2, ... FROM 表1 RIGHT OUTER JOIN 表2 ON 表1.列名 = 表2.列名; -- 或者简写形式 SELECT 列名1, 列名2, ... FROM 表1 RIGHT JOIN 表2 ON 表1.列名 = 表2.列名;示例: 同样使用 employees 和 departments 两个表,如果我们希望列出所有部门及其对应的员工姓名,即使某些部门没有分配员工。
SELECT departments.department_name, employees.name FROM departments RIGHT JOIN employees ON departments.department_id = employees.department_id;在这个查询中,如果某个部门没有分配员工,那么该部门的 name 将显示为 NULL。
总结
- 左外连接(LEFT JOIN):返回左表中的所有记录,以及右表中满足连接条件的记录;对于左表中不满足连接条件的记录,右表中的列以NULL填充。
- 右外连接(RIGHT JOIN):返回右表中的所有记录,以及左表中满足连接条件的记录;对于右表中不满足连接条件的记录,左表中的列以NULL填充。
