Python

Python初学者向け:SQLite3~テーブルの結合~

スポンサーリンク

 

この記事はこんな方におススメです
  • Pythonを始めたばかりで基本から学びたい方
  • Pythonの基本的な部分を速習してまずは全体像を把握しておきたい方

はじめに

今回はSQLiteのテーブルの結合について基本から解説します。テーブルの結合は左結合・右結合・内部結合・外部結合がありますが、SQLiteでサポートされているのは左結合と内部結合のみです。今回はこれらの使い方をみていきましょう。

今回もPythonを離れてSQLite3での操作となります。

結合の種類

結合は特定のKeyを参照してつなげる操作のことです。結合には大きくわけて以下の2つの種類があります。

  • 内部結合:Key列に共通の値がないレコードは破棄する
  • 外部結合:Key列に共通の値がないレコードも残す

さらに外部結合にはさらに3つに分けることができます。

  • 左外部結合:左側のデータのキーをすべて残す
  • 右外部結合:右側のデータのキーをすべて残す
  • 完全外部結合:すべてのキーを残す

このうち、SQLiteでサポートしているのは、内部結合と左外部結合のみとなります。順にみていくことにしましょう。

事前準備

前回作成した「chinook.db」を使うことにしましょう。

▶ データベース・テーブルを作成するには以下の記事をご覧ください。

このデータベースでは以下のような構成になっています。

tracksとalbumsを結合してみることにしましょう。keyとなるのは、AlbumIdですね。

ダイアグラム

それぞれのテーブルのレコード数を確認しておきましょう。

レコード数の確認

tracksテーブルは3503レコード、albumsは347レコードあるようです。

内部結合(INNER JOIN)

書式

まずは内部結合(INNER JOIN)からです。書式は次のようになります。

SELECT カラム名1,カラム名2,.. FROM テーブル名A
INNER JOIN テーブル名B ON テーブル名A.key名=テーブル名B.key名

これが基本となりますが、いくつか注意事項があります。SELECTのあとのカラム名はテーブルA,Bに共通のカラム名でなければ、カラム名を指定するだけOKです。一方、同じカラム名がある場合はテーブル名のあとに「.(ドット)」を続けて、そのあとにカラム名を書いて「テーブル名A.カラム名」「テーブル名B.カラム名」のようにします。

FROMのあとにくるテーブル名は左側のテーブル、INNER JOINのあとにくるテーブルが右側のテーブルとなります。(INNER JOINの場合は共通のkeyがあるレコードのみ抽出するのでどちらでも一緒です)

ONのあとにkeyとするカラム名を書きます。早速やってみましょう。

内部結合

内部結合(INNER JOIN)

SELECTのあとで抽出するカラムを指定します。ここでは「albums」テーブルのTitleカラムと「tracks」テーブルのNameカラムとします。カラム名が重複していないので「テーブル名.カラム名」ではなく、カラム名だけの指定ができます。

FROMのあとに左側に配置するテーブル名、INNER JOINのあとに右側に配置するテーブル名を書きます。

ONの後にkeyとなるカラム名を「=」でつなげます。ここでは、左のテーブルと右のテーブルでカラム名が同じなので、「テーブル名.カラム名」の形式で書きます。

うまくデータが抽出できていますね。SELECTの後のカラム名を「albums.Title」「tracks.Name」のように「テーブル名.カラム名」で明示的に書くこともできます。次のように同じ結果が得られます。

内部結合(INNER JOIN):テーブル名.カラム名で指定

このようにテーブル名を明示的に書くとわかりやすいですが、何度も書くことになるので少々面倒くさいですね。次のように省略して書くこともできます。

内部結合(INNER JOIN):省略した書き方

これは次のような書式になっています。

SELECT カラム名1,カラム名2,.. FROM テーブル名A l
INNER JOIN テーブル名B r ON テーブル名A.key名=テーブル名B.key名

赤線で示した箇所のように「FROM テーブル名」の後の文字が左側に配置したテーブル名を、「INNER JOIN テーブル名」の後の文字が右側に配置したテーブル名を表します。ここでは左側のテーブルを「l(eft)」、右側のテーブルを「r(ight)」としています。

左結合(LEFT JOIN)

書式

次に左結合をみてきましょう。書式は次のようになります。

SELECT カラム名1,カラム名2,.. FROM テーブル名A l
LEFT JOIN テーブル名B r ON テーブル名A.key名=テーブル名B.key名

内部結合のときの「INNER JOIN」が「LEFT JOIN」に変わっただけです。今回はいきなり省略形で書いています。(もう慣れましたよね?)

左結合

実際にやってみましょう。書式もほぼ一緒なので、実装の確認だけしておきましょう。同じテーブルを使うことにします。

左結合(LEFT JOIN)

うまくいきました。慣れてしまえば簡単ですね。

スポンサーリンク

まとめ

今回は結合を扱いました。SQLite3でサポートしているのは、内部結合と左結合の2つでした。書式の違いは内部結合(INNER JOIN)とするか左結合(LEFT JOIN)とするかだけでした。

基本的な書式のほかにテーブル名を置き換えることで、省略して表記する方法もご紹介しました。繰り返しテーブル名を書く必要があるときには、省略表記の方が楽なので使いこなせるようになっておきましょう。

コメント

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