外部結合

外部結合はそれぞれのテーブルの指定した列の値が一致するデータに加えてどちらかのテーブルにしか存在しないデータについても取得します。基本となる構文は次の2つが用意されています。
SELECT table_name.col_name, … lFROM tbl_name1   
  LEFT JOIN tbl_name2  ON tbl_name1.col_name1 = tbl_name2.col_name2
LEFT JOINではFROMの後に書かれたテーブルのデータだけを取得します。
SELECT table_name.col_name, … lFROM tbl_name1   
  RIGHT JOIN tbl_name2  ON tbl_name1.col_name1 = tbl_name2.col_name2
RIGHT JOINではJOINの後に書かれたテーブルのデータだけを取得します。
基本的に内部結合の場合と同じですが、外部結合では結合の対象となっているカラムの値が一致しているデータに加えて、カラムの値がどちらかのテーブルにしかなかった場合でもデータとして取得します。この時、どちらのテーブルのデータを取得するかで2つの構文が用意されています。
 
3テーブルの結合
SELECT table_name.col_name, … lFROM (tbl_name1   
  LEFT JOIN tbl_name2  ON tbl_name1.col_name1 = tbl_name2.col_name2) LEFT JOIN tbl_name3 ON tbl_name1.col_name1 = tbl_name3.col_name3

[Sample]

SELECT * FROM (material LEFT JOIN society ON material.society_id = society.society_id) LEFT JOIN material_option ON material.material_id = material_option.material_id WHERE app_number LIKE '%"abc"%' OR society_name LIKE '%"def"%' ORDER BY material_option.modified_time DESC

なお結合するカラムの名前が同じ場合にはONの代わりにUSINGを使用して次のように記述することもできます。
SELECT table_name.col_name, … lFROM tbl_name1   
  LEFT JOIN tbl_name2  USING ( col_name, col_name2, …)
SELECT table_name.col_name, … lFROM tbl_name1   
  RIGHT JOIN tbl_name2  USING ( col_name, col_name2, …)
「USING (col_name)」というのは「ON tbl_name1.col_name = tbl_name2.col_name」と同じことです。
 

内部結合

SELECT table_name.col_name, … lFROM tbl_name1   
  INNER JOIN tbl_name2  ON tbl_name1.col_name1 = tbl_name2.col_name2