スカラー全選択
式の中でサポートされるスカラー全選択 は、 単一列の値からなる単一行を戻す、括弧で囲まれた全選択です。 全選択が行を戻さない場合、式の結果は NULL 値になります。 スカラー全選択に対して複数の行が戻される場合は、エラーが発生します。
セット演算子が最外部の全選択の中に無指定であり、かつ、選択リスト・エレメントが単なる列名である式の場合、結果の列名は、その列の名前に基づきます。 そうでない場合、その結果の列には名前が付きません。
最終結果の列値をマスクするように列マスクが定義されている場合、およびスカラー全選択 の選択リスト内の列に列マスクが適用される場合は、セット演算子 EXCEPT または INTERSECT を使用してスカラー全選択 の結果を派生させてはなりません。 カラムアクセス制御がフルセレクトにどのように影響するかについての詳細は、クエリを参照してください。
スカラー全選択は、次の場合には使用できません。
- CREATE TABLE ステートメントおよび ALTER TABLE ステートメント内の CHECK 制約
- ビュー定義に WITH CHECK オプションが含まれる場合の CREATE VIEW ステートメント
- CREATE FUNCTION (SQL) ステートメント (副選択は RETURN 文節の式によって既に制約されている)
- 入力パラメーターの場合に CALL ステートメント内の引数
- 集約関数の引数 (XMLAGG 関数の XML-expression 引数を除く)
- ORDER BY 文節
- GROUP BY 文節
- INNER JOIN および OUTER JOIN の ON 文節の結合条件
スカラー全選択が副選択である場合は、スカラー副選択とも呼ばれます。 詳細はサブセレクトを参照してください。
以下の例で、scalar-fullselect の使用法を示します。 4 つの表 (PARTS、 PRODUCTS、PARTPRICE、および PARTINVENTORY) に製品データが格納されているものとします。
- 例 1 - WHERE 節の scalar-fullselect:
- 最小は全製品の最低価格の 2 倍、最大は全製品の最高価格の半分という範囲に含まれる価格の製品を検索します。
SELECT PRODUCT, PRICE FROM PRODUCTS A WHERE PRICE BETWEEN 2 * (SELECT MIN(PRICE) FROM PRODUCTS) AND .5 * (SELECT MAX(PRICE) FROM PRODUCTS); - 例 2 - SELECT リストの scalar-fullselect:
- それぞれの部品について、価格と在庫を検索します。
SELECT PART, (SELECT PRICE FROM PARTPRICE WHERE PART=A.PART), (SELECT ONHAND# FROM INVENTORY WHERE PART=A.PART) FROM PARTS A;
