MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む
このページは機械翻訳したものです。
parenthesized_query_expression
: (query_expression
[order_by_clause
] [limit_clause
] ) [order_by_clause
] [limit_clause
] [into_clause
]query_expression
:query_block
[UNIONquery_block
[UNIONquery_block
...]] [order_by_clause
] [limit_clause
] [into_clause
]query_block
: SELECT ... (see セクション13.2.10「SELECT ステートメント」)order_by_clause
: ORDER BY as for SELECT (see セクション13.2.10「SELECT ステートメント」)limit_clause
: LIMIT as for SELECT (see セクション13.2.10「SELECT ステートメント」)into_clause
: INTO as for SELECT (see セクション13.2.10「SELECT ステートメント」)
MySQL 8.0.22 以上では、前述の構文に従ってカッコで囲まれたクエリー式がサポートされます。 最も単純なのは、カッコで囲まれたクエリー式に単一の SELECT
が含まれ、次のオプション句は含まれないことです:
(SELECT 1); (SELECT * FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'mysql');
カッコで囲まれたクエリー式には、複数の SELECT
ステートメントで構成される UNION
を含めることもでき、オプションの句の一部またはすべてで終わることができます:
mysql>(SELECT 1 AS result UNION SELECT 2);
+--------+ | result | +--------+ | 1 | | 2 | +--------+ mysql>(SELECT 1 AS result UNION SELECT 2) LIMIT 1;
+--------+ | result | +--------+ | 1 | +--------+ mysql>(SELECT 1 AS result UNION SELECT 2) LIMIT 1 OFFSET 1;
+--------+ | result | +--------+ | 2 | +--------+ mysql>(SELECT 1 AS result UNION SELECT 2)
ORDER BY result DESC LIMIT 1;
+--------+ | result | +--------+ | 2 | +--------+ mysql>(SELECT 1 AS result UNION SELECT 2)
ORDER BY result DESC LIMIT 1 OFFSET 1;
+--------+ | result | +--------+ | 1 | +--------+ mysql>(SELECT 1 AS result UNION SELECT 3 UNION SELECT 2)
ORDER BY result LIMIT 1 OFFSET 1 INTO @var;
mysql>SELECT @var;
+------+ | @var | +------+ | 2 | +------+
カッコで囲まれたクエリー式はクエリー式としても使用されるため、クエリー式は通常、クエリーブロックで構成され、カッコで囲まれたクエリー式で構成されることもあります:
(SELECT * FROM t1 ORDER BY a) UNION (SELECT * FROM t2 ORDER BY b) ORDER BY z;
クエリーブロックには、外部の UNION
および ORDER BY
と LIMIT
の前に適用される後続の ORDER BY
句および LIMIT
句がある場合があります。
末尾に ORDER BY
または LIMIT
を含むクエリーブロックをカッコで囲まずに含めることはできませんが、カッコは様々な方法で強制に使用できます:
各クエリーブロックに LIMIT
を適用するには:
(SELECT 1 LIMIT 1) UNION (SELECT 2 LIMIT 1);
クエリーブロックとクエリー式全体の両方に LIMIT
を適用するには:
(SELECT 1 LIMIT 1) UNION (SELECT 2 LIMIT 1) LIMIT 1;
クエリー式全体に LIMIT
を適用するには (カッコなし):
SELECT 1 UNION SELECT 2 LIMIT 1;
ハイブリッド強制: 最初のクエリーブロックおよびクエリー式全体に対する LIMIT
:
(SELECT 1 LIMIT 1) UNION SELECT 2 LIMIT 1;
このセクションで説明する構文には、特定の制限事項があります:
ORDER BY
がカッコで囲まれたクエリー式内で発生し、外部クエリーにも適用される場合、結果は未定義であり、将来のバージョンの MySQL で変更される可能性があります。 LIMIT
がカッコで囲まれたクエリー式内に出現し、外部クエリーにも適用される場合も同様です。
クエリー式の末尾の INTO
句は、カッコ内に別の INTO
句がある場合は使用できません。
カッコで囲まれたクエリー式では、複数レベルの ORDER BY
または LIMIT
操作は許可されません。 例:
mysql> (SELECT 'a' UNION SELECT 'b' LIMIT 1) LIMIT 2;
ERROR 1235 (42000): This version of MySQL doesn't yet support 'parenthesized
query expression with more than one external level of ORDER/LIMIT operations'