外部結合
SQLiteはRDBMS(Relational Data Base Management System)ですので結合を使うことがあるともいます。ややこしい結合に外部結合がありますがその例を紹介します
SELECTにあるJOINを使います。
※FOREIGN KEYを宣言していますが、PostgreSQLなどのような動作は致しません。
FOREIGN KEYを有効にするにはTriggerを別途登録する必要があります。
詳しくは本家サイトをご覧ください。
(さかな様ご指摘ありがとうございました)
外部結合を含むテーブル構造
関東テーブルと出身テーブルを作成します。出身テーブルには関東テーブルのIDを保持させます。
関東テーブルIDを利用して2つのテーブルを連結されます。
CREATE TABLE kantoh_tbl ( id INTEGER NOT NULL, name VARCHAR(32), PRIMARY KEY (id) )
| CID | 項目名 | 型名 | NOT NULL | 初期値 | キー |
| 0 | id | INTEGER | not null | PRIMARY | |
| 1 | name | VARCHAR(32) |
CREATE TABLE shushin_tbl ( id INTEGER NOT NULL, name VARCHAR(32), kantoh INTEGER, PRIMARY KEY (id), FOREIGN KEY(kantoh) REFERENCES kantho_tbl(id) )
| CID | 項目名 | 型名 | NOT NULL | 初期値 | キー |
| 0 | id | INTEGER | not null | PRIMARY | |
| 1 | name | VARCHAR(32) | |||
| 2 | kantoh | INTEGER |
外部結合の出力
以下のようなデータがあるとします。
|
|
単純に連結してデータを取得します。
SELECT sh.id, sh.name, ka.name as kantoh FROM shushin_tbl sh, kantoh_tbl ka WHERE sh.kantoh = ka.id;
| id | name | kantoh |
| 1 | tanaka | 東京都 |
| 3 | takahashi | 埼玉県 |
案の定意図した結果が得られませんでした。
原因はhujiyさんが関東以外の出身者だからです。
関東以外のデータが有りません。
しかし、空欄のままでもhujiyさんを表示させたいので
外部結合を行いNULLデータで情報を取得します。
SELECT sh.id, sh.name, ka.name as kantoh FROM shushin_tbl sh LEFT JOIN kantoh_tbl ka ON sh.kantoh = ka.id;
| id | name | kantoh |
| 1 | tanaka | 東京都 |
| 2 | hujiy | |
| 3 | takahashi | 埼玉県 |
やはり空欄のままだと収まりが悪いので'外部'の文字で埋めたいと思います。
coalesce関数を使って文字を入れてみました。
SELECT sh.id, sh.name, coalesce(ka.name,'外部') as kantoh FROM shushin_tbl sh LEFT JOIN kantoh_tbl ka ON sh.kantoh = ka.id;
| id | name | kantoh |
| 1 | tanaka | 東京都 |
| 2 | hujiy | 外部 |
| 3 | takahashi | 埼玉県 |
