MySQL:サブクエリを使用したデータ取得

MySQLサブクエリを使用してデータを取得することがあります。

複雑な仕様のデータベースや複数のテーブルが紐づいていたりなど、サブクエリを使用すると簡単に値を取得できることがあります。

今回はMySQLサブクエリを使用してデータを取得する際の基本的な方法をメモします。


サブクエリ

サブクエリは副問合せとも言います。
SELECTで取得した値を別のSQL文のSELECT句やWHERE句などで使用します。
一つのSQL文の中にもう一つのSELECT文があるイメージです。
サブクエリは()で囲って使用します。

SELECT
 フィールド 
FROM
 テーブル 
WHERE
 フィールド 演算子 (SELECT フィールド FROM テーブル WHERE フィールド 演算子 値)
;

サブクエリの使用方法

userテーブルのtestという名前のidを取得して、
取得したユーザのアイテムデータを取得する場合

DB

・userテーブル

id name
1 hoge
2 test
3 sample

・itemテーブル

id user_id item_name
1 1 りんご
2 2 いちご
3 2 ぶどう
4 1 ぶどう
5 3 りんご

SQL

SELECT * FROM item WHERE user_id = (SELECT id FROM user WHERE name = 'test');

itemテーブルのidが2と3のレコードを取得することができます。


他のテーブルから値を持ってきて、取得した値を条件に使いたい時などに便利です。

MySQL:INSERTで複数行追加する

MySQLでデータをINSERTする方法と複数のレコードを1つのSQLで追加する方法をメモします。


INSERT文の書式

INSERT INTO テーブル (フィールド, フィールド) VALUES (データ, データ);

INSERT文の使用例

「user_table」テーブルに1行データを追加する場合は、
下記のように記載します。

INSERT INTO user_table (id, name, memo, status) VALUES (1, 'test1', 'メモ', 1);

また、フィールドの値を全て指定する場合は、
フィールド名を省略することが可能です。

INSERT INTO user_table VALUES (1, 'test1', 'メモ', 1);

複数行データを追加する場合は下記のように記載します。

INSERT INTO user_table (id, name, memo, status) VALUES (1, 'test1', 'メモ', 1);
INSERT INTO user_table (id, name, memo, status) VALUES (2, 'test2', 'メモ', 1);
INSERT INTO user_table (id, name, memo, status) VALUES (3, 'test3', 'メモ', 1);
INSERT INTO user_table (id, name, memo, status) VALUES (4, 'test4', 'メモ', 1);

複数レコードを1つのSQL文で実行する場合は
下記のようにカンマ区切りで記載します。

INSERT INTO user_table (id, name, memo, status) VALUES 
(1, 'test1', 'メモ', 1),
(2, 'test2', 'メモ', 1),
(3, 'test3', 'メモ', 1),
(4, 'test4', 'メモ', 1);