給自己留檔,基本是從這個部落格抄來的。
例子:兩個**
表a:id
name1張三
2李四3王五
表b:id
age1202
29430join
內關聯,只返回兩個表中關聯上的結果
select a.id, a.name, b.age from a join b on a.id = b.id
得到結果:
a.id
a.name
b.age1張三
202李四29
left (outer) join
左外關聯,關鍵字outer可省略。以left join關鍵字前面的表作為主表,和其他表進行關聯,返回記錄和主表的記錄數一致,關聯不上的字段置為null。
select a.id, a.name, b.age from a left
join b on a.id = b.id
得到結果:
a.id
a.name
b.age1張三
202李四293王五
null
right (outer) join
右外關聯,關鍵字outer可省略。與left join相反,以right join關鍵字後面的表作為主表,和其他表進行關聯,返回記錄和主表的記錄數一致,關聯不上的字段置為null。
select a.id, a.name, b.age from a right
join b on a.id = b.id
得到結果:
a.id
a.name
b.age1張三
202李四29
null
null
30full (outer) join
全外關聯,關鍵字outer可省略。以兩個表的記錄為基準,返回兩個表的記錄去重之和,關聯不上的字段為null。
select a.id, a.name, b.age from a full
join b on a.id = b.id
得到結果:
a.id
a.name
b.age1張三
202李四293王五
null
null
null
30left semi join
以left semi join關鍵字前面的表為主表,返回主表的key也在副表中的記錄。
select a.name, b.name from a left semi join b on a.id = b.id
得到結果:
a.id
a.name1張三
2李四cross join
笛卡爾積關聯,返回兩個表的笛卡爾積結果,不需要指定關聯鍵。
select a.id, a.name, b.age from a cross
join b
得到結果:
a.id
a.name
b.age1張三
201張三291張三
302李四202李四
292李四303王五
203王五293王五
30
Hive的三種Join方式
reduce join在hive中也叫common join或shuffle join 如果兩邊資料量都很大,它會進行把相同key的value合在一起,正好符合我們在sql中的join,然後再去組合,如圖所示。1 大小表連線 如果一張表的資料很大,另外一張表很少 1000行 那麼我們可以將資料量少的...
Hive的三種Join方式
hive reduce join在hive中也叫common join或shuffle join 如果兩邊資料量都很大,它會進行把相同key的value合在一起,正好符合我們在sql中的join,然後再去組合,如圖所示。1 大小表連線 如果一張表的資料很大,另外一張表很少 1000行 那麼我們可以將...
hive 四種join的區別
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 i...