我想知道除了发布可视化图表之外是否有人可以以其他方式为我分解连接。我知道如何使用它们,但我无法真正定义它们,所以我真的可能没有最好的知识。
那些让我困惑的事情,你如何定义“内部/外部”与“左/右”的用途,以及何时使用它们?我是自学连接的,是否有简单的结构定义可以帮助理解它们?我经常使用这些,但对于我来说,它们仍然是一个灰色地带。
最佳答案
必读:http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/
FROM A INNER JOIN B on A.ID = B.ID
给我两个表中的记录,但前提是它们匹配 这表示如果 A 和 B 的共同 ID 均为 1,则结果集中只有 1 条记录。
FROM A LEFT JOIN B on A.ID = B.ID.
给我 A 中的所有记录以及 B 中匹配的记录。因此,A 中的所有 10 条记录和 B 中匹配的 1 条记录。仍然是 10 条记录,除非每个表中多次存在相同的 ID。但这通常意味着数据未标准化,或者您缺少连接条件。
FROM A RIGHT JOIN B on A.ID = B.ID
给我 B 中的所有记录以及 A 中匹配的记录 如果您只是重新排列 from 子句中的表,它的作用与左连接相同。
FROM A CROSS JOIN B
给我所有记录,因为它们与所有记录相关,如果两个表都有 10 条记录,则生成的数据集将包含 100 条记录 (10*10)
LEFT JOIN, LEFT OUTER JOIN... same thing
RIGHT JOiN, RIGHT OUTER JOIN ... same thing
JOIN, INNER JOIN same thing.
Select * FROM A, B 执行连接的旧方法(与交叉连接相同,除非在 where 子句中提供限制条件。
关于mysql - 所有类型的 SQL 连接的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23747133/