当您在两张桌子上执行左连接时,请说教师和部门ON teacher.id = department.id
。左连接将比较左表(教师)中的每个记录与右表(部门)中的每个记录,并将记录加入到teacher.id = department.id
的结果行中。
teacher.id != department.id
时,每个表的行会发生什么变化?教师和部门表中的行是否仍然连接到一个结果行,但结果行的每个列值的值都为NULL
?
答案 0 :(得分:1)
这个页面解释了极好的左外连接和右外连接,我想你应该看看:http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/
答案 1 :(得分:1)
答案 2 :(得分:1)
假设我们有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
将返回所有行,匹配空值
tc1 tc2
0 0
1 NULL
2 2
NULL 3
请记住,这些是等效的:
INNER JOIN <=> JOIN
LEFT OUTER JOIN <=> LEFT JOIN
RIGHT OUTER JOIN <=> RIGHT JOIN