Blank?=Falseスマートフォン用の表示で見るBlank?=False「呉下の阿蒙にあらず」をモットーにしたITエンジニアの日々Blank?=Falseこの広告は、90日以上更新していないブログに表示しています。DBMS個人的にはRDBMSのキモである結合がようやく登場です。(結合はよく知ってるのにサブクエリはあまり知らなかったんですよね。)知っている事がほとんどですが、自分の知識の再確認のためにやっていきます。UNIONはテーブルとテーブルを行方向へ連結するものでした。結合は、テーブルとテーブルを列方向に連結するものという感じです。イメージで言うと、こんな感じです。簡単に行ってしまうと、「別のテーブルから列を持ってきて列を増やす」操作と紹介されています。JOIN)の3つです。本書では、クロス結合はほとんど使わないと紹介されていますが、自分も今まで実務で使ったことはありません。共通するルール結合するテーブルは一致する列が必ず必要です。いうと、この一致する列を基準に、データを設定するためです。イメージで見ると、もし、2つ目のテーブルにID列がなかったら、2つのテーブルを結合しても、どの1つ目のテーブルのレコードと、2つ目のテーブルのレコードを連結させればいいのかわかりませんよね。共通するID列を準備してあげることで、同じIDの値同士で結合できる、ということです。いわゆる橋渡しの役目ですね。先ほどのイメージこれそのまま、というものです。結合する2つのテーブルで、同じIDが両方にあるレコード同士を結合します。片方にしかIDががないものは結合されません。実際にSQL文を叩いてみます。2つのテーブルを確認します。sec)さて、結合してみます。sec)これで完全にイメージどおりの結果になりました。内部結合と動きとしてはほとんど変わりません。違いは1つだけ、「片方にしかないデータも結合される」ということです。sec)内部結合ではなかったSkillテーブルのid:5のデータが表示されます。User1テーブルにはid:5がないので、NULLと表示されてしまいます。イメージでいえば、こんな感じです。元のテーブルにない(つまりテーブルの外部から)情報を結果に持ってくるという意味で、「外部」結合と呼ばれるわけです。ここで言えば、元のUser1テーブルになかったID:5のデータが外部から来たわけですね。外部結合の文にあるRIGHTと言うのは右側をマスタとするという意味です。左側をマスタにするということもできます。sec)なんと!id:5が消えてしまった!(DQ風)なぜこうなるかというと、マスタ側のテーブルのデータを全部出力するのが外部結合の動作です。今回マスタ側になっているUser1テーブルにはid:5のデータはないので、出てこないわけです。先程は、Skillテーブルがマスタになっていたので出てきたわけですね。LEFTを使ってSkillテーブルにあるid:5のデータを表示したい、と思った時は左側にSkillテーブルを置けばいいわけです。最後のクロス結合は、先程も書いたように実務ではほとんど使わないものです。それにもかかわらず、紹介されている理由が本書に書かれています。クロス結合が、すべての結合演算の基礎だからです。