SQL

SQL – サブクエリ(副問い合せ)

0

副問合せ

SQLには、SQL文の内部に別のSELECT文を記述する「副問い合せ」という機能がある。
これは小学校の算数でよく見る計算式をイメージすると分かりやすい。

x = 2 × 3
y = 4 × 5
z = 3 × 7
a = x + y + z
a = 47

この計算式、変数を使っているという意味では見やすいが、5行も使っており少々長い。
これを短くしようと思ったらこうするはず


a = (2 × 3) + (4 × 5) + (3 × 7)
a = 47

SQL文でもこれと同じようなことができる。それが副問い合せ。
つまり、1つのSQL文(計算式でいう a )の中に、1つ以上のSQL文(計算式でいう(2 × 3)など)を入れることができるという機能。これを入れ子構造、ネストとも呼ばれる。副問い合せ(ネスト)している部分はかっこ()でくくること。

副問合せの3パターン

パターン①検索結果が1行1列の値になる副問い合せ

■UPDATE文で使ってみる。

上記のSQL文だと、家計簿の交通費の合計金額を集計して、家計簿集計の費目=’交通費’に入れてテーブルを更新できる。

■SELECT文で使ってみる

パターン②検索結果がn行1列の複数の値になる副問い合せ

■IN演算子で使ってみる

■ANY/ALL演算子で使ってみる

<補足>
NOT IN演算子または<>ALLで判定する副問い合わせの結果にNULLを含まれていた場合、全体の結果もNULLになってしまうので、下記のようにしてNULLを除外する。

パターン③検索結果が表の結果となる副問い合せ

FROM句で使ってみる

INSERT文で使ってみる

通常であれば、INSERT文はテーブルに行を1つ追加するものだが、副問い合せを使えば、一度に複数の行を追加することができる。上記の例文でいうと、GROUP BYで費目ごとに集計された結果(複数行)がINDERTで追加されることになる。

各パターンの副問合せの結果得られる値のイメージはこんな感じ

 

0
ABOUT ME
chopes
前職では、人材業界で法人営業・キャリアアドバイザー・大阪責任者をしていました。他にも、新入社員の研修策定と育成、面談者の集客におけるスカウト業務や中途採用の面接官、新卒採用の2次選考官、インターンシップのメンターとしてプログラムに参加していました。退職後は、未経験でエンジニアになるためにスクールに通学して勉強。2ヶ月の転職活動を経て、今春からRailsエンジニアとして第二のキャリアを歩むことになりました。主に学習記録や未経験エンジニアについてアウトプットしていきたいと思います! 以下、Twitterアカウントですので、気軽にフォローしてください! Twitter:@chopesu_se