はじめに
SQLの学習を始めるにあたって、備忘録として学習内容を書いていきます
テーブル結合
2つ以上のテーブルからあるカラムの値を基にしてテーブルを連結して、1つの結果として取り出す事をテーブル結合という
テーブル結合には以下のような種類がある
- 直積結合
- WHERE句を使用した結合
- 内部結合
- 外部結合
カラム名を修飾する
テーブルとテーブルを結合する際に、あるカラムを基に結合するため、少なくとも1つは共通のカラムが存在する必要がある
異なるテーブルだけれど、同じ名前のカラム名を以下のような書き方で示す。
テーブル名.カラム名
テーブルに別名をつける
テーブルを結合する際に「Aテーブル.id」「Aテーブル.name」のようにSQL文を書くと長いテーブル名だと手間がかかり大変
なので、テーブルに別名をつけるとこのデメリットは解消される
FROM句のテーブル名の後ろに半角空白を入力して、テーブルの別名を記述する
直積結合
直積結合とは、各テーブルに存在するレコードの組み合わせ全てを取り出す結合
SELECT カラム名 FROM テーブル名1 CROSS JOIN テーブル名2;
実際に使う場面はほぼない。結合の基礎を知る上では大切
WHERE句を使って結合する
直積結合にWHERE句を追加するとWHERE句に設定した条件の結合を行う事ができる
SELECT カラム名 FROM テーブル名1,テーブル名2 WHERE 結合条件;
書き方としては古い表現ではあるが、現在でも使われている結合方法である
最近ではJOIN句を使って表現する事が多い
条件を満たした行を結合する(内部結合)
WHERE句を使った結合と同様に、指定した結合条件に一致するレコードのみを取り出して結合する方法が内部結合
SELECT カラム名 FROM テーブル名1 (INNER) JOIN テーブル名2 ON 結合条件 (WHERE 取得したいレコードの条件);
条件を満たしていない行も結合する(外部結合)
テーブル名1またはテーブル名2のどちらか一方にしかないレコードも取り出す
SELECT カラム名 FROM テーブル名1 LEFT OUTER JOIN (RIGHT OUTER JOIN) テーブル名2 ON 結合条件 (WHERE 取得したレコードの条件);
基本的に3つ以上のテーブル結合を行う場合は、左側のテーブルを基準に結合していくため、それに適したLEFT OUTER JOIN
を使う方が良い
自己結合
テーブルには自分自身、つまり同じ名前のテーブルを結合する事ができる。これを自己結合という
この場合はAS
を用いて別名をつける必要がある。(テーブルに同じな名前のテーブルを結合するので、単純に実行するとカラム名が2つ表示されてしまい、識別できないのでエラーになる)
SELECT カラム名 FROM テーブル名 AS 別名1 JOIN テーブル名 AS 別名2;
自己結合は順位付けを行なう時に有効である
上のSQL文に続けてした文を記述すると
WHERE 別名1.カラム名<=別名2.カラム名 group by 別名1.主キー
で順位が表示される