SQL左连接查询结果行

时间:2016-01-02 01:58:54

标签: mysql database join

当您在两张桌子上执行左连接时,请说教师和部门ON teacher.id = department.id。左连接将比较左表(教师)中的每个记录与右表(部门)中的每个记录,并将记录加入到teacher.id = department.id的结果行中。

teacher.id != department.id时,每个表的行会发生什么变化?教师和部门表中的行是否仍然连接到一个结果行,但结果行的每个列值的值都为NULL

3 个答案:

答案 0 :(得分:1)

这个页面解释了极好的左外连接和右外连接,我想你应该看看:http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

答案 1 :(得分:1)

有关Left&的详细说明正确加入工作,以及他们可能产生的结果,检查这些:

Left joins explained.

Right joins explained.

希望它有所帮助。

答案 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