この記事を読むのに必要な時間は約 5 分です。
結合
今回のテーマはデータの結合です。
結合と言ってもいろいろな方法があります。まずはベースとなるデータを参照してみましょう。
サンプルでダウンロードしている「AdventureWorksDW2016_EXT」を加工して作った以下のテーブルを利用してみます。
この地域情報のデータと
/****** SSMS の SelectTopNRows コマンドのスクリプト ******/ SELECT TOP (1000) [OrganizationName] ,[CurrencyKey] FROM [AdventureWorksDW2016_EXT].[dbo].[Organization]
この通貨名のデータで試してみたいと思います。
/****** SSMS の SelectTopNRows コマンドのスクリプト ******/ SELECT TOP (1000) [CurrencyKey] ,[CurrencyName] FROM [AdventureWorksDW2016_EXT].[dbo].[Currency]
結合の種類
結合には以下のような種類があります。
- 内部結合
- 完全外部結合
- 左側外部結合
- 右側外部結合
これらについて解説してきます。
視認性を高めるために以下のような省略形で説明します。
SELECT * FROM [Currency] C SELECT * FROM [Organization] O
内部結合
内部結合はお互いのデータに存在する物だけを結合し、片方に存在しない物やもう片方に存在しない物は結びつけません。
inner join
SELECT * FROM [Currency] C inner join [Organization] O on C.CurrencyKey=O.Currencykey
Innter join ではお互いのテーブルにデータが存在している物だけを表示させます。
完全外部結合
完全外部結合はそれぞれのテーブルに存在しないデータがあったとしても元のデータを残して表示させます。
full outer join
SELECT * FROM [Currency] C full outer join [Organization] O on C.CurrencyKey=O.Currencykey
この例では、通貨情報のテーブルには存在するけど、地域情報のテーブルには存在しないデータについては上記赤丸部分のようにNULLで表示させています。
左側外部結合
左側外部結合は初めに表記したテーブルに対して後から表記したテーブルをぶつけて合致した物を表示させます。この時初めに表記したテーブルについてはすべてのデータを表示させます。逆に後から表記したテーブルで合致しなかった物については表記されません。
left outer join
SELECT * FROM [Currency] C left outer join [Organization] O on C.CurrencyKey=O.Currencykey
この例の場合、たまたま完全外部結合と一致してしまいました。
右側外部結合
右側外部結合は、左側外部結合の左右逆版なので説明は省略します。
right outer join
この様に、テーブル同士を結合していき、自分が目的とするデータを取得するのが関係データベースの醍醐味です。