【試して覚える】SQLite で Select 文入門(テーブル結合)

プログラミング入門
この記事は約6分で読めます。

前回は1つのテーブルに対してSelect文を実行するという、基本中の基本について解説しました。

今回は2つ以上のテーブルを結合する Join 文について説明したいと思います。

SQLを試すためのツールは、あらかじめ こちら からダウンロードをお願いします。

テーブル結合(Join)とは

テーブル結合とは、指定した条件で2つ以上のテーブルを連結し、1つのテーブルとして扱う方法のことです。

結合対象のテーブルに共通するカラムに対して、同じ値を持つレコード同士が結合されます。

書き方は次の通りです。

select * from table1 join table2 on 結合条件

結合条件は、前回の記事で説明した where の指定方法と同じですが、どのテーブルのカラム名かを指定する記述が余分に必要となります。

例えば、商品マスタ.商品コード や 商品仕様.商品コード という風に、テーブル名+ピリオド+カラム名で指定します。

これは、多くの場合、結合に使うカラム名が共通であることが理由です。

例えば、商品マスタと商品仕様という2つのテーブルを、「商品コード」で結合したい場合は次の様になります。

では、さっそくツールを使って検証してみましょう。

結果は以下の通りになります。

「商品コード」というカラム名で結合していますので、それぞれのテーブルにある「商品コード」のカラムが表示されるのですが、同じカラム名が重複する場合は自動的に番号が付加するようにツール側で処理していますので、「商品コード1」というカラム名になっています。

テーブル名の省略方法について

結合条件を記述する際、商品マスタ.商品コード = 商品仕様.商品コード などのように毎回テーブル名とカラム名を記述するのは面倒ですよね。

ということで、通常は省略文字を使って記述します。

省略の方法は簡単で、テーブル名を記述する際、空白を開けて任意の名前(1文字でも可)を記述しておくだけです。

例えば、商品マスタは m 、商品仕様は p という名前(文字)に置き換えたい場合は、次の用意に記述します。

もしよければ、ツール上でお試しください。

ちなみに、省略文字を考えるのも面倒と言う場合によく使うのが t に添え字を付ける方法です。

キー項目について

テーブルを結合する際の条件に指定するカラムのことを、キー とか キー項目と呼ぶことが有ります。

基本的に、結合条件に指定するカラムは、型を合わせてあげさえすれば、どのカラムを指定してもOKなのですが、データ量が多いテーブル同士を結合する場合、処理に時間が掛かることがあります。

そこで、通常は検索したいカラムに索引(=インデックス)を作っておくことで、検索の効率化(高速化)を図ります。

この索引(=インデックス)のことを、キーと呼ぶのですが、テーブル結合の条件にもキーを指定する事が多いため、キーとかキー項目という名前も使われています。

テーブル結合(Join)の種類

テーブル結合には、大きく分けて、外部結合、内部結合の2種類があり、結合した結果が異なります。

left join は外部結合とも呼ばれており、一方 inner join は外部結合とも呼ばれています。

ちなみに、先ほどの説明では join の前に left も inner も付けませんでしたが、join だけを指定した場合は 外部結合(left join)の扱いになります。

外部結合(left join)

最も一般的に使われる結合で、次の様に記述します。

select * from テーブル名1 left join テーブル名2 on 結合条件

左側に記述したテーブルを主に、右に書いたテーブルを結合することから、left join という書き方をします。

データベースの種類によっては、 outer join という記述ができるものもあります。

外部結合でテーブルを結合すると、左に書いたテーブルは全レコードが表示されますが、右に書いたテーブルに紐づくレコードが存在しない場合、その部分はNULLになります。

内部結合

内部結合は次の様に記述します。

select * from テーブル名1 left join テーブル名2 on 結合条件

内部結合でテーブルを結合すると、左右両方のテーブルに紐づくレコードのみ表示されるようになります。

抽出条件の指定

テーブル結合した結果に対して、特定の条件で絞り込みたい場合、where 区はどこにかけばいいでしょう?

答えは、全ての join が終わった後に書きます。

例えば、商品マスタと商品仕様を結合し、メーカーが SONY のものだけを抽出したい場合、次の様になります。

結果は以下の通りです。

ちなみに、テーブルを結合した結果、カラムが重複しない場合は、テーブル名を省略することができます。

今回の場合、 where m.メーカー = ‘SONY’ の部分から m. を省略できます。

では、折角テーブルを結合したので、結合相手のテーブル(商品仕様)だけに存在するカラムを使って検索してみましょう。

例えば、商品仕様にだけ存在する「幅」が 100~105 の範囲のものだけを抽出する場合、次の様に記述できます。

結果は次の通りです。

3つのテーブルを結合してみよう

では、最後に3つのテーブルを結合し、指定した条件で絞り込みを行ってみましょう。

ツールの初期データとして用意されているのは、下記の3テーブルであり、それぞれ商品コードが共通ですので、これを使って結合が可能です。

では、売上データを主にして、商品マスタと商品仕様を結合し、製品名に RX の文字が含まれていて、売上日が 2020/07/10 のデータを抽出してみましょう。

答えは次の様になります。

まとめ

今回はテーブル結合について解説しました。

趣味だけでの利用に限定するなら、テーブル結合を避けて通る事はできるかもしれませんが、実務で使う場合は数個のテーブルを結合するケースが多いので、これを知っていると出来る事の幅が広がると思います。

色々と試して理解の手助けになれば幸いです。

タイトルとURLをコピーしました