最も単純な形式(スカラ副問い合わせ)では、サブクエリは単純なオペランドです(スカラ副問い合わせと対立するものとして行またはテーブル副問い合わせがあります。これらについては後述します)。したがって、サブクエリは、正しいカラム値やリテラルが使用されているところならどこでも使用でき、また、他のすべてのオペランドと同じように、データ型、長さ、値が
NULL
になる場合があるかどうかの区別などの特性を持ちます。
次に例を示します。
CREATE TABLE t1 (s1 INT, s2 CHAR(5) NOT NULL); SELECT (SELECT s2 FROM t1);
上の SELECT
内のサブクエリのデータ型は
CHAR
で、長さは 5
です。また、CREATE TABLE
時において有効なデフォルトのキャラクタセットと照合順序を持っており、カラム値が
NULL
の場合があることが示されています。事実、ほぼすべてのサブクエリは
NULL
になる場合があります。これは、例にあるようにテーブルが空の場合、サブクエリの値が
NULL
になるためです。
次に示す、わずかな制約があります。
サブクエリの外側のステートメントとしては、SELECT
、INSERT
、UPDATE
、DELETE
、SET
、DO
のいずれかを使用できる。
サブクエリには、通常の
SELECT
に組み込める任意のキーワードまたは節(DISTINCT
、GROUP
BY
、ORDER
BY
、LIMIT
、結合、ヒント、UNION
構造、コメント、関数など)を組み込める。
そのため、以降のセクションでは、どちらかというと簡素な構造
(SELECT column1 FROM t1)
を含む例を示していますが、実際のコードにはもっと多様で複雑な構造が含まれると想像してください。
たとえば、次のように 2 つのテーブルを作るとします。
CREATE TABLE t1 (s1 INT); INSERT INTO t1 VALUES (1); CREATE TABLE t2 (s1 INT); INSERT INTO t2 VALUES (2);
その後、SELECT
を実行します。
SELECT (SELECT s1 FROM t2) FROM t1;
結果は 2
になります。なぜなら、t2
には、カラム s1
を持つレコードがあり、s1
の値は 2 であるためです。
サブクエリは式の一部にすることができます。関数のオペランドにするときは、かっこを忘れないでください。 次に例を示します。
SELECT UPPER((SELECT s1 FROM t1)) FROM t2;
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.