前回の続きです。
今回から複数のテーブルを結合して、SELECT文を書いてみたいと思います。
内部結合
テーブル同士を結合するとは、カラム同士で同じ値を持つレコードをつなげることをいいます。
このとき、内部結合と外部結合というのが代表的で、今回は内部結合の話です。
内部結合は、異なるテーブル同士で結合するカラムを指定して、お互いに存在するレコードをみつけだしつなげてくれます。
では、内部結合する前に2つのテーブルを確認してみましょう。
まずは、Person.PersonとPerson.PersonPhoneを比較します。
以下のようにSQLを書いてください。
SELECT * FROM Person.Person SELECT * FROM Person.PersonPhone
以下のように出力されます。
2つのテーブルにはBusinessEntityIDというのがあり、このカラムをキーにして情報を結合することができます。
(※ちなみにテーブル同士を結合する際は、テーブル定義書という設計書をもとに結合しないと誤った解釈ででーたをつくってしまうことがあるので注意しましょう。)
では、上記のキーで内部結合をします。
内部結合はFROM句のあとに、INNER JOIN でテーブル名をかき、結合するキー(つまりカラム名)をONの後に書きます。
詳しくは以下の通り
SELECT * FROM Person.Person PP INNER JOIN Person.PersonPhone PH ON PP.BusinessEntityID = PH.BusinessEntityID
結果は以下の通り
エイリアスをつけるとコードがかきやすい。
上記のSQLで、テーブル名の後に何かついているのが気になったかと思います。
例えばこれ => Person.Person PP
このPPをエイリアスといって、あだ名をつけていると思ってください。
これの何がいいかというと、カラムを指定するときに便利になります。
ON句に以下の通り書いてありますね。
ON PP.BusinessEntityID = PH.BusinessEntityID
Person.PersonとPerson.PersonPhoneはお互いに同名のBusinessEntityIDというカラムをもっています。
このとき、テーブル名を指定して
ON Person.Person.BusinessEntityID = Person.PersonPhone.BusinessEntityID
とかいてもよいのですが、ながったらしいので上記で決めたエイリアスを活用すると、コードが短く済むというわけなのです。
結合できるテーブルは2個とは限らない
次に、うえで内部結合したものに、さらにもうひとつのテーブルを結合してみます。
さらに結合するテーブルはPerson.PhoneNumberTypeです。
まずは、テーブルを確認してみましょう。
SELECT * FROM Person.Person PP INNER JOIN Person.PersonPhone PH ON PP.BusinessEntityID = PH.BusinessEntityID SELECT * FROM Person.PhoneNumberType
では、PhoneNumberTypeIDで結合してみようと思います。
SQLは以下の通り
SELECT PP.BusinessEntityID, PhoneNumber, Name FROM Person.Person PP INNER JOIN Person.PersonPhone PH ON PP.BusinessEntityID = PH.BusinessEntityID INNER JOIN Person.PhoneNumberType NP ON PH.PhoneNumberTypeID = NP.PhoneNumberTypeID
以下の通り結合できました。
ソートしてみよう
上記の出力は、並び順がなにも考慮されていません。
並び替えは、最後にORDER BY [カラム名]で行えます。
例えばこんな感じ
SELECT PP.BusinessEntityID, PhoneNumber, Name FROM Person.Person PP INNER JOIN Person.PersonPhone PH ON PP.BusinessEntityID = PH.BusinessEntityID INNER JOIN Person.PhoneNumberType NP ON PH.PhoneNumberTypeID = NP.PhoneNumberTypeID ORDER BY BusinessEntityID
BusinessEntityIDでソートすることができましたね。
以上、次回は外部結合を勉強します。