0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

今更ながらVALUESについて理解を深めてみる

0
Last updated at Posted at 2026-04-05

はじめに

SQLのVALUES概念と疑問.png

SQLを業務で使用し始めて数か月。。
日々の開発の中で SELECT や INSERT を使う機会は増えてきましたが、
その中でふと「VALUESってちゃんと理解できているのか?」と疑問に思いました。

これまで VALUES
「INSERTするときに書くもの」くらいの認識で使っていましたが、
調べてみると 単なる値の指定ではなく、“行(データ)を作る役割”がある ことが分かりました。

「なんとなく使っているけど、ちゃんと理解したい」という方の参考になれば嬉しいです。

VALUESとは何か

SQLの INSERT 文は、テーブルに 新しいレコード(行) を追加するときに使用され、フィールドに挿入するデータ値を指定するものです。

構文

INSERT INTO テーブル名 (カラム1, カラム2, ..., カラムN)
VALUES (1, 2, ..., N);
  • カラム1, カラム2 ... … 追加する 列の名前
  • 値1, 値2 ... … その列に追加する
  • VALUES は 「これから追加する値のリストです」という意味です

実例

1.シンプル

  • users テーブルに「Taro / 20」という1行のデータを追加
INSERT INTO users (name, age)
VALUES ('Taro', 20);
  • カンマで区切ることで、複数行を一度に追加
INSERT INTO users (name, age)
VALUES ('Taro', 20),('Hanako', 25),('Jiro', 30);

2.カラムを省略するパターン

-- 省略ver
INSERT INTO users
VALUES ('Taro', 20);

-- 省略前ver
INSERT INTO users (name, age)
VALUES ('Taro', 20);

⚠️注意

  • テーブルのカラム順と完全一致が必要になる

3. NULLと空文字の違い

  • NULL:値が存在しない
INSERT INTO users (name, address)
VALUES ('Taro', NULL);
  • 空文字=値はある
INSERT INTO users (name, address)
VALUES ('Taro', '');

VALUESにもう少し踏み込んでみる

初めの頃は単純に

VALUES = 値を入れるもの

だけで理解していましたが、本質的には

「行(レコード)を作る構文」

どういうことかというと

VALUES (1, 'A'), (2, 'B');

これは 「2行のテーブル」 を作っています

疑問:MYsqlとPostgreSQLで動作が違うのか?

「VALUES SQL」で検索するとMySQLとPostgreSQLで異なっている、というような検索結果を目にしました

内容をよくよく見て、理解できた部分をまとめます


1.共通点

どちらも以下は同じように扱うことができます

INSERT INTO users (name, age)
VALUES ('Taro', 20);
  • VALUES = 挿入する値
  • カラム順に対応

2.PostgreSQLの特徴

PostgreSQLでは VALUES を単体で使えます

VALUES (1, 'A'), (2, 'B');


-- 結果
column1 | column2
--------+--------
1       | A
2       | B

さらに次のような形で扱うことも可能

SELECT *
FROM (VALUES (1, 'A'), (2, 'B')) AS t(id, name);

-- 結果
 id | name
----+------
  1 | A
  2 | B

🌱MySQLで同じ結果を得たい時はSELECT ... UNIONを使うことになります

SELECT 1 AS id, 'A' AS name
UNION ALL
SELECT 2, 'B';

3.MySQLの特徴(8.0以降)

VALUES ROW(1, 'A'), ROW(2, 'B');

-- 結果
column1 | column2
--------+--------
1       | A
2       | B
  • ROW() が必要
  • PostgreSQLほど柔軟ではない

終わりに

今回は、SQLの VALUES について整理してみました。

これまで何気なく使っていた VALUES ですが、単なる「値の指定」ではなく、行(レコード)を作る役割を持つ構文であることが分かりました。

また、MySQLとPostgreSQLで使い方に違いはあるものの、基本となる考え方は共通しています。
まずは「1行のデータを作る」という本質を押さえておくことが大切だと感じました。

今後は、単に書けるだけでなく、「なぜこう書くのか」を意識しながらSQLを使っていきたいと思います。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?