サブクエリ

サブクエリ(副問い合わせ)についての詳細な解説と使用例。クエリの中にクエリを入れる方法を学べます。

説明

サブクエリとはクエリの中に埋め込まれた別のクエリ(SELECT文)のことです。
WHERE句・FROM句・SELECT句など様々な場所に書くことができ、複雑な条件や集計を簡潔に表現できます。

基本構文
quest.sql
Loading...
例文

平均価格より高い商品を取得(WHERE句のサブクエリ)

quest.sql
Loading...
— RESULT

クエリを実行してください

3個以上注文したことがあるユーザーを取得(INのサブクエリ)

quest.sql
Loading...
— RESULT

クエリを実行してください

ユーザーごとの注文数をSELECT句のサブクエリで取得

quest.sql
Loading...
— RESULT

クエリを実行してください

集計結果をさらに絞り込む(FROM句のサブクエリ/派生テーブル)

quest.sql
Loading...
— RESULT

クエリを実行してください

注意点
  • 相関サブクエリはパフォーマンスに注意

    外部クエリの行ごとにサブクエリが実行される相関サブクエリは行数が多いと非常に遅くなる。JOINで書き直せないか検討する。

  • スカラーサブクエリは1行1列を返す必要がある

    SELECT句や = 演算子で使うサブクエリが複数行を返すとエラーになる。

  • EXISTS はレコードの存在確認に適している

    IN の代わりに EXISTS を使うと、サブクエリが最初に一致した行を見つけた時点で検索を打ち切れるため効率的な場合がある。

使用シーン
  • 平均・最大値などの集計値を条件に使いたいとき
  • 別テーブルに存在するIDを条件にしたいとき
  • 集計済みの結果をさらに絞り込みたいとき
  • JOINを使わずに関連データを取得したいとき
このクエリを実践するには?

#63 平均価格より高い商品

上級サブクエリログインして解除

この問題にチャレンジするにはログインが必要です。ログインして全ての練習問題にアクセスしましょう。

#64 電子機器を注文したユーザー

上級サブクエリログインして解除

この問題にチャレンジするにはログインが必要です。ログインして全ての練習問題にアクセスしましょう。

関連クエリ
  • SELECT データ取得
  • WHERE 条件絞り込み
  • JOIN テーブル結合
QSQL Quest