2009/04/04

複数のテーブルを利用する

■2つのテーブルのレコードを集めて表示
(SELECT カラム名1 FROM テーブル名1) UNION (SELECT カラム名2 FROM テーブル名2);
3つ以上のテーブルの場合もUNIONでつなげる
条件をつけてカラムを抽出する場合、
SELECT * FROM tb WHERE bang NOT IN('A101');
重複を省く場合、
UNION ALL

■複数のテーブルを結合して表示する(内部結合
内部結合は、「JOIN」(あるいはINNER JOIN)により、キーが一致しているレコードだけを取り出す

SELECT カラム名 FORM テーブル1 JOIN 結合するテーブル2
   ON テーブル1のカラム=テーブル2のカラム;
カラム名が同じ場合、
   USING(カラム名);
テーブルが2つ以上の場合、
SELECT ~ FROM
テーブル名1
JOIN テーブル名2 結合の条件
JOIN テーブル名3 結合の条件
・・・
;

■複数のテーブルの全てのレコードを表示する(外部結合
外部結合は、一致していなくても一方のテーブルのレコードはすべての取り出す
※存在しない値は、「NULL」になる

・左外部結合(LEFT JOIN または LEFT OUTER JOIN)
一致したレコード+テーブル1の全データ
SELECT カラム名 FROM テーブル1
LEFT JOIN 結合するテーブル2
ON テーブル1のカラム= テーブル2のカラム;

・右外部結合(RIGHT JOIN または RIGHT OUTER JOIN)
一致したレコード+テーブル2の全データ
SELECT カラム名 FROM テーブル1
RIGHT JOIN 結合するテーブル2
ON テーブル1のカラム= テーブル2のカラム;

自己結合
同じカラム名が2つ表示されてエラーになるため、必ずエイリアスをつける
SELECT カラム名 FROM テーブル名 AS エイリアス1 JOIN テーブル名 AS エイリアス2;

自己結合の活用法
・すべての組み合わせを表示し、そこから条件をつけて必要なものを選べる
(順位付けをするにはORDERとGROUPを組み合わせて処理する必要がある)
SELECT a.nama,a.tosi,COUNT(*) FROM tb1 AS b WHERE a.tosi<=b.tosi GROUP BY a.bang;

0 件のコメント:

コメントを投稿