此外,如何适应左外加入,右外加入和全外加入?


当前回答

INNER JOIN 要求在比较两个表中至少有一场比赛. 例如,表 A 和表 B 意味着 A 8 B (A 交叉点 B)。

LEFT OUTER JOIN 和 LEFT JOIN 是相同的. 它提供所有相匹配的记录在两张桌子和所有选项的左桌子。

同样,RIGHT OUTER JOIN和RIGHT JOIN是相同的,它提供了所有记录相匹配的两张表和所有可能的正确的表。

FULL JOIN 是 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 无重复的组合。

其他回答

下面看两张桌子:

EMP

empid   name    dept_id salary
1       Rob     1       100
2       Mark    1       300
3       John    2       100
4       Mary    2       300
5       Bill    3       700
6       Jose    6       400

部門

deptid  name
1       IT
2       Accounts
3       Security
4       HR
5       R&D

内部加入:

大多数写作只是在 sql 查询中加入,它只返回表之间的匹配记录。

查找所有员工及其部门名称:

Select a.empid, a.name, b.name as dept_name
FROM emp a
JOIN department b
ON a.dept_id = b.deptid
;

empid   name    dept_name
1       Rob     IT
2       Mark    IT
3       John    Accounts
4       Mary    Accounts
5       Bill    Security

正如你上面看到的那样,Jose 不是从 EMP 在输出中打印,因为它是 dept_id 6 在部门桌上找不到比赛。

因此,加入或只是加入,只返回匹配行。

左边加入:

这将从左表中返回所有记录,仅从右表中匹配记录。

Select a.empid, a.name, b.name as dept_name
FROM emp a
LEFT JOIN department b
ON a.dept_id = b.deptid
;

empid   name    dept_name
1       Rob     IT
2       Mark    IT
3       John    Accounts
4       Mary    Accounts
5       Bill    Security
6       Jose    

HR 和 R&D 行不从部门桌上打印,因为他们没有在 dept_id 上的 Emp 桌上找到比赛。

因此,LEFT JOIN从左桌返回所有行,仅从右桌匹配行。

您也可以在这里查看Demo。

我在其他答案中看不到很多关于性能和优化的细节。

有时,知道只有INNER JOIN是合并的,这意味着优化器有最多的选择与它一起玩,它可以重新订单加入顺序,使它更快地保持相同的结果,优化器可以使用最多加入模式。

一般来说,尝试使用 INNER JOIN 而不是不同类型的插件是很好的做法(当然,如果可以考虑到预期的结果设置)。

这里有几个好例子和解释这个奇怪的协会行为:

是否留在外部合并合并合并?合并命令在SQL中的内容?

简单的说法:

一个内部合并只接收相匹配的行列。

虽然一个外部加入从一个表中获取相匹配的行,而在另一个表中的所有行......结果取决于你使用哪个行:

左: 右桌上的匹配行和左桌上的所有行 右: 左桌上的匹配行和右桌上的所有行 或 完整: 所有桌上的所有行。

您使用 INNER JOIN 返回两个表中的所有行,即在结果表中,所有行和列都将有值。

在 OUTER JOIN 中,结果表可能有空列,外部加入可能是左或右。

LEFT OUTER JOIN 从第一张桌子中返回所有行,即使在第二张桌子中没有比赛。

RIGHT OUTER JOIN 从第二张桌子返回所有行,即使在第一张桌子上没有比赛。

内部加入与外部加入之间的区别如下:

内部合并是基于匹配图表的合并,而外部合并是基于匹配图表和未匹配图表的合并。内部合并是从两个图表中匹配序列的合并,而外部合并是从两个图表中匹配序列的合并,而外部合并是从两个图表中匹配序列的合并,而未匹配序列是以零值填写的合并。