笔试的时候会碰到join on后面会跟where或者and的笔试题,刚开始以为是一样的,但是后面本人测试了一下,发现不一样,现做一下记录,方便自己记忆,也希望给不了解的看官介绍一下,了解的看官温故知新。
目录
数据准备
验证内容
LEFT JOIN(RIGHT JOIN)验证
LEFT JOIN(RIGHT JOIN)只带ON的HQL
LEFT JOIN(RIGHT JOIN)只ON和AND的HQL
LEFT JOIN(RIGHT JOIN)只ON和WHERE的HQL
LEFT JOIN(RIGHT JOIN) ON 1=1
LEFT JOIN(RIGHT JOIN) ON 1=2
left join(right join)小结
INNER JOIN验证
INNER JOIN只带ON的HQL
INNER JOIN只ON和AND的HQL
INNER JOIN只ON和WHERE的HQL
inner join小结
emp1表:
1 张三 A1
2 李四 A2
3 王五 A3
4 小明 B1
dept1表:
A1 财务
A2 人事
create table if not exists emp1
(
emp_no string
,name string
,dept_no string
)row format delimited fields terminated by '\t';
create table if not exists dept1
(
dept_no string
,dept_name string
)row format delimited fields terminated by '\t';
select t1.name,t1.dept_no,t2.dept_no from emp1 t1
left join dept1 t2
on t1.dept_no = t2.dept_no;
张三 A1 A1
李四 A2 A2
王五 A3 NULL
小明 B1 NULL
select t1.name,t1.dept_no,t2.dept_no from emp1 t1
left join dept1 t2
on t1.dept_no = t2.dept_no
and t2.dept_no='A2';
张三 A1 NULL
李四 A2 A2
王五 A3 NULL
小明 B1 NULL
select t1.name,t1.dept_no,t2.dept_no from emp1 t1
left join dept1 t2
on t1.dept_no = t2.dept_no
where t2.dept_no='A2';
李四 A2 A2
select t1.name,t1.dept_no,t2.dept_no from emp1 t1
left join dept1 t2
on 1=1;
张三 A1 A1
张三 A1 A2
张三 A1
李四 A2 A1
李四 A2 A2
李四 A2
王五 A3 A1
王五 A3 A2
王五 A3
小明 B1 A1
小明 B1 A2
小明 B1
select t1.name,t1.dept_no,t2.dept_no from emp1 t1
left join dept1 t2
on 1=2;
张三 A1 NULL
李四 A2 NULL
王五 A3 NULL
小明 B1 NULL
select t1.name,t1.dept_no,t2.dept_no from emp1 t1
inner join dept1 t2
on t1.dept_no = t2.dept_no;
张三 A1 A1
李四 A2 A2
select t1.name,t1.dept_no,t2.dept_no from emp1 t1
inner join dept1 t2
on t1.dept_no = t2.dept_no
and t2.dept_no='A2';
李四 A2 A2
select t1.name,t1.dept_no,t2.dept_no from emp1 t1
inner join dept1 t2
on t1.dept_no = t2.dept_no
where t2.dept_no='A2';
李四 A2 A2
做inner join的时候,使用on关联,会把关联表符合on条件的内容显示,不符合的全部过滤;使用on和and或者on和where效果是一样的。