当前位置:数据库 > MySQL >>

mysql left join啥意思

left join,right join 没弄明白啊,想弄清这么个问题: 假如我用的是表1 left join 表2: 1.他的运行原理是不是,第一步:先从表1中读取出第一条数据,然后从表2中读出第1条数据,将两个数据结合起来,看看是不是满足WHERE的条件,如果满足,这条数据就 得到; 第2步:还是表1的第一条数据,跟表2的第2条数据做对比,看是否满足,然后是否获取。 第n步:一直都是表1的第一条数据,跟表2的第n条数据比较 第m步:当表2数据全遍历完了,换做 表1的第2条数据,同样方式 把表2又重新遍历一便? 是这样吗???那不是说 假如表1有100条,表2有100条。用这种方法搜索 就要做100*100=10000次??? 问题2: 上面的思路对吗?? 疑惑的是WHERE 条件什么时候判断 还有,打了半天上面竟然忘了ON。。应该是先判断ON 满足了 才去判断WHERE吧? 问题3: 每条数据 都是 对比一次 判断一次,满足了才放进 结果表里呢? 还是,先把所有满足ON条件的 放到一个临时表,然后从中判断 WHERE条件是否满足,再放到结果表里?? 问题3重要啊,因为我要写一个查询,里面 WHERE条件里 的某个字段,我并不需要SELECT出来的,假如 原理是我想的第2个情况,那这个临时表,没有 那个字段,WHERE条件 就判断不了了?
追问:我很奇怪 where 跟 on,你提到  条件放哪 结果不一样,这个能再举下例子吗??那是不是 可以理解成, 假如是 表1 left join 表2, 那么 如果是约束表1的,比如表1里啥字段必须等于多少,在on  和 where 里写 都没区别,如果是约束表2的,如 表2里,有个字段必须为1 就得先在on里 不然可能 漏掉?

好难理解啊。。。
答案:问题1 是的,如果你不加ON条件,那就是迪卡尔集,记录数为M*N (M是A表数量,N是B表数据)
问题2 是的,先ON 再 WHERE ,这里一定要注意,条件是放在ON里还是WHERE里,放的位置不同结果可能完全不一样
问题3 是在SELECT前就作判断的。A LEFT JOIN B 那么 WHERE 后面所有字段都可以用来过滤。

举个例子 A表 
ID  |   VAL
1001 |  100
1002 |  200
1003 |  300
B表
ID | val
1002 | 500
1004 | 600
那么
select a.id,b.id,a.val,b.val
from a left join b
on a.id=b.id
出来便是
1001 |  null | 100 |  null
1002 |  1002  |  200 | 500
1003 |  null    |300 | null

上一个:MYSQL数据库密码字段临时加密问题?
下一个:mysql 触发器的安全性?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,