WHERE条件和ON条件的区别

目录

总结:

1.inner join方式关联

2.left join方式关联

实例

1.建表

2.left join 主表的on和where条件

3.left join 关联表的on和where条件


总结:

1.inner join方式关联

  • on条件(无论是对主表字段的限制还是对关联表字段的限制)和 where条件 对结果的影响一致 

2.left join方式关联

  • on条件(无论是对主表字段的限制还是对关联表字段的限制)不管结果是否为真,返回主表的所有记录,作用于生成临时表
  • where条件(无论是对主表字段的限制还是对关联表字段的限制),在join生成临时表后,返回条件为真的记录,过滤条件为不为真的记录

实例

1.建表

CREATE TABLE IF NOT EXISTS tb1
(
    id  STRING COMMENT 'id'
    ,age STRING COMMENT '年龄'
)
COMMENT '学生'
LIFECYCLE 7;

INSERT OVERWRITE TABLE tb1 VALUES
( '1' , '10' ) ,
( '2' , '20' )  ,
( '3' , '30' ) ;

CREATE TABLE IF NOT EXISTS tb2 
(
    age  STRING COMMENT '年龄'
    ,name STRING COMMENT '姓名'
)
COMMENT '课程'
LIFECYCLE 7;

INSERT OVERWRITE TABLE tb2 VALUES
( '10' , 'AAA' ) ,
( '20' , 'BBB') ;

主表:tb1

关联表:tb2
id age age name
1 10 10 AAA
2 20 20 BBB
3 30

2.left join 主表的on和where条件

--left join 主表的条件在where里
SELECT  * FROM  tb1
LEFT OUTER JOIN tb2 
ON tb1.age=tb2.age
WHERE   tb1.id='2';  


--left join 主表的条件在on里
SELECT  * FROM  tb1
LEFT OUTER JOIN tb2 
ON tb1.age=tb2.age
AND    tb1.id='2';

3.left join 关联表的on和where条件

--left join 关联表的条件在where里
SELECT  * FROM  tb1
LEFT OUTER JOIN tb2 
ON tb1.age=tb2.age
WHERE   tb2.name='AAA';  


--left join 关联表的条件在on里
SELECT  * FROM  tb1
LEFT OUTER JOIN tb2 
ON tb1.age=tb2.age
AND    tb2.name='AAA'; 

 

猜你喜欢

转载自blog.csdn.net/Strive_0902/article/details/131633739