개발신의 한타

JOIN 완전 정리 (INNER JOIN, OUTER JOIN, LEFT JOIN, RIGHT JOIN) 본문

DATABASE

JOIN 완전 정리 (INNER JOIN, OUTER JOIN, LEFT JOIN, RIGHT JOIN)

슈퍼맨28호 2015. 10. 6. 05:10

예제 테이블

mysql> select * from demo_people;

name

phone 

pid 

 Mr brown

 01225 708225

 1

 Miss Smith

 01225 899360

 2

 Mr Pullen

 01380 724040

 3


mysql> select * from demo_property;

pid

spid

selling 

 1

 1

 Old House Fram

 3

 2

 The Willows

 3

 3

 Tali Trees

 3

 4

 the Melksham Florist

 4

 5

 Dun Roamin



1. 기본 JOIN (= INNER JOIN)

  - 기본적으로 JOIN은 교집합이다.

mysql> select name, phone, selling from demo_people join demo_property on demo_people.pid = demo_property.pid;

+-----------+--------------+----------------------+ | name | phone | selling | +-----------+--------------+----------------------+ | Mr Brown | 01225 708225 | Old House Farm | | Mr Pullen | 01380 724040 | The Willows | | Mr Pullen | 01380 724040 | Tall Trees | | Mr Pullen | 01380 724040 | The Melksham Florist | +-----------+--------------+----------------------+


2. LEFT JOIN

 - 왼쪽 테이블을 중심으로 오른쪽의 테이블을 매치시킨다.

 - 왼쪽 테이블의 한개의 레코드에 여러개의 오른쪽 테이블 레코드가 일치할 경우, 
   해당 왼쪽 레코드를 여러번 표시하게 된다.

 - 왼쪽은 무조건 표시하고, 매치되는 레코드가 오른쪽에 없으면 NULL을 표시한다.

mysql> select name, phone, selling from demo_people left join demo_property on demo_people.pid = demo_property.pid; 

+------------+--------------+----------------------+ | name | phone | selling | +------------+--------------+----------------------+ | Mr Brown | 01225 708225 | Old House Farm | | Miss Smith | 01225 899360 | NULL | | Mr Pullen | 01380 724040 | The Willows | | Mr Pullen | 01380 724040 | Tall Trees | | Mr Pullen | 01380 724040 | The Melksham Florist | +------------+--------------+----------------------+


3. RIGHT JOIN

 - 오른쪽 테이블을 중심으로 왼쪽 테이블을 매치시킨다.

 - LEFT JOIN에서 방향을 오른쪽으로만 바꾼것이므로, 역시 해당 레코드가 여러번 표시되거나, NULL이 표시된다.

mysql> select name, phone, selling from demo_people right join demo_property on demo_people.pid = demo_property.pid;

+-----------+--------------+----------------------+ | name | phone | selling | +-----------+--------------+----------------------+ | Mr Brown | 01225 708225 | Old House Farm | | Mr Pullen | 01380 724040 | The Willows | | Mr Pullen | 01380 724040 | Tall Trees | | Mr Pullen | 01380 724040 | The Melksham Florist | | NULL | NULL | Dun Roamin | +-----------+--------------+----------------------+


4. OUTER JOIN : 조건에 부합하지 않는 행까지도 포함시켜 결합하는 것

 - 기본적으로 LEFT, RIGHT 또는 FULL이 OUTER JOIN 이다.

 - FULL JOIN 은 사용할 일이 없으며, ODBC에 따라 지원하지 않는 경우도 있다.