ある企業が顧客テーブル(customers)と注文テーブル(orders)を持つデータベースを運用している。顧客テーブルに存在する全顧客の氏名と、その顧客に紐づく注文金額(注文がない顧客は NULL)を取得したい場合、最も適切な JOIN の種類はどれか。
- A. LEFT OUTER JOIN:左テーブル(customers)の全行と、右テーブル(orders)の一致行を返す
- B. INNER JOIN:両テーブルに一致する行のみを返すため、注文のない顧客は除外される
- C. RIGHT OUTER JOIN:右テーブル(orders)の全行と、左テーブル(customers)の一致行を返す
- D. CROSS JOIN:全顧客と全注文の直積(全組み合わせ)を返す
解答と解説を見る
正解: A
LEFT OUTER JOIN(LEFT JOIN)は左側テーブルの全行を保持し、右側テーブルに一致する行があればその値を、なければ NULL を返す。顧客テーブルを左に置くことで、注文を持たない顧客も結果に含まれ、注文金額は NULL として表示される。INNER JOIN は両テーブルに一致する行のみを返すため、注文を1件も持たない顧客は結果から除外され要件を満たさない。RIGHT OUTER JOIN は注文テーブルの全行を保持するため、顧客なし注文(データ不整合がある場合)が含まれ意図と異なる。CROSS JOIN は全組み合わせを返すため、顧客数×注文数の大量のレコードが生成され要件に合致しない。