ichikawaです。
データベースについて書きます。
前回の授業で外部結合を学びましたが、今回は同じテーブル同士をつなげる自己結合について勉強しました。
どんな時に自己結合をするのか
複数のテーブルをつなぐ際、同じテーブル同士を指定したい場合に使います。
例えば、野球チーム名、IDがいくつか入ったテーブルがあって、すべてのチーム同士の対戦を一覧で出したい、などの場合です。
今日はそれを例に取ってみます。
例えば以下のようなテーブル、カラムがあるとします。
| Baseball | |
|---|---|
| TeamID | TeamName |
| 1 | dino |
| 2 | monkeys |
| 3 | hoges |
| 4 | banbans |
まず内部結合をするには、JOIN句で、同じテーブルを指定します。
SELECT b1.TeamName AS チーム名1 , b2.TeamName AS チーム名2 FROM Baseball AS b1 JOIN Baseball AS b2 ;
このように、同じテーブルを区別するために別名を付けます。
考え方としては、全く同じ値を持つテーブルが別にできたということです。
これで結合することができました。
しかしこのままだと自分のチーム同士が対戦する結果も出てしまうので
条件をつけて
SELECT b1.TeamName AS チーム名1 , b2.TeamName AS チーム名2 FROM Baseball AS b1 JOIN Baseball AS b2 ON b1.TeamID < b2.TeamID ;
こうします。
聞けばすぐに納得しましたが、今日はここが悩まされた所でした。
「TeamID」はそれぞれのチームで違った値を持っていますが、このIDを利用して、同じIDの対戦をさせないようにしています。
しかし、そうですと
ON b1.TeamID <> b2.TeamID
としたほうが意味としてはしっくりくるような気がしますが、
この場合だと、IDが1ー2の対戦と、2−1の対戦と同じ意味の結果が出てしまいます。
このダブりをなくすために、JOINの条件は
ON b1.TeamID < b2.TeamID
としました。
とても勉強になりました。これは使えそうな気がします!
内部結合に関しては以上です。
最近はデータベースの処理の仕方がどんどん複雑になってきました。
先日確認テストをしましたが、少ししか触れていない所はすっぽり抜けていたりしました。まずいです。
WHEREとHAVINGに関しては知識がついてきましたが、今度は自分は副問い合わせが苦手分野になっていますので、復習して自分の物にしていけるよう頑張ります。
動画です!

コメントをどうぞ