mysql - 所有类型的 SQL 连接的解释

标签 mysql sql

我想知道除了发布可视化图表之外是否有人可以以其他方式为我分解连接。我知道如何使用它们,但我无法真正定义它们,所以我真的可能没有最好的知识。

那些让我困惑的事情,你如何定义“内部/外部”与“左/右”的用途,以及何时使用它们?我是自学连接的,是否有简单的结构定义可以帮助理解它们?我经常使用这些,但对于我来说,它们仍然是一个灰色地带。

最佳答案

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

相关文章:

mySQL 简单 SELECT 对所有观察值均失败

php - 计算和比较行查询 Mysql PHP

sql - 根据列的内存大小限制 SQL 查询

php - 有什么办法可以最小化这个 mysql 查询吗?

mysql - 如何将 SQL 查询转换为优化的 Rails Active Record 查询?

mysql - 返回图像上喜欢和不喜欢的计数

mysql - GROUP BY 查询忽略 ORDER BY 子句

java - 在 SimpleDateFormat#parse() 中使用 ~

"or"语句中的 MySQL 索引

mysql - SQL 数据库转储/文本解析