見出し画像

プログラム初心者が”DEV.LAB"を受講してどこまで成長できるかの記録 その10【第9章SQL 〜応用編〜】【ユーザー体験】

DEV.LAB受講生のayakaです:)
今回は第9章 SQL 応用編についてです。

今回9章ではSQL最後の応用編となります。
応用編では、副問合せと複合テーブルの結合について学んでいきます。

授業ポイントノート

副問合せ

まず、副問合せについてです。
副問合せとは、

  • 他のSQL文の一部分として使用するSELECT文。( )でくくって記述する

  • SELECT文で何らかの検索結果を得て、得られた値からさらにSELECTやUPDATEを実行するために必要

SELECT文の中にSELECT文などSQLでのネストにあたる方法だとイメージするとわかりやすいと思います!

DEVLABカリキュラムより
DEVLABカリキュラムより

副問合せの検索結果は3パターンあり、
① 単一行の値になる副問合せ
② n行1列になる複数行の副問合せ
③ n行m列になる表形式の副問合せ
となります。

まずは①の単一行の値になる副問合せの説明です。
単一行の値になる副問合せは
副問合せの結果、SET句や選択肢リストで利用します。

単一行の値になる副問合
DEV.LAB講義動画より

次は② n行1列になる複数行の副問合せについてです。
n行1列になる複数行の副問合せでは、
- 副問合せの結果、IN, ANY,ALL演算子で利用
- 副問合せの結果にNULLが含まれていると、NOT IN, < > , ALL演算子の評価結果もNULLになる。

n行1列になる複数行の副問合せ
DEV.LAB講義動画より

そして、③ n行m列になる表形式の副問合せ 
- 副問合せの結果、FROM句、INSERT句で利用することができます

n行m列になる表形式の副問合せの例
DEV.LAB講義動画より

複数テーブルの結合について

2つのテーブルの結合基本構文

複合テーブルの結合の例として以下のようになります。

DEV.LAB講義より

テーブルAとテーブルBの結合の基本構造として、
- FROMのテーブルを左表、JOINのテーブルを右表という
- 左表を基準に、右表が結合される

2つのテーブルの結合基本構文

また、右表の行が複数ある場合は、
左表の行を複製して結合するため、
結果表の行数は元の左表の行数より増えることになります。

DEV.LAB講義動画より

さらに、結合相手の行がNULLの場合、結合結果から消滅します

DEV.LAB講義動画より

ただし、上の例のように、消滅してしまうのは困る場合、
左外部結合(LEFT JOIN)
右外部結合(RIGHT JOIN)
という2つの方法で消滅を防ぐことができます。

まず、①左外部結合(LEFT JOIN)についてです。
左外部結合では、NULLの行を生み出してでも
左表の全行を必ず出力する方法です。

左外部結合の構文
左外部結合の例

次に、②右外部結合(RIGHT JOIN)についてです。
右外部結合でも、NULLの行を生み出してでも
右表の全行を必ず出力する方法です。

右外部結合の構文
右外部結合の例

他の結合パターンのSQLとして
左表と右表に同じ列名があった場合、
以下のような構文になります。

左表と右表に同じ列名がある場合の構文

3つのテーブルを結合する場合は、
前から順に1つずつ結合処理されていきます。
複数のテーブルの結合をする際は、
FROMに近いデータテーブルから順番に結合していって、その結合した結果とさらに結合するというところに注意が必要です!

3つのテーブルを結合する場合の構文
3つのテーブルを結合する場合の構文の例

そして最後に、副問合せの結果との結合の場合は、
以下のような構文になります。

副問合せの結果との結合の構文
副問合せの結果との結合の例

なぜ副問合せをするかというと、同じ結果は求めることができるけど、
その時々で処理が違う方法で書くとその結果を得るまでの処理の早さであったりが変わるので、その処理・時にあった処理を書くために使い分けることが必要になってきます。

終わりに…
Javaのコーディングと同じように、求める結果に辿り着くまでに、
色々なコーディングの仕方があるのですが、その時々によって
効率の良いコーディングやSQLのコードは違ってくるので
できる限りSQLのコーディングを行なって色んなコードを書いた経験を持つようにすると、必要な時に使い分けることができるので、
より多くのコーディンをして、知見を貯めるようにしていきましょう!

私が通っているDEV.LAB(ディラボ)とは…
”一生使えるスキルを学ぶ”ことができる 未経験から現場での活躍を目指す
超実践OJT開発型をおこなっているプログラミングスクールです。
Java × Springを現役エンジニアから学ぶことができ充実したサポートもあります。

この記事が気に入ったらサポートをしてみませんか?