这里写目录标题
INNER JOIN
INNER JOIN 返回两个表中匹配的行。如果某一表中的某个记录在另一个表中没有匹配的记录,则该记录不会出现在结果中。
SELECT *
FROM Users u
INNER JOIN AppraisalBases a ON u.BaseTypeId = a.Id;
在执行 INNER JOIN 时,只会返回那些 BaseTypeId 有匹配的记录。结果会是:
Id | UserName | BaseTypeId | BaseType | AppraisalBase |
---|---|---|---|---|
1 | 张三 | 1 | 政法编制 | 20000 |
2 | 李四 | 2 | 行政编制 | 18000 |
3 | 王五 | 3 | 事业编制 | 18000 |
注意
:
赵六 不会出现在结果中,因为他没有 BaseTypeId,在 AppraisalBases 表中没有对应的记录。
LEFT JOIN(左外连接)
LEFT JOIN 返回左表(即第一个表)中的所有记录,即使右表(即第二个表)中没有匹配的记录。如果右表没有匹配的记录,那么右表的所有列将会返回 NULL
。
SELECT *
FROM Users u
LEFT JOIN AppraisalBases a ON u.BaseTypeId = a.Id;
执行 LEFT JOIN 后,结果会是:
Id | UserName | BaseTypeId | BaseType | AppraisalBase |
---|---|---|---|---|
1 | 张三 | 1 | 政法编制 | 20000 |
2 | 李四 | 2 | 行政编制 | 18000 |
3 | 王五 | 3 | 事业编制 | 18000 |
3 | 赵六 | NULL | NULL | NULL |
注意
:
赵六 的 BaseTypeId 是 NULL,因此 LEFT JOIN 会返回 NULL 值对应 BaseType 和 AppraisalBase 字段。
其他用户的记录会正常显示,因为它们在 AppraisalBases 表中有匹配。