Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのvaluesについてまとめています。

SQLのvaluesは、insert文で挿入する値を指定する

例えば、以下のSQLは、employees(社員テーブル)に、新しくデータを一行挿入するSQLです。

mysql> insert into employees (emp_no, birth_date, first_name, last_name, gender, hire_date) 
values (999999,'2000-01-01', 'Tarou', 'Yamada', 'M','2015-04-01');
Query OK, 1 row affected (0.06 sec)

mysql> select * from employees where emp_no=999999;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
| 999999 | 2000-01-01 | Tarou      | Yamada    | M      | 2015-04-01 |
+--------+------------+------------+-----------+--------+------------+
1 row in set (0.00 sec)

この記述法は、カラムの並びをそのまま記述できるため、以下の様なCSVファイルをSQLに加工してデータベースにinsertする場合に便利です。

10001,1953-09-02,Georgi,Facello,M,1986-06-26
10002,1964-06-02,Bezalel,Simmel,F,1985-11-21
10003,1959-12-03,Parto,Bamford,M,1986-08-28
10004,1954-05-01,Chirstian,Koblick,M,1986-12-01
10005,1955-01-21,Kyoichi,Maliniak,M,1989-09-12
10006,1953-04-20,Anneke,Preusig,F,1989-06-02
10007,1957-05-23,Tzvetan,Zielinski,F,1989-02-10
10008,1958-02-19,Saniya,Kalloufi,M,1994-09-15
10009,1952-04-19,Sumant,Peac,F,1985-02-18
10010,1963-06-01,Duangkaew,Piveteau,F,1989-08-24

上記のCSVファイルをemployeesテーブルへのinsert文に加工するとこうなります。

insert into employees (emp_no, birth_date, first_name, last_name, gender, hire_date)
values
(10001,1953-09-02,Georgi,Facello,M,1986-06-26),
(10002,1964-06-02,Bezalel,Simmel,F,1985-11-21),
(10003,1959-12-03,Parto,Bamford,M,1986-08-28),
(10004,1954-05-01,Chirstian,Koblick,M,1986-12-01),
(10005,1955-01-21,Kyoichi,Maliniak,M,1989-09-12),
(10006,1953-04-20,Anneke,Preusig,F,1989-06-02),
(10007,1957-05-23,Tzvetan,Zielinski,F,1989-02-10),
(10008,1958-02-19,Saniya,Kalloufi,M,1994-09-15),
(10009,1952-04-19,Sumant,Peac,F,1985-02-18),
(10010,1963-06-01,Duangkaew,Piveteau,F,1989-08-24)

【関連記事】
MySQL Insert サンプルコード集 一文で一括挿入する方法とは? 

PostgreSQLでは、valuesを単体のSQLとして使える

PostgreSQLでは、valuesをselect文のように使用することができます。

postgres=# values (1,2,3);
 column1 | column2 | column3 
---------+---------+---------
       1 |       2 |       3
(1 row)

参考)PostgreSQL公式ドキュメント VALUES

列名は自動的に、column1, column2, column3…となります。なお、複数行、複数列を指定することも可能です。下記の例では、列が2つ、行が3つの表を返します。小さな表をSQL内で一時的に生成する場合に便利ですね。

postgres=# VALUES (1, 'one'), (2, 'two'), (3, 'three');
 column1 | column2 
---------+---------
       1 | one
       2 | two
       3 | three
(3 rows)

上記のSQLは、UNIONを使って記述すると、以下のようになります。

postgres=# VALUES (1, 'one'), (2, 'two'), (3, 'three');
 column1 | column2 
---------+---------
       1 | one
       2 | two
       3 | three
(3 rows)

なお、MySQLではvaluesを単体で使おうとするとSyntax Errorとなります。

mysql> values (1,2,3);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(1,2,3)' at line 1

PostgreSQLの公式ドキュメントによると、valuesはSQL標準に従うとありますが、valuesの単体使用についてはデータベース管理ソフト毎に扱いが異なるようです。

【関連記事】
SQLとはどういうもの? 独自拡張と標準SQLの大きな違いって、何?

PostgreSQLでは、valuesをサブクエリのように使ってSQLを記述することも可能です。

SELECT f.*
  FROM films f, (VALUES('MGM', 'Horror'), ('UA', 'Sci-Fi')) AS t (studio, kind)
  WHERE f.studio = t.studio AND f.kind = t.kind;

UPDATE employees SET salary = salary * v.increase
  FROM (VALUES(1, 200000, 1.2), (2, 400000, 1.4)) AS v (depno, target, increase)
  WHERE employees.depno = v.depno AND employees.sales >= v.target;

ただし、FROM内で使用する場合は、as句を使って別名をつけることが必須になります。

まとめ

ポテパンダの一言メモ
  • valuesは、insert文で挿入する値を記述するために使う
  • PostgreSQLでは、valuesを単体でselect文のように使うことが可能
  • values自体は標準SQLだが、単体使用できるかどうかはデータベース管理ソフトごとに異なる

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。