Documentation Home
MySQL 8.0 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 36.1Mb
PDF (A4) - 36.2Mb


このページは機械翻訳したものです。

13.2.10.4 カッコで囲まれたクエリー式

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 BYLIMIT の前に適用される後続の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 'parenthesizedquery expression with more than one external level of ORDER/LIMIT operations'