外部結合 |
|||
外部結合はそれぞれのテーブルの指定した列の値が一致するデータに加えてどちらかのテーブルにしか存在しないデータについても取得します。基本となる構文は次の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 |
|||
Leave a Reply