セット演算子
説明
セット演算子は、2つの入力リレーションを1つのリレーションに結合するために使用されます。Spark SQLは3種類のセット演算子をサポートしています。
EXCEPTまたはMINUSINTERSECTUNION
入力リレーションは、列の数が同じであり、対応する列のデータ型が互換性がある必要があります。
EXCEPT
EXCEPT および EXCEPT ALL は、一方のリレーションには存在するが、もう一方のリレーションには存在しない行を返します。EXCEPT(または EXCEPT DISTINCT)は重複しない行のみを取得しますが、EXCEPT ALL は結果行から重複を削除しません。MINUS は EXCEPT のエイリアスです。
構文
[ ( ] relation [ ) ] EXCEPT | MINUS [ ALL | DISTINCT ] [ ( ] relation [ ) ]
例
-- Use number1 and number2 tables to demonstrate set operators in this page.
SELECT * FROM number1;
+---+
| c|
+---+
| 3|
| 1|
| 2|
| 2|
| 3|
| 4|
+---+
SELECT * FROM number2;
+---+
| c|
+---+
| 5|
| 1|
| 2|
| 2|
+---+
SELECT c FROM number1 EXCEPT SELECT c FROM number2;
+---+
| c|
+---+
| 3|
| 4|
+---+
SELECT c FROM number1 MINUS SELECT c FROM number2;
+---+
| c|
+---+
| 3|
| 4|
+---+
SELECT c FROM number1 EXCEPT ALL (SELECT c FROM number2);
+---+
| c|
+---+
| 3|
| 3|
| 4|
+---+
SELECT c FROM number1 MINUS ALL (SELECT c FROM number2);
+---+
| c|
+---+
| 3|
| 3|
| 4|
+---+
INTERSECT
INTERSECT および INTERSECT ALL は、両方のリレーションに存在する行を返します。INTERSECT(または INTERSECT DISTINCT)は重複しない行のみを取得しますが、INTERSECT ALL は結果行から重複を削除しません。
構文
[ ( ] relation [ ) ] INTERSECT [ ALL | DISTINCT ] [ ( ] relation [ ) ]
例
(SELECT c FROM number1) INTERSECT (SELECT c FROM number2);
+---+
| c|
+---+
| 1|
| 2|
+---+
(SELECT c FROM number1) INTERSECT DISTINCT (SELECT c FROM number2);
+---+
| c|
+---+
| 1|
| 2|
+---+
(SELECT c FROM number1) INTERSECT ALL (SELECT c FROM number2);
+---+
| c|
+---+
| 1|
| 2|
| 2|
+---+
UNION
UNION および UNION ALL は、どちらかのリレーションに存在する行を返します。UNION(または UNION DISTINCT)は重複しない行のみを取得しますが、UNION ALL は結果行から重複を削除しません。
構文
[ ( ] relation [ ) ] UNION [ ALL | DISTINCT ] [ ( ] relation [ ) ]
例
(SELECT c FROM number1) UNION (SELECT c FROM number2);
+---+
| c|
+---+
| 1|
| 3|
| 5|
| 4|
| 2|
+---+
(SELECT c FROM number1) UNION DISTINCT (SELECT c FROM number2);
+---+
| c|
+---+
| 1|
| 3|
| 5|
| 4|
| 2|
+---+
SELECT c FROM number1 UNION ALL (SELECT c FROM number2);
+---+
| c|
+---+
| 3|
| 1|
| 2|
| 2|
| 3|
| 4|
| 5|
| 1|
| 2|
| 2|
+---+