MySQLの結合
「結合」の役割
複数のテーブルに対して1つのSQL命令でアクセスすることを可能にする
結合の種類
・内部結合
・左外部結合
・右外部結合
・FULL外部結合
・自己結合
・交差結合
内部結合
SELECT 列名 FROM テーブル名A INNER JOIN テーブル名B ON テーブル名A.列名A = テーブル名B.列名B ;
→テーブルAの列AとテーブルBの列Bの値が一致するレコードのみを選択し、すべての組み合わせを表示
左外部結合
SELECT 列名 FROM テーブル名A LEFT JOIN テーブル名B ON テーブル名A.列名A = テーブル名B.列名B ;
→テーブルAの列AとテーブルBの列Bの値が一致するレコード、およびテーブルAの全レコードを選択し、すべての組み合わせを表示
右外部結合
SELECT 列名 FROM テーブル名A RIGHT JOIN テーブル名B ON テーブル名A.列名A = テーブル名B.列名B ;
→テーブルAの列AとテーブルBの列Bの値が一致するレコード、およびテーブルBの全レコードを選択し、すべての組み合わせを表示
自己結合
SELECT 列名 FROM テーブル名 AS テーブル別名A INNER JOIN テーブル名 AS テーブル別名B ON テーブル別名A.列名A = テーブル別名B.列名B ;
→同じテーブルに別名をつけて、あたかも異なるテーブルであるかのように扱う
交差結合
SELECT 列名 FROM テーブル名A,テーブル名B ;
→テーブルAの全レコードに対してテーブルBの全レコードを組み合わせで結合する
3つ以上のテーブルを結合
SELECT 列名 FROM ( テーブル名A INNER JOIN テーブル名B ON テーブル名A.列名A = テーブル名B.列名B1 ) INNER JOIN テーブル名C ON テーブル名B.列名B2 = テーブル名C.列名C ;
ある問い合わせの結果に基づいて検索を行う(サブクエリ)
SELECT 列名A FROM テーブル名A WHERE 列名B ( SELECT 列名B FROM テーブル名B WEHRE 条件 ) ;
WHERE句以外でサブクエリを使う
・SELECT 列名 FROM ( サブクエリ ) WHERE句など ;
・SELECT ( サブクエリ ) FROM テーブル名 WHERE句など ;
→FROM句や取得列にサブクエリを使うことも可能
サブクエリとの組み合わせで利用するEXISTS演算子
SELECT 列名 FROM テーブル名A WHERE EXISTS ( SELECT 列名 FROM テーブル名B WHERE 条件 ) ;
複数テーブルのデータを統合(UNION句)
SELECT 列名 FROM テーブル名A UNION SELECT 列名 FROM テーブル名B ;
複数のテーブルからの項目を1つに統合し、重複は省く
$sql= "SELECT Address
FROM テーブル名A
WHERE 列名A='あいうえお'
UNION SELECT 列名B From テーブル名B
";
SELECT文の評価順序
FROM句
WHERE句
GROUP BY句
HAVING句
SELECT句
UNION、MINUS、INTERSECTなどの集合演算
ORDER BY句
…の順に評価される