
【初心者用】SQL サブクエリについてまとめてみた
公開日: 2022/6/16
更新日: 2022/6/16
SQLのサブクエリ(副問い合わせ)について今回色々操作をしていく。
サブクエリを活用できることで、SQLの活用の幅が広がり、複雑なクエリを記述することができるため、少しずつ慣れていこう。
SQLの幅問い合わせ(サブクエリ)とは? 概要・種類・使い方を解説
https://hironimo.com/prog/sql/subquery/
SQLServer 副問い合わせ
サブクエリを活用できることで、SQLの活用の幅が広がり、複雑なクエリを記述することができるため、少しずつ慣れていこう。
参考サイト
https://style.potepan.com/articles/17593.htmlSQLの幅問い合わせ(サブクエリ)とは? 概要・種類・使い方を解説
https://hironimo.com/prog/sql/subquery/
SQLServer 副問い合わせ
1. サブクエリとは?
では実際にサブクエリを操作してみる。
今回も復習をかねて新しいテーブルを作成する
product2テーブルを作成
create table product2 (id int(10), name varchar(20));
データを追加する
insert into product2 values (1, '作業用PC'), (2, 'A4ノート'), (3, 'バインダー'), (4, 'タブレット');
amountテーブルを作成
create table amount (product_id int(10), count int(10));
データを追加する
insert into amount values (3,15), (5, 20), (5, 10), (4, 13);
amountテーブル作成
idが重複しているため、idを更新する
更新するためには UPDATE文を利用する
構文
UPDATE [テーブル名] SET [更新する内容] WHERE [条件式];
count = 20のフィールドの product_id を 2に更新する
update amount set product_id = 2 where count = 20;
product_id を更新することができた
product_id = 5 のデータも 1に更新する
update amount set product_id = 1 where count = 10;
これで全ての更新は完了した
ではここから実際にサブクエリを使って、countが一番少ないデータを取得してみる
product2テーブル
amountテーブル
select * from product2 where id = (select product_id from amount order by count asc limit 1);
amountテーブルでは、 id = 1の count が 10で一番少ないため サブクエリを利用して、countが一番少ないデータを取得することができた。
criantテーブルを作成
create table criant (id int(10), name varchar(20), menu_id int(10));
データを追加する
insert into criant (id, name, menu_id) values (1, '鈴木一郎', 1), (2, '佐藤花子', 3), (3, '織田五郎', 5), (4, '平山一雄', 2);
今回も復習をかねて新しいテーブルを作成する
product2テーブルを作成
create table product2 (id int(10), name varchar(20));
データを追加する
insert into product2 values (1, '作業用PC'), (2, 'A4ノート'), (3, 'バインダー'), (4, 'タブレット');

amountテーブルを作成
create table amount (product_id int(10), count int(10));
データを追加する
insert into amount values (3,15), (5, 20), (5, 10), (4, 13);

amountテーブル作成
idが重複しているため、idを更新する
更新するためには UPDATE文を利用する
構文
UPDATE [テーブル名] SET [更新する内容] WHERE [条件式];
count = 20のフィールドの product_id を 2に更新する
update amount set product_id = 2 where count = 20;

product_id を更新することができた
product_id = 5 のデータも 1に更新する
update amount set product_id = 1 where count = 10;

これで全ての更新は完了した
ではここから実際にサブクエリを使って、countが一番少ないデータを取得してみる
product2テーブル

amountテーブル

select * from product2 where id = (select product_id from amount order by count asc limit 1);

amountテーブルでは、 id = 1の count が 10で一番少ないため サブクエリを利用して、countが一番少ないデータを取得することができた。
サブクエリの結果が複数の場合
新しいテーブルを作成するcriantテーブルを作成
create table criant (id int(10), name varchar(20), menu_id int(10));
データを追加する
insert into criant (id, name, menu_id) values (1, '鈴木一郎', 1), (2, '佐藤花子', 3), (3, '織田五郎', 5), (4, '平山一雄', 2);
2. まとめ
サブクエリを使うと、複雑な処理も1つのSQLで記述できるメリットがある。
使い方が結構難しいが、少しずつ慣れていこう。