MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む
このページは機械翻訳したものです。
VALUES
は、MySQL 8.0.19 で導入された DML ステートメントで、1 つ以上の行のセットをテーブルとして返します。 つまり、スタンドアロン SQL ステートメントとしても機能するテーブル値コンストラクタです。
VALUESrow_constructor_list
[ORDER BYcolumn_designator
] [LIMIT BYnumber
]row_constructor_list
: ROW(value_list
)[, ROW(value_list
)][, ...]value_list
:value
[,value
][, ...]column_designator
: column_index
VALUES
ステートメントは、VALUES
キーワードと、カンマで区切られた 1 つ以上の行コンストラクタのリストで構成されます。 行コンストラクタは、カッコで囲まれた 1 つ以上のスカラー値の値リストを持つ ROW()
行コンストラクタ句で構成されます。 値には、任意の MySQL データ型のリテラルまたはスカラー値に解決される式を使用できます。
ROW()
は空にできません (ただし、指定された各スカラー値を NULL
にすることはできます)。 同じ VALUES
ステートメントの各 ROW()
の値リストには、同じ数の値が含まれている必要があります。
DEFAULT
キーワードは VALUES
でサポートされていないため、INSERT
ステートメントで値を指定するために使用される場合を除き、構文エラーが発生します。
VALUES
の出力はテーブルです:
mysql> VALUES ROW(1,-2,3), ROW(5,7,9), ROW(4,6,8);
+----------+----------+----------+
| column_0 | column_1 | column_2 |
+----------+----------+----------+
| 1 | -2 | 3 |
| 5 | 7 | 9 |
| 4 | 6 | 8 |
+----------+----------+----------+
3 rows in set (0.00 sec)
VALUES
からのテーブル出力のカラムには暗黙的に名前が付けられたカラム column_0
, column_1
, column_2
などがあり、常に 0
で始まります。 このファクトを使用すると、次に示すように、SELECT
ステートメントと同じ方法で、オプションの ORDER BY
句を使用してカラムごとに行を並べ替えることができます:
mysql> VALUES ROW(1,-2,3), ROW(5,7,9), ROW(4,6,8) ORDER BY column_1;
+----------+----------+----------+
| column_0 | column_1 | column_2 |
+----------+----------+----------+
| 1 | -2 | 3 |
| 4 | 6 | 8 |
| 5 | 7 | 9 |
+----------+----------+----------+
3 rows in set (0.00 sec)
VALUES
ステートメントでは、出力の行数を制限するための LIMIT
句もサポートされています。
VALUES
ステートメントは、カラム値のデータ型に関して許可されます。次に示すように、同じカラム内で型を混在させることができます:
mysql>VALUES ROW("q", 42, '2019-12-18'),
->ROW(23, "abc", 98.6),
->ROW(27.0002, "Mary Smith", '{"a": 10, "b": 25}');
+----------+------------+--------------------+ | column_0 | column_1 | column_2 | +----------+------------+--------------------+ | q | 42 | 2019-12-18 | | 23 | abc | 98.6 | | 27.0002 | Mary Smith | {"a": 10, "b": 25} | +----------+------------+--------------------+ 3 rows in set (0.00 sec)
ROW()
の 1 つ以上のインスタンスを持つ VALUES
は、テーブル値コンストラクタとして機能します。INSERT
ステートメントまたは REPLACE
ステートメントで値を指定するために使用できますが、この目的でも使用される VALUES
キーワードと混同しないでください。 また、INSERT ... ON DUPLICATE KEY UPDATE
のカラム値を参照する VALUES()
関数と混同しないでください。
ROW()
は行値コンストラクタであることにも注意する必要があります (セクション13.2.11.5「行サブクエリー」 を参照してくださいが、VALUES ROW()
はテーブル値コンストラクタであり、両者を同じ意味で使用することはできません)。
VALUES
は、ここにリストされているものを含め、SELECT
を使用できる多くの場合に使用できます:
次に示すように、UNION
を使用します:
mysql>SELECT 1,2 UNION SELECT 10,15;
+----+----+ | 1 | 2 | +----+----+ | 1 | 2 | | 10 | 15 | +----+----+ 2 rows in set (0.00 sec) mysql>VALUES ROW(1,2) UNION VALUES ROW(10,15);
+----------+----------+ | column_0 | column_1 | +----------+----------+ | 1 | 2 | | 10 | 15 | +----------+----------+ 2 rows in set (0.00 sec)
この方法では、次のように、複数の行を持つ構築されたテーブルを結合することもできます:
mysql>VALUES ROW(1,2), ROW(3,4), ROW(5,6)
>UNION VALUES ROW(10,15),ROW(20,25);
+----------+----------+ | column_0 | column_1 | +----------+----------+ | 1 | 2 | | 3 | 4 | | 5 | 6 | | 10 | 15 | | 20 | 25 | +----------+----------+ 5 rows in set (0.00 sec)
このような場合は、UNION
を完全に省略して、次のような単一の VALUES
ステートメントを使用することもできます (通常はこれをお薦めします):
mysql> VALUES ROW(1,2), ROW(3,4), ROW(5,6), ROW(10,15), ROW(20,25);
+----------+----------+
| column_0 | column_1 |
+----------+----------+
| 1 | 2 |
| 3 | 4 |
| 5 | 6 |
| 10 | 15 |
| 20 | 25 |
+----------+----------+
VALUES
は、SELECT
ステートメントまたは TABLE
ステートメント (あるいはその両方) と組み合せて使用することもできます。
UNION
の構成されたテーブルには、SELECT
を使用している場合と同様に、同じ数のカラムが含まれている必要があります。 その他の例については、セクション13.2.10.3「UNION 句」 を参照してください。
結合内。 詳細および例については、セクション13.2.10.2「JOIN 句」を参照してください。
INSERT
ステートメントまたは REPLACE
ステートメントでの VALUES()
のかわりに、そのセマンティクスはここで説明するものと多少異なります。 詳細は、セクション13.2.6「INSERT ステートメント」,を参照してください。
CREATE TABLE ... SELECT
および CREATE VIEW ... SELECT
のソーステーブルのかわり。 詳細および例については、これらのステートメントの説明を参照してください。