プログラム初心者が”DEV.LAB"を受講してどこまで成長できるかの記録 その10【第9章SQL 〜応用編〜】【ユーザー体験】
DEV.LAB受講生のayakaです:)
今回は第9章 SQL 応用編についてです。
今回9章ではSQL最後の応用編となります。
応用編では、副問合せと複合テーブルの結合について学んでいきます。
授業ポイントノート
副問合せ
まず、副問合せについてです。
副問合せとは、
他のSQL文の一部分として使用するSELECT文。( )でくくって記述する
SELECT文で何らかの検索結果を得て、得られた値からさらにSELECTやUPDATEを実行するために必要
SELECT文の中にSELECT文などSQLでのネストにあたる方法だとイメージするとわかりやすいと思います!
副問合せの検索結果は3パターンあり、
① 単一行の値になる副問合せ
② n行1列になる複数行の副問合せ
③ n行m列になる表形式の副問合せ
となります。
まずは①の単一行の値になる副問合せの説明です。
単一行の値になる副問合せは
副問合せの結果、SET句や選択肢リストで利用します。
次は② n行1列になる複数行の副問合せについてです。
n行1列になる複数行の副問合せでは、
- 副問合せの結果、IN, ANY,ALL演算子で利用
- 副問合せの結果にNULLが含まれていると、NOT IN, < > , ALL演算子の評価結果もNULLになる。
そして、③ n行m列になる表形式の副問合せ は
- 副問合せの結果、FROM句、INSERT句で利用することができます
複数テーブルの結合について
複合テーブルの結合の例として以下のようになります。
テーブルAとテーブルBの結合の基本構造として、
- FROMのテーブルを左表、JOINのテーブルを右表という
- 左表を基準に、右表が結合される
また、右表の行が複数ある場合は、
左表の行を複製して結合するため、
結果表の行数は元の左表の行数より増えることになります。
さらに、結合相手の行がNULLの場合、結合結果から消滅します
ただし、上の例のように、消滅してしまうのは困る場合、
①左外部結合(LEFT JOIN)
②右外部結合(RIGHT JOIN)
という2つの方法で消滅を防ぐことができます。
まず、①左外部結合(LEFT JOIN)についてです。
左外部結合では、NULLの行を生み出してでも
左表の全行を必ず出力する方法です。
次に、②右外部結合(RIGHT JOIN)についてです。
右外部結合でも、NULLの行を生み出してでも
右表の全行を必ず出力する方法です。
他の結合パターンのSQLとして
左表と右表に同じ列名があった場合、
以下のような構文になります。
3つのテーブルを結合する場合は、
前から順に1つずつ結合処理されていきます。
複数のテーブルの結合をする際は、
FROMに近いデータテーブルから順番に結合していって、その結合した結果とさらに結合するというところに注意が必要です!
そして最後に、副問合せの結果との結合の場合は、
以下のような構文になります。
なぜ副問合せをするかというと、同じ結果は求めることができるけど、
その時々で処理が違う方法で書くとその結果を得るまでの処理の早さであったりが変わるので、その処理・時にあった処理を書くために使い分けることが必要になってきます。
終わりに…
Javaのコーディングと同じように、求める結果に辿り着くまでに、
色々なコーディングの仕方があるのですが、その時々によって
効率の良いコーディングやSQLのコードは違ってくるので
できる限りSQLのコーディングを行なって色んなコードを書いた経験を持つようにすると、必要な時に使い分けることができるので、
より多くのコーディンをして、知見を貯めるようにしていきましょう!
私が通っているDEV.LAB(ディラボ)とは…
”一生使えるスキルを学ぶ”ことができる 未経験から現場での活躍を目指す
超実践OJT開発型をおこなっているプログラミングスクールです。
Java × Springを現役エンジニアから学ぶことができ充実したサポートもあります。
この記事が気に入ったらサポートをしてみませんか?