Teradata-SET演算子
SET演算子は、複数のSELECTステートメントの結果を結合します。これは結合に似ているように見えますが、結合は複数のテーブルの列を結合しますが、SET演算子は複数の行の行を結合します。
ルール
各SELECTステートメントの列数は同じである必要があります。
各SELECTのデータ型は互換性がある必要があります。
ORDER BYは、最後のSELECTステートメントにのみ含める必要があります。
連合
UNIONステートメントは、複数のSELECTステートメントの結果を組み合わせるために使用されます。重複は無視されます。
構文
以下は、UNIONステートメントの基本的な構文です。
SELECT col1, col2, col3…
FROM
<table 1>
[WHERE condition]
UNION
SELECT col1, col2, col3…
FROM
<table 2>
[WHERE condition];
例
次の従業員テーブルと給与テーブルについて考えてみます。
従業員番号 | ファーストネーム | 苗字 | JoinedDate | 部門番号 | 誕生日 |
---|---|---|---|---|---|
101 | マイク | ジェームズ | 2005年3月27日 | 1 | 1980年1月5日 |
102 | ロバート | ウィリアムズ | 2007年4月25日 | 2 | 1983年3月5日 |
103 | ピーター | ポール | 2007年3月21日 | 2 | 1983年4月1日 |
104 | アレックス | スチュアート | 2008年2月1日 | 2 | 1984年11月6日 |
105 | ロバート | ジェームズ | 2008年1月4日 | 3 | 1984年12月1日 |
従業員番号 | キモい | 控除 | 給料 |
---|---|---|---|
101 | 40,000 | 4,000 | 36,000 |
102 | 80,000 | 6,000 | 74,000 |
103 | 90,000 | 7,000 | 83,000 |
104 | 75,000 | 5,000 | 70,000 |
次のUNIONクエリは、EmployeeテーブルとSalaryテーブルの両方のEmployeeNo値を組み合わせたものです。
SELECT EmployeeNo
FROM
Employee
UNION
SELECT EmployeeNo
FROM
Salary;
クエリを実行すると、次の出力が生成されます。
EmployeeNo
-----------
101
102
103
104
105
UNION ALL
UNION ALLステートメントはUNIONに似ており、重複行を含む複数のテーブルからの結果を結合します。
構文
以下は、UNIONALLステートメントの基本的な構文です。
SELECT col1, col2, col3…
FROM
<table 1>
[WHERE condition]
UNION ALL
SELECT col1, col2, col3…
FROM
<table 2>
[WHERE condition];
例
以下は、UNIONALLステートメントの例です。
SELECT EmployeeNo
FROM
Employee
UNION ALL
SELECT EmployeeNo
FROM
Salary;
上記のクエリを実行すると、次の出力が生成されます。重複も返されることがわかります。
EmployeeNo
-----------
101
104
102
105
103
101
104
102
103
交差する
INTERSECTコマンドは、複数のSELECTステートメントの結果を組み合わせるためにも使用されます。これは、2番目のSELECTステートメントで対応する一致がある最初のSELECTステートメントからの行を返します。つまり、両方のSELECTステートメントに存在する行を返します。
構文
以下は、INTERSECTステートメントの基本的な構文です。
SELECT col1, col2, col3…
FROM
<table 1>
[WHERE condition]
INTERSECT
SELECT col1, col2, col3…
FROM
<table 2>
[WHERE condition];
例
以下は、INTERSECTステートメントの例です。両方のテーブルに存在するEmployeeNo値を返します。
SELECT EmployeeNo
FROM
Employee
INTERSECT
SELECT EmployeeNo
FROM
Salary;
上記のクエリを実行すると、次のレコードが返されます。EmployeeNo 105は、SALARYテーブルに存在しないため、除外されています。
EmployeeNo
-----------
101
104
102
103
マイナス/除く
MINUS / EXCEPTコマンドは、複数のテーブルの行を結合し、最初のSELECTにはあるが、2番目のSELECTにはない行を返します。どちらも同じ結果を返します。
構文
以下は、MINUSステートメントの基本的な構文です。
SELECT col1, col2, col3…
FROM
<table 1>
[WHERE condition]
MINUS
SELECT col1, col2, col3…
FROM
<table 2>
[WHERE condition];
例
以下は、MINUSステートメントの例です。
SELECT EmployeeNo
FROM
Employee
MINUS
SELECT EmployeeNo
FROM
Salary;
このクエリを実行すると、次のレコードが返されます。
EmployeeNo
-----------
105