■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 件のコメント:
コメントを投稿