MySQL 5.1 リファレンスマニュアル :: 12 SQL ステートメント構文 :: 12.2 データ取り扱いステートメント :: 12.2.8 サブクエリ構文
« 12.2.7.2 UNION 構文

12.2.8.1 スカラ演算子としてのサブクエリ »
Section Navigation      [Toggle]
  • 12.2 データ取り扱いステートメント
  • 12.2.1 DELETE 構文
  • 12.2.2 DO 構文
  • 12.2.3 HANDLER 構文
  • 12.2.4 INSERT 構文
  • 12.2.5 LOAD DATA INFILE 構文
  • 12.2.6 REPLACE 構文
  • 12.2.7 SELECT 構文
  • 12.2.8 サブクエリ構文
    • 12.2.8.1 スカラ演算子としてのサブクエリ
    • 12.2.8.2 サブクエリを利用した比較
    • 12.2.8.3 ANY、IN、そして SOME を持つサブクエリ
    • 12.2.8.4 ALL を持つサブクエリ
    • 12.2.8.5 行サブクエリ
    • 12.2.8.6 EXISTS と NOT EXISTS
    • 12.2.8.7 相関サブクエリ
    • 12.2.8.8 FROM 条項内のサブクエリ
    • 12.2.8.9 サブクエリ エラー
    • 12.2.8.10 最適化サブクエリ
    • 12.2.8.11 MySQL 初期バージョンにおいて、サブクエリの接合としての書き換え
  • 12.2.9 TRUNCATE 構文
  • 12.2.10 UPDATE 構文

12.2.8. サブクエリ構文

[+/-]

12.2.8.1. スカラ演算子としてのサブクエリ
12.2.8.2. サブクエリを利用した比較
12.2.8.3. ANY、IN、そして SOME を持つサブクエリ
12.2.8.4. ALL を持つサブクエリ
12.2.8.5. 行サブクエリ
12.2.8.6. EXISTS と NOT EXISTS
12.2.8.7. 相関サブクエリ
12.2.8.8. FROM 条項内のサブクエリ
12.2.8.9. サブクエリ エラー
12.2.8.10. 最適化サブクエリ
12.2.8.11. MySQL 初期バージョンにおいて、サブクエリの接合としての書き換え

サブクエリは、別のステートメント内の SELECT ステートメントです。

MySQL 4.1 から、MySQL 特有のいくつかの特徴と同様に、SQL スタンダードが要求する全てのサブクエリ型と演算子がサポートされています。

ここに、同じようなサブクエリの例があります。

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

この例の中では、SELECT * FROM t1 ... は 外部クエリ (または 外部ステートメント)であり、(SELECT column1 FROM t2) は サブクエリ です。これは、サブクエリが外部クエリ内で ネスト化された という事であり、実際、サブクエリを別のサブクエリ内で、相当な深さまでネスト化する事が可能です。サブクエリは必ずカッコ内に表示されなければいけません。

サブクエリの主な利点は次のような物になります。

  • それらは、ステートメントのそれぞれの部分を分離させる事ができるように、構造化された クエリを許容します。

  • それらは、複雑な接合や合併を要求されないように、演算を行う為の代替法を提供します。

  • 多くの人の意見によると、それらは複雑な接合や合併と比べると、読み込みやすいという事です。実際これは、初期 SQL の 「Structured Query Language.」 の創案を人々に与えたサブクエリの発明でした。

ここに、SQL スタンダードによって指定され、MySQL 内でサポートされているサブクエリ構文に関する主なポイントを説明するステートメントの例があります。

DELETE FROM t1
WHERE s11 > ANY
(SELECT COUNT(*) /* no hint */ FROM t2
WHERE NOT EXISTS
(SELECT * FROM t3
WHERE ROW(5*t2.s1,77)=
(SELECT 50,11*s1 FROM t4 UNION SELECT 50,77 FROM
(SELECT * FROM t5) AS t5)));

サブクエリは、スカラ(単一値)、単一行、単一カラム、またはテーブル(1つ、または複数カラムの、1つ、または複数行) を返す事ができます。これらはスカラ、カラム、行、そしてテーブル サブクエリと呼ばれます。次のセクションで説明されているように、頻繁に特定の種類の結果を返すサブクエリは、特定のコンテキストの中だけで利用する事ができます。

サブクエリを利用する事ができるステートメントのタイプには、いくつかの制限があります。サブクエリは、普通の SELECT が含む事のできるキーワードや条項を全て含む事ができます。それは DISTINCT、GROUP BY、ORDER BY、LIMIT、接合、インデックスヒント、UNION 構成、コメント、関数などです。

制限の1つは、サブクエリの外部ステートメントが SELECT、INSERT、UPDATE、DELETE、SET、または DO のうちのどれか1つでなければいけないという事です。その他の制限は、現在はサブクエリの中でテーブルを変更したり、同じテーブルから選択する事ができないという事です。これは、DELETE、INSERT、REPLACE、UPDATE、そして(サブクエリは SET 条項内で利用できる為) LOAD DATA INFILE のようなステートメントに適応します。

サブクエリ構文の特定型に関する性能問題を含む、サブクエリ利用に関する制限のさらなる総合的な説明に関しては、 項D.3. 「サブクエリの規制」 で紹介されています。

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates