SQL 副問い合わせ(サブクエリ)とはなに?複数条件設定も!

かんたん!SQL





SQL副問い合わせ(サブクエリ)について詳しく知りたいときはないでしょうか。
そんな中で悩むことは、

・SQL副問い合わせ(サブクエリ)の使い方がわからない
・SQL副問い合わせ(サブクエリ)で複数条件設定をする方法がわからない

ですよね。

今回はそんなお悩みを解決する

・SQL副問い合わせ(サブクエリ)の使い方
・SQL副問い合わせ(サブクエリ)で複数条件設定をする方法

についてまとめます!

SQL副問い合わせ(サブクエリ)とは

サブクエリは、主に他のクエリの一部として使用されるクエリです。メインクエリ内の条件や操作に応じて、サブクエリが実行され、その結果がメインクエリの一部として組み込まれます。サブクエリを使用することで、複雑なデータ操作や条件の組み合わせが可能になります。

SQL副問い合わせ(サブクエリ)の使用方法

SQL副問い合わせ(サブクエリ)の使用方法について説明をします。

サブクエリは、SELECT文内の他のクエリとして埋め込まれることが一般的です。
サブクエリは通常、主に以下の方法で使用されます。

  1. SELECT文内の列の値として利用
  2. FROM句内のテーブルとして利用
  3. WHERE句やHAVING句の条件として利用
  4. EXISTS句などの特定の演算子と組み合わせて利用

制限事項

サブクエリを使用する際には、以下の制限事項に注意が必要です。

・サブクエリの実行回数がメインクエリ内の行数と同じだけ発生するため、パフォーマンス上の懸念がある。
・サブクエリがネストしている場合、理解や最適化が難しくなる可能性がある。
・サブクエリが複雑になりすぎると、可読性が低下する可能性がある。

サブクエリの書き方

SELECT文としてのサブクエリ

サブクエリをSELECT文内に埋め込む場合、通常はカラムとしての値を返す形式です。例えば、以下のように使用できます。


SELECT column_name
FROM table_name
WHERE column_name = (SELECT column_name FROM another_table WHERE condition);

FROM句としてのサブクエリ

FROM句内でサブクエリを使用することで、テーブルとしてのように扱えます。これにより、メインクエリとサブクエリの結果を結合できます。


SELECT *
FROM (SELECT column_name FROM table_name WHERE condition) AS subquery_table;

WHERE句としてのサブクエリ

WHERE句内でサブクエリを使用することで、行のフィルタリングを行えます。特定の条件を満たす行を抽出する際に使用されます。


SELECT column_name
FROM table_name
WHERE column_name = (SELECT column_name FROM another_table WHERE condition);

HAVING句としてのサブクエリ

HAVING句内でサブクエリを使用することで、グループ化された結果セットに対する条件を設定できます。


SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name
HAVING COUNT(*) > (SELECT AVG(count_column) FROM another_table);

EXISTS句としてのサブクエリ

EXISTS句は、サブクエリの結果が空でない場合に真を返す条件式です。通常、サブクエリの結果が存在するかどうかを確認するために使用されます。


SELECT column_name
FROM table_name
WHERE EXISTS (SELECT * FROM another_table WHERE condition);

サブクエリの条件設定

単一行サブクエリ

単一行サブクエリは、結果が1行のみ返されるサブクエリです。通常、単一の値を取得するために使用されます。


SELECT column_name
FROM table_name
WHERE column_name = (SELECT column_name FROM another_table WHERE condition);

複数行サブクエリ

複数行サブクエリは、結果が複数行返されるサブクエリです。IN句やNOT IN句などで使用され、複数の条件を比較するために利用されます。

スカラーサブクエリ

スカラーサブクエリは、単一の値を返すサブクエリであり、通常は条件式内で使用されます。サブクエリが返す値は、他の値と比較するために使用されます。

サブクエリの使用例

IN句とサブクエリ

IN句は、指定した値のいずれかに一致する行を抽出するために使用されます。サブクエリを使用して、別のテーブルの値を比較できます。


SELECT column_name
FROM table_name
WHERE column_name IN (SELECT column_name FROM another_table WHERE condition);

IN句とサブクエリの例

目的: 商品テーブルから、特定のカテゴリに属する商品を抽出する。

サンプルデータ:
商品テーブル (products)

id 商品名 カテゴリ
1 商品A 食品
2 商品B
3 商品C 電化製品

サンプルコード:


SELECT 商品名
FROM 商品テーブル
WHERE カテゴリ IN (SELECT カテゴリ FROM 別のテーブル WHERE 条件);

例えば、カテゴリが「食品」に属する商品を抽出するためのクエリは次のようになります。


SELECT 商品名
FROM 商品テーブル
WHERE カテゴリ IN (SELECT カテゴリ FROM 別のテーブル WHERE カテゴリ = '食品');

NOT IN句とサブクエリ

NOT IN句は、指定した値以外の行を抽出するために使用されます。サブクエリを使用して、特定の条件に一致しない行を取得できます。


SELECT column_name
FROM table_name
WHERE column_name NOT IN (SELECT column_name FROM another_table WHERE condition);

ANY句とサブクエリ

ANY句は、複数の値の中で条件を満たすものが1つでもあれば真を返します。サブクエリを使用して複数の値との比較を行えます。


SELECT column_name
FROM table_name
WHERE column_name > ANY (SELECT column_name FROM another_table WHERE condition);

ALL句とサブクエリ

ALL句は、複数の値全てが条件を満たす場合に真を返します。サブクエリを使用して、複数の値との比較を行い、全ての値が条件を満たす行を抽出できます。


SELECT column_name
FROM table_name
WHERE column_name > ALL (SELECT column_name FROM another_table WHERE condition);

EXISTS句とサブクエリ

EXISTS句は、サブクエリの結果が存在する場合に真を返します。主に特定の条件を満たす行が存在するかどうかを確認するために使用されます。


SELECT column_name
FROM table_name
WHERE EXISTS (SELECT * FROM another_table WHERE condition);

EXISTS句とサブクエリの例

目的: 顧客テーブルから、特定の都道府県に住む顧客が存在するか確認する。

サンプルデータ:
顧客テーブル (customers)

id 名前 都道府県
1 顧客A 東京都
2 顧客B 大阪府
3 顧客C 東京都

サンプルコード:


SELECT 名前
FROM 顧客テーブル
WHERE EXISTS (SELECT * FROM 別のテーブル WHERE 条件);

例えば、東京都に住む顧客が存在するかを確認するクエリは次のようになります。


SELECT 名前
FROM 顧客テーブル
WHERE EXISTS (SELECT * FROM 顧客テーブル WHERE 都道府県 = '東京都');

SQL副問い合わせ(サブクエリ)で複数条件設定をする方法

SQL副問い合わせ(サブクエリ)で複数の条件を指定するサンプルデータと
その条件を使ったサンプルコードとなります。

NOT IN句とサブクエリの例

目的: 特定の商品カテゴリに属さない商品を抽出する。

サンプルデータ:
商品テーブル (products)

id 商品名 カテゴリ
1 商品A 食品
2 商品B
3 商品C 電化製品

サンプルコード:


SELECT 商品名
FROM 商品テーブル
WHERE カテゴリ NOT IN (SELECT カテゴリ FROM 別のテーブル WHERE 条件);

例えば、商品カテゴリが「食品」と「服」に属さない商品を抽出するクエリは次のようになります。


SELECT 商品名
FROM 商品テーブル
WHERE カテゴリ NOT IN ('食品', '服');

ANY句とサブクエリの例

目的: 特定の数量よりも多くの商品を抽出する。

サンプルデータ:
商品テーブル (products)

id 商品名 カテゴリ 数量
1 商品A 食品 10
2 商品B 5
3 商品C 電化製品 15

サンプルコード:


SELECT 商品名
FROM 商品テーブル
WHERE 数量 > ANY (SELECT 数量 FROM 別のテーブル WHERE 条件);

例えば、数量が別のテーブルの中で最小値よりも多い商品を抽出するクエリは次のようになります。


SELECT 商品名
FROM 商品テーブル
WHERE 数量 > ANY (SELECT MIN(数量) FROM 別のテーブル);

さいごに

今回は、

・SQL副問い合わせ(サブクエリ)の使い方
・SQL副問い合わせ(サブクエリ)で複数条件設定をする方法

についてまとめました。

また、他にも役に立つ情報がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。