記事インデックス

 

  • 外部結合

    内部結合では,フィールド同士 の値が一致する場合,結合を行いました.外部結合では,フィールド同士の値が一致した場合だけでなく,一致しなかったレコードについても抽出し結合を行います.具体的な例を示すために2つのテーブルを作成します.
    create table test1( key1 char(8), data1 int, data2 int, data3 int);+ エンターキー
    create table test2( key1 char(8), code1 char(8));+ エンターキー
    insert into test1 values('a001', 1, 2, 3);+ エンターキー
    insert into test1 values('a011', 1, 2, 3);+ エンターキー
    insert into test1 values('b002', 10, 20, 30);+ エンターキー
    insert into test1 values('c003', 100, 200, 300);+ エンターキー
    insert into test2 values('abc01', 'a001');+ エンターキー
    insert into test2 values('abc02', 'a011');+ エンターキー
    insert into test2 values('abc03', 'z999');+ エンターキー


    作成した結果,下図のようなテーブルが2つ作成されます.

    50 1


    1. 左結合(left join)

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

      まず具体例を示してから説明します.select test2.key1, code1, data1, data2, data3 from test2 left join test1 on test2.code1 = test1.key1;+ エンターキーと入力すると,下図のようなテーブルが得られます.
      51 1
      ここで,test2.code1を列挙すると{'a001', 'a011', 'z999'}であり,test1.key1を列挙すると{'a001', 'a011', 'b002', 'c003'}です.inner joinであれば,{'a001', 'a011'}が該当します.left joinの場合,test1.key1に該当するデータがあればそれと連結し,さらに無いデータ(ここでは'z999')については'NULL'という形でdata1からdata3をセットに含めます.
    2. 右結合(right join)

      select * from テーブル1 right join テーブル2 on 条件

      その名の通り,左結合の反対の動作をします.具体例を示します.select test2.key1, code1, data1, data2, data3 from test2 right join test1 on test2.code1 = test1.key1;+ エンターキーと入力すると,下図のようなテーブルが得られます.
      52 3

      左連結とは違い,test2.code1に該当するデータが無い場合(ここでは'b002'と'c003')について'NULL'という形 でtest2.key1およびtest2.code1をセットに含めます.さらに詳しい連結の方法を知りたい場合にはこちらのサイトがおすすめです.
  • JSN Teki is designed by JoomlaShine.com