gpt4 book ai didi

mysql - 嵌套 INNER JOIN vs INNER JOIN vs WHERE : correctness, 性能,特定案例的清晰度(不是典型的 JOIN vs WHERE 问题)

转载 作者:IT老高 更新时间:2023-10-28 23:55:20 25 4
gpt4 key购买 nike

我正在研究内部连接,我是 WHERE SQL-92 的老手。我想知道其中的含义并了解它是如何工作的。所以这只是一个关于 SQL 连接的理论问题。这是……

 SELECT * FROM   -- Query 1
tbl1
INNER JOIN (
tbl2
INNER JOIN (
tbl3 INNER JOIN tbl4 ON tbl3.Col1 = tbl4.Col1
)
ON tbl2.col1 = tbl3.col2
)
ON tbl1.col1 = tbl3.col3

...和这个一样吗?

 SELECT * FROM   -- Query 2
tbl3
INNER JOIN tbl4 ON tbl3.col1 = tbl4.col1
INNER JOIN tbl2 ON tbl2.col1 = tbl3.col2
INNER JOIN tbl1 ON tbl1.col1 = tbl3.col3

...还是这个(不按逻辑分辨率排序)?

  SELECT * FROM   -- Query 3
tbl3
INNER JOIN tbl1 ON tbl1.col1 = tbl3.col3
INNER JOIN tbl2 ON tbl2.col1 = tbl3.col2
INNER JOIN tbl4 ON tbl3.col1 = tbl4.col1

..or this(引用节点已更改;请参阅在引用之前引用了一个表,但笛卡尔积应该相同)

  SELECT * FROM   -- Query 4
tbl4
INNER JOIN tbl1 ON tbl1.col1 = tbl3.col3
INNER JOIN tbl2 ON tbl2.col1 = tbl3.col2
INNER JOIN tbl3 ON tbl4.col1 = tbl3.col1

..还是这个?

  SELECT * FROM   -- Query 5 
tbl1,tbl2,tbl3,tbl4
WHERE
tbl3.col1 = tbl4.col1
tbl2.col1 = tbl3.col2
tbl1.col1 = tbl3.col3

...从美学、句法、最佳实践和功能的角度来看?

这是一个非常开放的问题,但我认为社区提供一些启发非常有趣!

最佳答案

我一直密切使用的所有数据库引擎(这是SQL ServerOraclePostgreSQLMySQLSybaseSQLiteInformixFirebird) 将优化为相同的计划。

但是,第四个查询不会在所有引擎上解析(您不能在 ON 子句中引用表,然后再将其用于 JOIN 子句中)

MySQL 提供 STRAIGHT_JOIN 子句,它会影响计划中使用的连接顺序。

Oracle中,有一个提示/*+ ORDERED */,在SQL Server中有一个类似的提示FORCE订购。如果查询使用这些提示,计划顺序也会受到连接顺序的影响。

关于mysql - 嵌套 INNER JOIN vs INNER JOIN vs WHERE : correctness, 性能,特定案例的清晰度(不是典型的 JOIN vs WHERE 问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10334608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com