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