簡単に言うと、サブクエリは単一値を戻すスカラ
サブクエリという事になります。スカラ
サブクエリは単純な演算子で、単一カラム値や直定数が正当であればほとんどどこでも利用する事ができ、データ
タイプ、長さ、 NULL
になり得るかどうかという指示など、全ての演算子が持つ特徴も全て持っています。ここにその例があります。
CREATE TABLE t1 (s1 INT, s2 CHAR(5) NOT NULL); INSERT INTO t1 VALUES(100, 'abcde'); SELECT (SELECT s2 FROM t1);
この SELECT
内のサブクエリは、CHAR
のデータ
タイプを持ち、長さが5で、CREATE
TABLE
時にデフォルトと同等の文字セットと照合が実施されており、そしてカラム内の値が
NULL
になり得るという指示を持つ単一値('abcde'
)を返します。実際は、ほとんどのサブクエリが
NULL
になり得ます。もし例で使用されたテーブルが空であれば、サブクエリの値は
NULL
になるでしょう。
スカラ
サブクエリを利用できないコンテキストがいくつかあります。もしステートメントが直定数値だけを許容するなら、サブクエリを利用する事はできません。例えば、LIMIT
が直定整数引数を要求し、LOAD DATA
INFILE
が直定数文字列ファイル名を要求します。これらの値を供給するのにサブクエリを利用する事はできません。
次のセクションにある、より質素な構造を含む
(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
の値を持つカラム
s1
を含む行が t2
にあるので、その結果は 2
となります。
スカラ サブクエリは式の一部になり得ますが、もしそのサブクエリが関数に引数を与える演算子だとしても、括弧を忘れないでください。 例:
SELECT UPPER((SELECT s1 FROM t1)) FROM t2;