tablea的結構及資料:
id name grade dept
1 lijie1 100.0 10
2 lijie2 90.0 20
3 lijie3 60.0 10
4 lijie4 80.0 10
5 lijie5 70.0 20
tableb的結構及資料:
id name
10 it1
20 it2
文章目錄
**1、兩張left join且同時查詢分數大於80的資料**
**2、兩張表right join且查詢分數大於80分的資料**
**3、兩張join且同時查詢分數大於80的資料**
**4、兩張full join且同時查詢分數大於80的資料**
**4中join區別的結論:**
**ps:**
**on與where的區別:**
1、兩張left join且同時查詢分數大於80的資料
條件放在on上面
select a.id,a.name,a.grade,a.dept,b.id,b.name from tablea a left join tableb b on a.dept=b.id and a.grade>80;
on結果為:
a.id a.name a.grade a.dept b.id b.name
1 lijie1 100.0 10 10 it1
2 lijie2 90.0 20 20 it2
3 lijie3 60.0 10 null null
4 lijie4 80.0 10 null null
5 lijie5 70.0 20 null null
條件放在where上面:
select a.id,a.name,a.grade,a.dept,b.id,b.name from tablea a left join tableb b where a.dept=b.id and a.grade>80;
where結果為:
a.id a.name a.grade a.dept b.id b.name
1 lijie1 100.0 10 10 it1
2 lijie2 90.0 20 20 it2
區別:on 和 where 在篩選條件的時候,on 會顯示所有滿足 | 不滿足條件的資料而 where 只顯示滿足條件的資料。
2、兩張表right join且查詢分數大於80分的資料
條件放在on上:
select a.id,a.name,a.grade,a.dept,b.id,b.name from tablea a right join tableb b on a.dept=b.id and a.grade>80;
結果為:
a.id a.name a.grade a.dept b.id b.name
1 lijie1 100.0 10 10 it1
2 lijie2 90.0 20 20 it2
條件放在where上:
select a.id,a.name,a.grade,a.dept,b.id,b.name from tablea a right join tableb b where a.dept=b.id and a.grade>80;
結果為:
a.id a.name a.grade a.dept b.id b.name
1 lijie1 100.0 10 10 it1
2 lijie2 90.0 20 20 it2
區別:無
3、兩張join且同時查詢分數大於80的資料
條件放在on上:
select a.id,a.name,a.grade,a.dept,b.id,b.name from tablea a join tableb b on a.dept=b.id and a.grade>80;
結果為:
a.id a.name a.grade a.dept b.id b.name
1 lijie1 100.0 10 10 it1
2 lijie2 90.0 20 20 it2
條件放在where上:
select a.id,a.name,a.grade,a.dept,b.id,b.name from tablea a join tableb b where a.dept=b.id and a.grade>80;
結果為:
a.id a.name a.grade a.dept b.id b.name
1 lijie1 100.0 10 10 it1
2 lijie2 90.0 20 20 it2
區別:無
4、兩張full join且同時查詢分數大於80的資料
條件放在on上:
select a.id,a.name,a.grade,a.dept,b.id,b.name from tablea a full join tableb b on a.dept=b.id and a.grade>80;
結果為:
a.id a.name a.grade a.dept b.id b.name
4 lijie4 80.0 10 null null
3 lijie3 60.0 10 null null
1 lijie1 100.0 10 10 it1
5 lijie5 70.0 20 null null
2 lijie2 90.0 20 20 it2
條件放在where上:
select a.id,a.name,a.grade,a.dept,b.id,b.name from tablea a full join tableb b where a.dept=b.id and a.grade>80;
結果為:
a.id a.name a.grade a.dept b.id b.name
1 lijie1 100.0 10 10 it1
2 lijie2 90.0 20 20 it2
區別:on 和 where 在篩選條件的時候,on 會顯示所有滿足 | 不滿足條件的資料而 where 只顯示滿足條件的資料。
4中join區別的結論:
在on條件下
join 內連線: 篩選條件嚴格,只要不滿足條件的這一項資料就不會顯示出來,不論是哪個表的這一行資料-等值連線。
left join 左外連線: 左外連線就是在等值連線的基礎上加上主表中的未匹配資料。
right join 右外連線: 右外連線是在等值連線的基礎上加上被連線表的不匹配資料 。
full join 滿外連線: 全外連線是在等值連線的基礎上將左表和右表的未匹配資料都加上。
ps:在這裡我也不清楚為什麼我右表的資料會顯示null,按理說應該顯示資料內容的。
where條件免疫,所有的join型別都按照內連線處理。
on與where的區別:
hive中四種排序的區別
hive中有四種排序,分別是 order by,sort by,distribute by 重點 cluster by order by 全域性排序,但是只能有乙個reduce來處理,在嚴格模式下必須指定limit,否則會報錯,在資料量很大的時候,處理時間會很長甚至跑不出資料,慎用!sort by ...
Hive 四種排序方式
hive中4種排序的區別 共有四種排序 order by,sort by distribute by,cluster by order by 全域性排序 對輸入的資料做排序,故此只有乙個reducer 多個reducer無法保證全域性有序 只有乙個reducer,會導致當輸入規模較大時,需要較長的計...
Hive 中的四種排序
1 order by 可以指定desc 降序 asc 公升序 order by會對輸入做全域性排序,因此只有乙個reducer 多個reducer無法保證全域性有序 然而只有乙個reducer,會導致當輸入規模較大時,消耗較長的計算時間。create table temperature year i...