모든 쿼리는 연습용 데이터베이스를 통해서 실행해 볼 수 있다. MySQL & SQL 스터디 준비 를 참고하여 실습환경을 구축하자.
MySQL LEFT JOIN
SQL에서 JOIN은 두 개 이상의 테이블을 관련 열을 기반으로 결합하는 방법이다. INNER JOIN, LEFT JOIN, RIGHT JOIN, CROSS JOIN, SELF JOIN등 다양한 결합 방법들이 있다. 여기에서는 LEFT JOIN을 다룬다.
LEFTER OUTER JOIN 이라고 부르기도 하는 LEFT JOIN은 왼쪽(LEFT) 테이블 의 모든 행을 검색해서 오른쪽 테이블에 일치하는 행을 반환한다. 일치하는 항목이 없을 경우에는 NULL을 포함한다.
LEFT JOIN Syntax
SELECT column_name(s)FROM table1
LEFTJOIN table2
ON table1.column_name = table2.column_name;
Example
"customers" 테이블에는 고객 정보가 들어있다.
CustomerID
ContactName
Address
City
Country
ALFKI
Maria Anders
Obere Str. 57
Berlin
Germany
ANATR
Ana Trujillo
Avda. de la Constitución 2222
México D.F.
Mexico
ANTON
Antonio Moreno
Mataderos 2312
México D.F.
Mexico
AROUT
Thomas Hardy
120 Hanover Sq.
London
UK
"orders" 테이블에는 주문정보가 들어있다.
OrderID
CustomerID
EmployeeID
OrderDate
ShippedDate
ShipName
10248
VINET
5
1994-08-04 00:00:00
1994-08-16 00:00:00
Vins et alcools Chevalier
10249
TOMSP
6
1994-08-05 00:00:00
1994-08-10 00:00:00
Toms Spezialitäten
10250
HANAR
4
1994-08-08 00:00:00
1994-08-12 00:00:00
Hanari Carnes
10251
VICTE
3
1994-08-08 00:00:00
1994-08-15 00:00:00
Victuailles en stock
고객관리 담당자는 DBA에게 각 1996년 01월 01일 이후의 고객별 주문정보를 보고해 달라고 요청했다. 이 문제는 아래와 같이 해결할 수 있다.
orders는 고객별 주문 정보가 있으며, 어떤 고객이 주문했는지는 CustomerID로 고객을 식별 할 수 있다.
따라서 customers 테이블에 있는 전체 CustomerID에 대해서 orders에 주문정보가 있는지를 조회하면 된다. 두개의 테이블은 CustomerID로 관계가 맺어져 있으므로 CustomerID로 조회하면 된다.
SELECT customers.ContactName, orders.OrderID
FROM customers LEFTJOIN orders ON customers.CustomerID = orders.CustomerID
WHERE orders.OrderDate >'1996-01-01 00:00:00'ORDERBY customers.ContactName;
DBA는 아래와 같이 각 고객별 주문 정보를 얻을 수 있다.
ContactName
OrderID
Alejandra Camino
10917
Alejandra Camino
11013
Alexander Feuer
10779
Alexander Feuer
10945
Ana Trujillo
10926
Anabela Domingues
10830
MySQL JOIN
SQL에서 Join은 두 개 이상의 테이블에서 서로 관계가 있는 컬럼을 기반으로 행을 결합하기 위해서 사용한다.
아래 Orders 테이블과 Customers 테이블을 보자.
orders table
OrderID
CustomerID
OrderDate
10248
VINET
1994-08-04 00:00:00
10249
TOMSP
1994-08-05 00:00:00
10250
HANAR
1994-08-08 00:00:00
10251
VICTE
1994-08-08 00:00:00
10252
SUPRD
1994-08-09 00:00:00
10253
HANAR
1994-08-10 00:00:00
10254
CHOPS
1994-08-11 00:00:00
customers table
CustomerID
ContactName
Country
City
ALFKI
Maria Anders
Germany
Berlin
ANATR
Ana Trujillo
Mexico
México D.F.
ANTON
Antonio Moreno
Mexico
México D.F.
AROUT
Thomas Hardy
UK
London
BERGS
Christina Berglund
Sweden
Luleå
BLAUS
Hanna Moos
Germany
Mannheim
BLONP
Frédérique Citeaux
France
Strasbourg
orders 테이블과 customers 테이블은 CustomerID 컬럼을 공통으로 가지고 있다. 즉 두 개의 테이블은 CustomerID로 관계(relationship)가 맺어져 있다. 우리는 CustomerID 컬럼을 이용해서 두 개의 테이블을 JOIN 하여 원하는 정보를 얻을 수 있다.
본사의 주문관리자가 고객 별 주문일자와 선적일자가 담긴 정보를 요청했다고 가정해보자. 아래와같이 INNER JOIN으로 레포트를 만들 수 있다.
SELECT orders.OrderID, customers.CustomerName, orders.OrderDate
FROM orders
INNERJOIN customers ON orders.CustomerID=customers.CustomerID;
OrderID
ContactName
OrderDate
ShippedDate
10248
Paul Henriot
1994-08-04 00:00:00
1994-08-16 00:00:00
10249
Karin Josephs
1994-08-05 00:00:00
1994-08-10 00:00:00
10250
Mario Pontes
1994-08-08 00:00:00
1994-08-12 00:00:00
10251
Mary Saveley
1994-08-08 00:00:00
1994-08-15 00:00:00
10252
Pascale Cartrain
1994-08-09 00:00:00
1994-08-11 00:00:00
10253
Mario Pontes
1994-08-10 00:00:00
1994-08-16 00:00:00
10254
Yang Wang
1994-08-11 00:00:00
1994-08-23 00:00:00
Join 유형
JOIN은 결합 방법에 따라 INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN 이 있다.
INNER JOIN : 한 테이블의 각 행을 다른 테이블의 모든 행과 비교하여 일치하는 행을 찾는다. 일치하는 행을 찾으면 두 테이블의 행을 단일 행으로 결합한다.
LEFT JOIN : 두 테이블 모두에서 일치하는 행만 반환하는 INNER JOIN과 달리 LEFT JOIN은 일치하지 않는 왼쪽(LEFT) 테이블의 결과도 반환한다. 이러한 행은 NULL 값을 가진다.
RIGHT JOIN : 두 테이블 모두에서 일치하는 행만 반환하는 INNER JOIN과 달리 RIGHT JOIN은 일치하지 않는 오른쪽(RIGHT) 테이블의 결과도 반환한다. 이러한 행은 NULL 값을 가진다.
CROSS JOIN : 양쪽 테이블의 모든 행을 반환한다. 특정 행이 다른 테이블의 모든 행과 join 되기 때문에 n x n의 결과가 반환된다. 한쪽 테이블의 행의 갯수가 10,000 이고 다른 하나의 행의 갯수가 100,000 이라면 10,000 x 100,000의 행이 반환될 수 있다. 자주 사용하는 join 유형은 아니다.
JOIN Syntax
SELECT column_name(s)FROM table1
INNERJOIN table2
ON table1.column_name = table2.column_name
모든 쿼리는 연습용 데이터베이스를 통해서 실행해 볼 수 있다. MySQL & SQL 스터디 준비 를 참고하여 실습환경을 구축하자.
MySQL LEFT JOIN
SQL에서 JOIN은 두 개 이상의 테이블을 관련 열을 기반으로 결합하는 방법이다. INNER JOIN, LEFT JOIN, RIGHT JOIN, CROSS JOIN, SELF JOIN등 다양한 결합 방법들이 있다. 여기에서는 LEFT JOIN을 다룬다.

LEFTER OUTER JOIN 이라고 부르기도 하는 LEFT JOIN은 왼쪽(LEFT) 테이블 의 모든 행을 검색해서 오른쪽 테이블에 일치하는 행을 반환한다. 일치하는 항목이 없을 경우에는 NULL을 포함한다.
LEFT JOIN Syntax
Example
"customers" 테이블에는 고객 정보가 들어있다.
"orders" 테이블에는 주문정보가 들어있다.
고객관리 담당자는 DBA에게 각 1996년 01월 01일 이후의 고객별 주문정보를 보고해 달라고 요청했다. 이 문제는 아래와 같이 해결할 수 있다.
orders는 고객별 주문 정보가 있으며, 어떤 고객이 주문했는지는 CustomerID로 고객을 식별 할 수 있다.
따라서 customers 테이블에 있는 전체 CustomerID에 대해서 orders에 주문정보가 있는지를 조회하면 된다. 두개의 테이블은 CustomerID로 관계가 맺어져 있으므로 CustomerID로 조회하면 된다.
DBA는 아래와 같이 각 고객별 주문 정보를 얻을 수 있다.
MySQL JOIN
SQL에서 Join은 두 개 이상의 테이블에서 서로 관계가 있는 컬럼을 기반으로 행을 결합하기 위해서 사용한다.
아래 Orders 테이블과 Customers 테이블을 보자.
orders table
customers table
orders 테이블과 customers 테이블은 CustomerID 컬럼을 공통으로 가지고 있다. 즉 두 개의 테이블은 CustomerID로 관계(relationship)가 맺어져 있다. 우리는 CustomerID 컬럼을 이용해서 두 개의 테이블을 JOIN 하여 원하는 정보를 얻을 수 있다.
본사의 주문관리자가 고객 별 주문일자와 선적일자가 담긴 정보를 요청했다고 가정해보자. 아래와같이 INNER JOIN으로 레포트를 만들 수 있다.
Join 유형
JOIN은 결합 방법에 따라 INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN 이 있다.
INNER JOIN : 한 테이블의 각 행을 다른 테이블의 모든 행과 비교하여 일치하는 행을 찾는다. 일치하는 행을 찾으면 두 테이블의 행을 단일 행으로 결합한다.
LEFT JOIN : 두 테이블 모두에서 일치하는 행만 반환하는 INNER JOIN과 달리 LEFT JOIN은 일치하지 않는 왼쪽(LEFT) 테이블의 결과도 반환한다. 이러한 행은 NULL 값을 가진다.
RIGHT JOIN : 두 테이블 모두에서 일치하는 행만 반환하는 INNER JOIN과 달리 RIGHT JOIN은 일치하지 않는 오른쪽(RIGHT) 테이블의 결과도 반환한다. 이러한 행은 NULL 값을 가진다.
CROSS JOIN : 양쪽 테이블의 모든 행을 반환한다. 특정 행이 다른 테이블의 모든 행과 join 되기 때문에 n x n의 결과가 반환된다. 한쪽 테이블의 행의 갯수가 10,000 이고 다른 하나의 행의 갯수가 100,000 이라면 10,000 x 100,000의 행이 반환될 수 있다. 자주 사용하는 join 유형은 아니다.
JOIN Syntax
참고
SQL Study With MySQL 에서 MySQL과 관련된 다른 문서들을 읽을 수 있습니다.
Recent Posts
Archive Posts
Tags