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 触发器的安全性?