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 
   105UNION 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