【SQL入門】OUTER JOIN句で外部結合|SQL Bolt⑦ 和訳・演習解答

OUTER JOINを使って外部結合

本記事では、海外のSQL学習サイト【SQL Bolt】を利用して、データベース初心者向けにSQLの基本を解説します。

第7回は「SQL Lesson 7: OUTER JOINs」、複数の表を外部結合する方法についてです。

今回のポイント
  • 外部結合はLEFT JOIN、RIGHT JOIN、FULL JOINの3種類
  • SQL文では「FROM テーブル名」の次に記述する
  • INNER/LEFT/RIGHT/FULLによって、データの保持方法が異なる
目次

ざっくり日本語訳

今回は、前回学んだ内部結合(INNER JOIN)とは反対の意味の、外部結合(OUTER JOIN)を学びます。

外部結合の種類とSQL文の書き方

Lesson6で使用した「INNER JOIN」では、両方のテーブルに属するデータだけが結果に出力されました。

しかし、実際には2つのテーブルに非対称なデータがあることがあります。

こむぎ

例えば「片方の表には存在するが、もう片方の表には存在しないデータがある」という場合です

テーブルを結合するとき必要なデータが結果から取り残されないようにするため、以下の3種類の外部結合があります。

  1. LEFT JOIN
  2. RIGHT JOIN
  3. FULL JOIN

記述する順番

SELECT DISTINCT 列名1, 列名2, …
FROM テーブル1
INNER/LEFT/RIGHT/FULL JOIN テーブル2
ON テーブル1.列名a = テーブル2.列名b
WHERE 条件
ORDER BY (並び替えたい)列名 ASC/DESC
LIMIT 取り出したい行数 OFFSET 取り出し開始位置;

INNER JOINと同様に、これら3つの結合でも、データを結合する列を指定する必要があります。

LEFT / RIGHT / FULLの違い

テーブルAとテーブルBを結合する場合の処理の違いはこちらです。

スクロールできます
LEFT JOINBに一致する行があるかどうかに関係なく、単純にAの行を保持する
RIGHT JOINAで一致する行があるかどうかに関係なく、単純にBの行を保持する
FULL JOIN一致する行がもう一方のテーブルにあるかどうかに関係なく、両方のテーブルの行が保持される

これらの外部結合を使用する場合、実際には結果や制約のNULLを処理するための細かい条件を記述する必要があります。

こむぎ

詳しくは次のレッスンで!

演習問題の和訳・解答

1. Find the list of all buildings that have employees

【和訳】従業員がいるすべての建物を取り出してください。

SELECT * FROM Employees
    LEFT JOIN Buildings
        ON Employees.Building = Buildings.Building_name
    GROUP BY Employees.Building;
2. Find the list of all buildings and their capacity

【和訳】すべての建物とその収容人数のリストを取り出してください。

SELECT * FROM Buildings;
こむぎ

問2は簡単すぎるので、出題ミスかな…?という感じもしますね

3. List all buildings and the distinct employee roles in each building (including empty buildings)

【和訳】すべての建物と、各建物における従業員の明確な役割をリストアップしてください(空の建物も含む)。

SELECT Distinct Building_name,Role FROM Buildings
    LEFT JOIN Employees
        ON Buildings.Building_name = Employees.Building;
OUTER JOINを使って外部結合

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次