このページは機械翻訳したものです。
VALUES
は、MySQL 8.0.19 で導入された DML ステートメントで、1 つ以上の行のセットをテーブルとして返します。 つまり、スタンドアロン SQL ステートメントとしても機能するテーブル値コンストラクタです。
Press CTRL+C to copyVALUES row_constructor_list [ORDER BY column_designator] [LIMIT BY number] 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
の出力はテーブルです:
Press CTRL+C to copymysql> 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
句を使用してカラムごとに行を並べ替えることができます:
Press CTRL+C to copymysql> 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
ステートメントは、カラム値のデータ型に関して許可されます。次に示すように、同じカラム内で型を混在させることができます:
Press CTRL+C to copymysql> 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
を使用します:Press CTRL+C to copymysql> 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)
この方法では、次のように、複数の行を持つ構築されたテーブルを結合することもできます:
Press CTRL+C to copymysql> 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
ステートメントを使用することもできます (通常はこれをお薦めします):Press CTRL+C to copymysql> 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
のソーステーブルのかわり。 詳細および例については、これらのステートメントの説明を参照してください。