rakutoネット
お問合せ 免責事項 Q&A 掲示板 サイト管理 リンク サイトマップ
HOME > SQLiteでの外部結合

SQLiteでの外部結合


外部結合

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

外部結合の出力

以下のようなデータがあるとします。
id name
1群馬県
2栃木県
3茨城県
4千葉県
5埼玉県
6神奈川県
7東京都
id name kantoh
1tanaka7
2hujiy
3takahashi5

単純に連結してデータを取得します。

SELECT 
    sh.id,
    sh.name,
    ka.name as kantoh
FROM
    shushin_tbl sh,
    kantoh_tbl ka
WHERE
    sh.kantoh = ka.id;

id name kantoh
1tanaka東京都
3takahashi埼玉県


案の定意図した結果が得られませんでした。

原因は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
1tanaka東京都
2hujiy
3takahashi埼玉県


やはり空欄のままだと収まりが悪いので'外部'の文字で埋めたいと思います。

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
1tanaka東京都
2hujiy外部
3takahashi埼玉県


<<SQLiteのシーケンス設定
SQLite Tips SQLiteでの日付データ>>

PHPリング

@PHP.ring Home
<5 <1 Random List 1> 5>

rktSQLite

  • sourceforge.jp

広告


アマゾン検索

サーチ:
Amazon.co.jpアソシエイト

カテゴリ

  •  Templateエンジンのすすめ Templateエンジンのすすめ
  •  SQLiteをやってみよう SQLiteをやってみよう
  •  SQLite SQLコマンド一覧 SQLiteコマンド一覧
  •  SQLite 管理プログラムSQLite 管理
  •  はじめてのEclipse はじめてのEclipse
  •  PHP SQLiteのTIPS PHP SQLiteのTIPS
  •  サンプル サンプル/ダウンロード
  •  リンク リンク
  •  掲示板 掲示板

メニュー

  •  SQLiteのシーケンス設定
  •  SQLiteでの外部結合
  •  SQLiteでの日付データ
  •  SQLiteでの日付関数
  •  SQLiteでの年齢計算
  •  SQLiteでのalter

キーワード検索

キーワード



最近のTB

  •  2006/03/13さくらのブログに挑戦[rakutoネットブログ]
  •  2006/01/20レーザーチャートの作成方法[脳内研究所]

Summary

  •     ATOM(XML)
  •     RDF(XML)
  •     RSS0.92(XML)
  •     RSS2.0(XML)

Powered by

  •     PHP
  •     Smarty
  •     SQLite
  •     MySQL
Copyright (C) 2005 `rakuto.net' All Rights Reserved.