第7章 結合
7.1 クロス結合
単純に2つのテーブルの全ての行の組み合わせを得るにはFROM にテーブル名を2つ書く。
SELECT 列名 FROM テーブル1,テーブル2
例:
SELECT * FROM shouhin,uriage
この場合、全行の全組み合わせが表示される。 しかし、これは通常は意味が無い。
7.2 WHEREを用いた結合
クロス結合に対し、WHERE を用いて意味がある行だけを絞り込む。
SELECT 列名 FROM テーブル1,テーブル2 WHERE テーブル1.列名 = テーブル2.列名;
例:
SELECT * FROM shouhin,uriage WHERE shouhin.sid = uriage.sid;
両テーブルに同名の sid があるので、単に sid と書くとどちらのテーブルのsidか判断できない。このようなときには テーブル名.列名 のように書く。
行抽出の条件を付けるには AND でつなげる。
例:
SELECT * FROM shouhin,uriage WHERE shouhin.sid = uriage.sid AND uriage.sid=1;
7.3 JOINを用いた結合
WHEREによる結合では指定した条件が結合のための条件か、行抽出のための条件かの区別が付きにくい。 JOIN句を使うと、それをはっきり区別できる。
2つのテーブルをJOIN を用いて結合
SELECT 列名 FROM テーブル1 JOIN テーブル2 ON テーブル1.列名 = テーブル2.列名;
例:
SELECT * FROM shouhin JOIN uriage ON shouhin.sid = uriage.sid;
行抽出の条件はWHERE で付ける
例:
SELECT * FROM shouhin JOIN uriage ON shouhin.sid = uriage.sid WHERE uriage.sid=1;
7.4 外部結合
2つのテーブルをJOIN を用いて結合した際、両方にある行しか出力対象とされない。
片方のテーブルを常に出力する場合、外部結合(OUTER JOIN)を行う。例えば、LEFT OUTER JOIN を行うと右側に書いたテーブルにある行は全て出力される(OUTERは省略可能)。右側のテーブルに対象がない場合、項目は全てNULLとされる。
例:
SELECT * FROM shouhin LEFT JOIN uriage ON shouhin.sid = uriage.sid;
7.5 3つのテーブルの結合
WHEREで3つのテーブルを結合するときには、FROMに全てのテーブル名を書き、WHEREでの条件を2つ書いてANDで結合する。
SELECT * FROM seito,kekka,test
WHERE seito.seitoid = kekka.seitoid AND
test.tid = kekka.tid
JOINの場合、それぞれのテーブルをJOINで指定する。
SELECT * FROM seito
JOIN kekka ON seito.seitoid = kekka.seitoid
JOIN test ON test.tid = kekka.tid