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 のソーステーブルのかわり。 詳細および例については、これらのステートメントの説明を参照してください。