目录
总结:
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';