小技プログラミング

SELECT文で複数テーブルを結合して取得する

SELECT文を使って複数のテーブルを結合させてデータを取得する方法です。

結合を使うと、テーブルとテーブルのキーとなるカラムを関連付けさせて、それぞれのデータを組み合わせて必要な情報を色んなテーブルから一度で取得する事ができます。

例えば、テーブル1はユーザ情報が定義されていて、テーブル2には所有する車の情報が定義されているとします。

この時、結合を利用せずにユーザと所有する車の情報を取得すると、1度ユーザテーブルに対してSELECTして、取得結果で更に車情報テーブルにSELECTを発行することになってしまいますが、
テーブルの結合をすると一度で必要なデータを取得する事ができます。

例えば以下の様な TBL_USER と TBL_CAR の二つのテーブルがあるとします。

この場合に、TBL_USER テーブルの CODE カラムに TBL_CAR テーブルの CODE カラムのデータを入れて、ユーザ情報に車情報を関連付けされているとします。

この時、TBL_USER テーブルの CODE = TBL_CAR テーブルの CODE という形でデータを取得する事ができます。

構文は通常のSELECT文と基本的には変わらず、SELECT~FROM~WHEREの形ですが、
FROM句でテーブル名を指定する時に、それぞれ別名を付けてあげる必要があります。
テーブル1はT1、テーブル2はT2というような感じです。
そして、それぞれのカラム名を指定する時、テーブル同士で同じ名前のカラム名が使われている事もあるので、
T1.カラム名,T2.カラム名というふうに別名を付けて指定してあげます。
下記に、上二つのテーブルを結合してデータを取得するサンプルSQLを記載します。

SELECT
T1.ID, T1.NAME, T2.CAR_NAME
FROM
TBL_USER T1,
TBL_CAR T2
WHERE
T1.CODE = T2.CODE
ORDER BY T1.ID ASC 

上記SQLの取得結果は以下のようになります。

鈴木さんには、CODE 2 の普通車、山田さんには CODE 4 のバスという様にTBL_USERとTBL_CARのデータが結合されて取得されています。

※この場合、両方のテーブルの CODE カラムにデータが入っていないとデータを取得する事ができませんが、
 外部結合演算子(+) を利用すると、どちらかのテーブルの情報を全て取得して、もう片方のデータはあったら付けたすという事も可能です。