Teradata-set-operators

提供:Dev Guides
移動先:案内検索

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];

次の従業員表と給与表を考えてください。

EmployeeNo FirstName LastName JoinedDate DepartmentNo BirthDate
101 Mike James 3/27/2005 1 1/5/1980
102 Robert Williams 4/25/2007 2 3/5/1983
103 Peter Paul 3/21/2007 2 4/1/1983
104 Alex Stuart 2/1/2008 2 11/6/1984
105 Robert James 1/4/2008 3 12/1/1984
EmployeeNo Gross Deduction NetPay
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に似ており、重複行を含む複数のテーブルの結果を結合します。

構文

次に、UNION ALLステートメントの基本的な構文を示します。

SELECT col1, col2, col3…
FROM
<table 1>
[WHERE condition]
UNION ALL

SELECT col1, col2, col3…
FROM
<table 2>
[WHERE condition];

以下は、UNION ALLステートメントの例です。

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