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句
…の順に評価される