SQL Joins

概要

SQL Joins Overview

Inner Join

AとBの共通きょうつうデータ。

SELECT *
FROM A
INNER JOIN B ON A.KEY = B.KEY

Left Join

Aの部分ぶぶんデータのみ(Bとの交差こうさのぞく)。

SELECT *
FROM A
LEFT JOIN B ON A.KEY = B.KEY
WHERE B.KEY IS NULL

Right Join

Bの部分ぶぶんデータのみ(Aとの交差こうさのぞく)。

SELECT *
FROM A
RIGHT JOIN B ON A.KEY = B.KEY
WHERE A.KEY IS NULL

Full Outer Join

すべてのデータ(A ∪ B)

SELECT *
FROM A
FULL OUTER JOIN B ON A.KEY = B.KEY

AまたはBのみのデータ(交差を除く)

SELECT *
FROM A
FULL OUTER JOIN B ON A.KEY = B.KEY
WHERE A.KEY IS NULL OR B.KEY IS NULL

Natural Join

おな列名れつめい自動的じどうてきに JOIN をおこない、ON 条件じょうけん明示的めいじてき指定していする必要ひつようがない。

構文

SELECT *
FROM A
NATURAL JOIN B

employee と department テーブルを使用しよう共通列きょうつうれつDEPARTMENT_ID):

SELECT e.FULL_NAME, d.DEPARTMENT_NAME
FROM employee e
NATURAL JOIN department d

Inner Join の等価な書き方

SELECT e.FULL_NAME, d.DEPARTMENT_NAME
FROM employee e
INNER JOIN department d ON e.DEPARTMENT_ID = d.DEPARTMENT_ID
Natural Join はおな名前なまえすべてのれつ自動的じどうてきにマッチさせるため、予期よきしない結果けっかになる可能性かのうせいがある。ON 条件じょうけん明示的めいじてき使用しようすることを推奨すいしょうする。

デモテーブル

department テーブル

DEPARTMENT_IDDEPARTMENT_NAME
1Executive
2HR
3Sales
4Development
5Support
6Research

employee テーブル

EMPLOYEE_IDFULL_NAMEDEPARTMENT_IDROLEMANAGER_ID
1John Smith1CEO(null)
2Sarah Goodes1CFO1
3Wayne Ablett1CIO1
4Michelle Carey2HR Manager1
5Chris Matthews3Sales Manager2
6Andrew Judd4Development Manager3
7Danielle McLeod5Support Manager3
8Matthew Swan2HR Representative4
9Stephanie Richardson2Salesperson5
10Tony Grant3Salesperson5
11Jenna Lockett4Front-End Developer6
12Michael Dunstall4Back-End Developer6
13Jane Voss4Back-End Developer6
14Anthony Hird(null)Support7
15Natalie Rocca5Support7

location テーブル

LOCATION_IDOFFICE_NAMECITYCOUNTRY
1HeadquartersNew YorkUSA
2Main OfficeLondonUK
3Sales OfficeTokyoJapan
4Development OfficeSan FranciscoUSA
5Support OfficeSydneyAustralia
6Research OfficeBerlinGermany

3つのテーブルを結合

複数ふくすうテーブルの関連かんれんクエリで、employee、department、location テーブルを結合けつごうする。

シナリオ

従業員じゅうぎょういん名前なまえ所属しょぞく部門ぶもん、オフィスの場所ばしょ照会しょうかいする。

SELECT
    e.FULL_NAME,
    e.ROLE,
    d.DEPARTMENT_NAME,
    l.OFFICE_NAME,
    l.CITY,
    l.COUNTRY
FROM employee e
INNER JOIN department d ON e.DEPARTMENT_ID = d.DEPARTMENT_ID
INNER JOIN location l ON d.DEPARTMENT_ID = l.LOCATION_ID

結果例

FULL_NAMEROLEDEPARTMENT_NAMEOFFICE_NAMECITYCOUNTRY
John SmithCEOExecutiveHeadquartersNew YorkUSA
Sarah GoodesCFOExecutiveHeadquartersNew YorkUSA
Wayne AblettCIOExecutiveHeadquartersNew YorkUSA
Michelle CareyHR ManagerHRMain OfficeLondonUK
Matthew SwanHR RepresentativeHRMain OfficeLondonUK
Chris MatthewsSales ManagerSalesSales OfficeTokyoJapan
Tony GrantSalespersonSalesSales OfficeTokyoJapan

LEFT JOIN の使用

部門ぶもん場所ばしょがない従業員じゅうぎょういんふくめる場合ばあい

SELECT
    e.FULL_NAME,
    e.ROLE,
    d.DEPARTMENT_NAME,
    l.OFFICE_NAME
FROM employee e
LEFT JOIN department d ON e.DEPARTMENT_ID = d.DEPARTMENT_ID
LEFT JOIN location l ON d.DEPARTMENT_ID = l.LOCATION_ID
LEFT JOIN を使用しようする場合ばあい、マッチしないれつは NULL として表示ひょうじされる。たとえば Anthony Hird の DEPARTMENT_ID は NULL なので、DEPARTMENT_NAME と OFFICE_NAME は両方りょうほうとも NULL になる。

関連トピック