[英]SQL Left Join Query Result Row
当您在两个表上执行左联接时,假设教师和部门ON teacher.id = department.id
。 左联接会将左表(教师)中的每个记录与右表(部门)中的每个记录进行比较,如果teacher.id = department.id
则将记录teacher.id = department.id
到结果行中。
当teacher.id != department.id
时,每个表中的行会发生什么? 教师和部门表中的行是否仍合并到一个结果行中,除了结果行的每一列值都将具有NULL
?
该页面很好地解释了左右外部联接,我认为您应该看一下: http : //blog.codinghorror.com/a-visual-explanation-of-sql-joins/
假设我们有2个表:
Table1
tc1
0
1
2
和表Table2
tc2
0
2
3
这将是对这两个表的各种查询的结果
SELECT tc1, tc2 FROM table1, table2 WHERE tc1=tc2
结果:
tc1 tc2
0 0
2 2
此查询与此相同:
SELECT tc1, tc2 FROM table1 INNER JOIN table2 ON tc1=tc2
它基本上只返回tc1 = tc2的行。 简单。 现在,外部联接的行为有所不同。 它们包括一个表中的所有行。
LEFT
表示它将包括集合中所有行,即使它们与联接表中的任何内容都不匹配。
RIGHT
表示它将包括联接表中的所有行,即使它们与您已有的行中的任何内容都不匹配。
FULL
将从两侧返回所有行。
如果在一侧找不到匹配项,则将这些值返回为NULL
SELECT tc1, tc2 FROM table1 LEFT JOIN table2 ON tc1=tc2
结果将是:
tc1 tc2
0 0
1 NULL
2 2
现在,有了正确的加入
SELECT tc1, tc2 FROM table1 RIGHT JOIN table2 ON tc1=tc2
将返回
tc1 tc2
0 0
2 2
NULL 3
现在,完全外部联接
SELECT tc1, tc2 FROM table1 FULL OUTER JOIN table2 ON tc1=tc2
将返回所有行,并匹配null
tc1 tc2
0 0
1 NULL
2 2
NULL 3
请记住,这些是等效的:
INNER JOIN <=> JOIN
LEFT OUTER JOIN <=> LEFT JOIN
RIGHT OUTER JOIN <=> RIGHT JOIN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.