HIVEの6種類のjoinの使い方
4776 ワード
自分にファイルを残すのは、基本的にこのブログから写したものです.
表A:
id
name
1
張三
2
李四
3
王五
表B:
id
age
1
20
2
29
4
30
内部関連付け、2つのテーブルの関連付けの結果のみを返します.
結果:
a.id
a.name
b.age
1
張三
20
2
李四
29
左外関連、キーワードouterは省略できます.left joinキーの前のテーブルをプライマリテーブルとし、他のテーブルと関連付けて、レコードとプライマリテーブルのレコード数が一致し、関連付けられていないフィールドがnullに設定されます.
結果:
a.id
a.name
b.age
1
張三
20
2
李四
29
3
王五
null
右外部関連、キーワードouterは省略できます.left joinとは逆にright joinキーの後ろのテーブルをプライマリテーブルとし、他のテーブルと関連付け、リターンレコードとプライマリテーブルのレコード数が一致し、関連付けられていないフィールドがnullに設定されます.
結果:
a.id
a.name
b.age
1
張三
20
2
李四
29
null
null
30
全外関連、キーワードouterは省略できます.2つのテーブルのレコードを基準に、2つのテーブルのレコードの重さの和を返します.関連付けられないフィールドはnullです.
結果:
a.id
a.name
b.age
1
張三
20
2
李四
29
3
王五
null
null
null
30
left semi joinキーの前のテーブルをメインテーブルとし、メインテーブルを返すKEYもサブテーブルに記録されます.
結果:
a.id
a.name
1
張三
2
李四
デカルト積の関連付けは、2つのテーブルのデカルト積の結果を返します.関連付けキーを指定する必要はありません.
結果:
a.id
a.name
b.age
1
張三
20
1
張三
29
1
張三
30
2
李四
20
2
李四
29
2
李四
30
3
王五
20
3
王五
29
3
王五
30
例:2つのテーブル
表A:
id
name
1
張三
2
李四
3
王五
表B:
id
age
1
20
2
29
4
30
join
内部関連付け、2つのテーブルの関連付けの結果のみを返します.
select a.id, a.name, b.age from a join b on a.id = b.id
結果:
a.id
a.name
b.age
1
張三
20
2
李四
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.age
1
張三
20
2
李四
29
3
王五
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.age
1
張三
20
2
李四
29
null
null
30
full (outer) join
全外関連、キーワードouterは省略できます.2つのテーブルのレコードを基準に、2つのテーブルのレコードの重さの和を返します.関連付けられないフィールドはnullです.
select a.id, a.name, b.age from a full join b on a.id = b.id
結果:
a.id
a.name
b.age
1
張三
20
2
李四
29
3
王五
null
null
null
30
left 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.name
1
張三
2
李四
cross join
デカルト積の関連付けは、2つのテーブルのデカルト積の結果を返します.関連付けキーを指定する必要はありません.
select a.id, a.name, b.age from a cross join b
結果:
a.id
a.name
b.age
1
張三
20
1
張三
29
1
張三
30
2
李四
20
2
李四
29
2
李四
30
3
王五
20
3
王五
29
3
王五
30