mysql - 表连接顺序会影响查询结果吗?

标签 mysql sql oracle join

一共有三张表t1,t2,t3,每张表都有一个字段f。这些对的 sql 是否相同?

1.select t1.f,t2.f,t3.f from t1 left join t2 on t1.f =t2.f left join t3 on t1.f = t3.f

select t1.f,t2.f,t3.f from t1 left join t3 on t1.f =t3.f left join t2 on t1.f = t2.f

2.select t1.f,t2.f,t3.f from t1 left join t2 on t1.f =t2.f inner join t3 on t1.f = t3.f

select t1.f,t2.f,t3.f from t1 inner join t3 on t1.f =t3.f left join t2 on t1.f = t2.f

3.select t1.f,t2.f,t3.f from t1 left join t2 on t1.f =t2.f right join t3 on t1.f = t3.f

select t1.f,t2.f,t3.f from t1 right join t3 on t1.f =t3.f left join t2 on t1.f = t2.f

4.select t1.f,t2.f,t3.f from t1 left join t2 on t1.f =t2.f full join t3 on t1.f = t3.f

select t1.f,t2.f,t3.f from t1 full join t3 on t1.f =t3.f left join t2 on t1.f = t2.f

5.select t1.f,t2.f,t3.f from t1 left join t2 on t1.f =t2.f left join t3 on t2.f = t3.f

select t1.f,t2.f,t3.f from t1 left join (t2 left join t3 on t2.f = t3.f) on t1.f =t2.f

...保持三张表中的任意两张表具有相同的连接和相同的连接字段。查询结果是否相同?如何简单理解?

我想知道如何证明它。我用oracle(+)连接表时,发现(+)不显示表连接顺序。如果结果不同,oracle默认顺序是什么?

我知道 t1 left join t2 不同于 t2 left join t1,因为它转换为 (+) 是不同的 sql。上面的sql,你转成(+)也是一样的。

例如,最后一对 sql 可以转换为从 t1、t2、t3 中选择 t1.f、t2.f、t3.f,其中 t1(+)=t2 和 t2(+)=t3,如 where clause no order.And in sql join's wiki,显式连接和隐式连接是平等的。因此,如果成对的 sql 的结果不同,那就是矛盾。

最佳答案

这是我最好的知识:

A左加入B ~A∪(A∩B) ~一个

A右加入B ~(A∩B)∪B ~B

A完全加入B ~ A ∪ B

A 内连接 B ~A∩B

#1
t1 ∪ (t1 ∩ t3)                         t1 ∪ (t1 ∩ t2)
~ t1                                   ~ t1 

#2
t1 ∩ t3                                (t1 ∩ t3) ∪ (t1 ∩ t3 ∩ t2) 
~ t1 ∩ t3                              ~ t1 ∩ t3 

#3
(t1 ∩ t3 ) ∪ t3                        t3 ∪ (t1 ∩ t3 ∩ t2)
~ t3                                   ~ t3

#4
t1 ∪ t3                                (t1 ∪ t3) ∪ (t1 ∪ (t1 ∩ t2))
~ t1 ∪ t3                              ~ t1 ∪ t3

#5
(t1 ∪ (t1 ∩ t2)) ∪ (t1 ∩ t2 ∩ t3)      t1 ∪ (t1 ∩ (t2 ∪ (t2 ∩ t3)))
~ t1 ∪ (t1 ∩ t2 ∩ t3)                  ~ t1 ∪ (t1 ∩ t2)
~ t1                                   ~ t1

即使是第一个表达式,我也试图让它更短以避免混淆。对于#5,我把它写得更长了一点,以便更清楚。如果您想查看完整的扩展表达式,请告诉我。

关于mysql - 表连接顺序会影响查询结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35704309/

相关文章:

javascript - Electronjs Mysql数据库提交查询随机访问

php - 查询从 wordnet mysql 获取反义词?

mysql触发使用DOB字段和基于计算年龄的自动存储类别计算年龄到数据库

PHP MYSQL 查询数组字段

php/mysql : get data from one table, 转换并插入另一个表

sql - 在 Oracle 中使用 LISTAGG 进行字符串格式化。转义单引号 ` ' `

sql - upsert 到表,返回最后插入的记录的 id

mysql - 如何从表的行中获取变量到列表中? (示例)(数据透视表?)

oracle - 神秘的 getClobVal()

oracle - dbeaver表编辑被阻塞,怎么办?