[+/-]
サブクエリは、別のステートメントに含まれた
SELECT
ステートメントです。
次に例を示します。
SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
上の例で、 SELECT * FROM t1 ...
は外側のクエリ(または外側のステートメント)であり、(SELECT
column1 FROM t2)
はサブクエリです。
いわば、サブクエリは外側のクエリ内にネストされていることになります。実際のところ、サブクエリ内にさらにサブクエリをネストし、クエリを何重にも入れ子化することができます。
サブクエリは必ずかっこで囲む必要があります。
MySQL バージョン 4.1 以降では、標準 SQL で規定されているサブクエリのすべての形式と操作に加え、MySQL 固有のいくつかの機能をサポートしています。サブクエリを使用する主な利点は次のとおりです。
クエリの各部分が互いに分離されるように、クエリを記述することができる。
複雑な結合や集合処理を必要とする操作を、それらの処理を行わずに実行できる。
(多くの人々の意見として)判読しやすい。
事実、初期の SQL
が
``構造化問い合わせ言語''
と呼ばれるようになったきっかけは、サブクエリにある。
バージョン 4.0 より前の MySQL では、サブクエリの使用を避けたり、その使用に対処する必要がありましたが、これからコードを書き始める人々は、サブクエリがツールキットの非常に便利な要素であることがわかるはずです。
次のステートメント例は、標準 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)));
4.1 より前のバージョンの MySQL については、結合などの方法によって、ほとんどのサブクエリを記述し直すことができます。 See 項6.4.2.11. 「初期の MySQL バージョンに合わせたサブクエリの書き換え」。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.