Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » データのクエリと変更 » サブクエリの使用 » サブクエリのテスト

 

サブクエリと IN テスト

サブクエリ・セット・メンバシップ・テストを使用して、メイン・クエリからの値をサブクエリの複数の値と比較できます。

サブクエリ・セット・メンバシップ・テストは、メイン・クエリの各ローの 1 つのデータ値を、サブクエリが生成したデータ値の 1 つのカラムと比較します。メイン・クエリのデータ値がカラムのデータ値のいずれかと一致する場合、サブクエリは TRUE を返します。

Shipping 部または Finance 部の部長である従業員の名前を選択します。

SELECT GivenName, Surname
FROM Employees
WHERE EmployeeID IN (
   SELECT DepartmentHeadID
   FROM Departments
   WHERE ( DepartmentName='Finance' OR 
          DepartmentName = 'Shipping' ) );
GivenName Surname
Mary Anne Shea
Jose Martinez

この例のサブクエリは、Shipping 部と Finance 部の部長に対応する ID 番号を、Departments テーブルから抽出します。次にメイン・クエリが、サブクエリによって検索された 2 つの値のいずれかに一致する ID 番号を持つ従業員の名前を返します。

SELECT DepartmentHeadID
FROM Departments
WHERE ( DepartmentName='Finance' OR 
       DepartmentName = 'Shipping' );
セット・メンバシップ・テストは =ANY テストと同等

サブクエリ・セット・メンバシップ・テストは =ANY テストと同等です。次のクエリは前述の例のクエリと同等です。

SELECT GivenName, Surname
FROM Employees
WHERE EmployeeID = ANY (
   SELECT DepartmentHeadID
   FROM Departments
   WHERE ( DepartmentName='Finance' OR 
          DepartmentName = 'Shipping' ) );
セット・メンバシップ・テストの否定

サブクエリ・セット・メンバシップ・テストは、サブクエリによって生成される値に一致しないカラム値を持つローを抽出する場合にも使用できます。セット・メンバシップ・テストを否定するには、キーワード IN の前に NOT を挿入します。

このクエリのサブクエリは、Finance 部または Shipping 部の部長でない従業員の姓と名前を返します。

SELECT GivenName, Surname
FROM Employees
WHERE EmployeeID NOT IN (
   SELECT DepartmentHeadID
   FROM Departments
   WHERE ( DepartmentName='Finance' OR 
          DepartmentName = 'Shipping' ) );