外连接
外连接在连接两个表时,会保留指定表(左表或右表)的全部记录,即使另一张表中没有匹配的行。对于不匹配的部分,缺失的字段会用 NULL 填充。
1. 左连接
Section titled “1. 左连接”
左连接会保留左边表中的所有记录,无论右边表中是否有匹配的记录。如果右边表中没有与左表记录匹配的行,右表的列会填充 NULL 值。
SELECT 查询字段FROM 表1LEFT JOIN 表2 ON 表1.关联字段 = 表2.关联字段;2. 右连接
Section titled “2. 右连接”
右连接会保留右表中的所有记录,无论左表中是否有匹配的记录。如果左表中没有与右表记录匹配的行,左表的列会填充 NULL 值。
SELECT 查询字段FROM 表1RIGHT JOIN 表2 ON 表1.关联字段 = 表2.关联字段;慎用 RIGHT JOIN,它容易让逻辑变得不直观,尤其在多表连接时,建议优先使用
LEFT JOIN。
3. 全连接
Section titled “3. 全连接”返回 左表和右表中所有的记录,并在没有匹配时将缺失的部分用 NULL 填充。与 左连接(LEFT JOIN) 和 右连接(RIGHT JOIN) 不同,全外连接会保留两个表中的所有记录,不管它们是否有匹配的行。
SELECT 查询字段FROM 表1FULL OUTER JOIN 表2 ON 表1.关联字段 = 表2.关联字段;4. 注意事项
Section titled “4. 注意事项”- 支持
FULL OUTER JOIN的数据库包括:PostgreSQL、SQL Server、Oracle、SQLite(3.39.0+)等,但 MySQL 和 MariaDB 不支持。可在 MySQL 中如何实现 FULL OUTER JOIN 效果?
SELECT 表1.字段A, 表2.字段B, 表2.字段CFROM 表1LEFT JOIN 表2 ON 表1.关联字段 = 表2.关联字段
UNION
SELECT 表1.字段A, 表2.字段B, 表2.字段CFROM 表1RIGHT JOIN 表2 ON 表1.关联字段 = 表2.关联字段;ON与WHERE的区别
ON 条件在连接过程中进行过滤,用于决定哪些行参与连接。对“非主表”(如 LEFT JOIN 中的右表)的条件应写在 ON 中,才能保留主表的全部记录。
WHERE 条件在连接完成之后对结果集进行过滤。如果在 WHERE 中对非主表字段加条件,会导致主表中不匹配的记录被过滤掉,使外连接退化为内连接(主表数据不是全保留)。