vlambda博客
学习文章列表

Mysql表关联时执行顺序

Mysql表关联时执行顺序
Mysql表关联时执行顺序
left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种。左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。

Mysql表关联时执行顺序
01
左连接:left join

with temp1 as (
select 1 as id ,12 as num union
select 2 as id ,13 as num union
select 3 as id ,12 as num union
select 4 as id ,14 as num union
select 5 as id ,12 as num union
select 6 as id ,16 as num
), temp2 as (
select 1 as id ,'a' as var union
select 2 as id ,'b' as var union
select 3 as id ,'c' as var union
select 4 as id ,'a' as var union
select 5 as id ,'b' as var union
select 6 as id ,'f' as var
)
select  * from temp1 t1 left join temp2 t2 on t1.id =t2.id
Mysql表关联时执行顺序
0 2
左连接left join(on中加条件)

说明:先关联,再过滤

with temp1 as (
select 1 as id ,12 as num union
select 2 as id ,13 as num union
select 3 as id ,12 as num union
select 4 as id ,14 as num union
select 5 as id ,12 as num union
select 6 as id ,16 as num
), temp2 as (
select 1 as id ,'a' as var union
select 2 as id ,'b' as var union
select 3 as id ,'c' as var union
select 4 as id ,'a' as var union
select 5 as id ,'b' as var union
select 6 as id ,'f' as var
)
-- select  * from temp1 t1 left join temp2 t2 on t1.id =t2.id
select  * from temp1 t1 left join temp2 t2 on t1.id =t2.id and t1.num=12
-- select  * from temp1 t1 left join temp2 t2 on t1.id =t2.id where t1.num=12
Mysql表关联时执行顺序
0 3
左连接left join(末尾where条件)

说明:最后过滤

with temp1 as (
select 1 as id ,12 as num union
select 2 as id ,13 as num union
select 3 as id ,12 as num union
select 4 as id ,14 as num union
select 5 as id ,12 as num union
select 6 as id ,16 as num
), temp2 as (
select 1 as id ,'a' as var union
select 2 as id ,'b' as var union
select 3 as id ,'c' as var union
select 4 as id ,'a' as var union
select 5 as id ,'b' as var union
select 6 as id ,'f' as var
)
-- select  * from temp1 t1 left join temp2 t2 on t1.id =t2.id
-- select  * from temp1 t1 left join temp2 t2 on t1.id =t2.id and t1.num=12
select  * from temp1 t1 left join temp2 t2 on t1.id =t2.id where t1.num=12
Mysql表关联时执行顺序
0 4
左连接left join(on中加条件&末尾where条件)

with temp1 as (
select 1 as id ,12 as num union
select 2 as id ,13 as num union
select 3 as id ,12 as num union
select 4 as id ,14 as num union
select 5 as id ,12 as num union
select 6 as id ,16 as num
), temp2 as (
select 1 as id ,'a' as var union
select 2 as id ,'b' as var union
select 3 as id ,'c' as var union
select 4 as id ,'a' as var union
select 5 as id ,'b' as var union
select 6 as id ,'f' as var
)
select  * from temp1 t1 left join temp2 t2 on t1.id =t2.id and t1.num=12  where  t1.num=12
 



“阅读原文”一起来充电吧!