所有类型的SQL连接的说明

时间:2014-05-19 21:00:52

标签: mysql sql

我想知道是否有人可以通过除了发布视觉图表之外的其他方式来破坏我的联接。我知道如何使用它们,但我无法真正定义它们,所以我可能没有最好的知识。

让我感到震惊的事情,你如何定义内部/外部与左/右相比,以及何时使用它们?我在加入时自学成才,是否有简单的结构定义可能有助于理解它们?我经常使用这些,但对于完整的图片,它们对我来说仍然是一个灰色区域。

1 个答案:

答案 0 :(得分:2)

必读: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.

选择* FROM A,B较旧的连接方法(与交叉连接相同,除非在where子句中提供限制条件。