MySQL中on与where的区别

以left join为例:

on:生成临时表时使用的条件,无论条件是否生效,都会返回左表的行(left join性质影响)

where:生成临时表之后使用的条件,一定会过滤不满足设定条件的行

示例表:

girl
id g_name
1 Anna
 
2 Bill
 
3 Clark
 
4 Dell
 
5 Edward
boy
id b_name gf_id salary
1 a 1 8000
2 b 2 9000
3 c 3 10000
4 d 4 11000
5 e   6000

原始查询

select b.b_name,b.salary,g.g_name from boy b left join girl g on b.gf_id=g.id

结果:

b_name salary g_name
a 8000 Anna
 
b 9000 Bill
 
c 10000 Clark
 
d 11000 Dell
e 5000 (NULL)

原始查询+on(两个on使用and连接,可以看做( on b.gf_id=g.id,on salary>9000),但不能这么写,会有语法错误)

select b.b_name,b.salary,g.g_name from boy b left join girl g on b.gf_id=g.id and salary>9000

结果:

b_name salary g_name
c 11000 Clark
d 10000 Dell
a 8000 (NULL)
b 9000 (NULL)
e 5000 (NULL)

原始查询+where

select b.b_name,b.salary,g.g_name from t_boy b left join t_girl g on b.gf_id=g.id where salary>9000

结果:

b_name salary g_name
c 11000 Clark
d 10000 Dell

 

上一篇:SCHNEIDER K1E005NLH


下一篇:五子棋小游戏终极版(三)