hive 四種join的區別

2021-08-30 13:28:46 字數 3925 閱讀 1226

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...