관계형 데이터베이스에서는 중복 데이터를 피하기 위해서 데이터를 쪼개 여러 테이블로 나눠서 저장한다. 이렇게 분리되어 저장된 데이터에서 원하는 결과를 다시 도출하기 위해서는 여러 테이블을 조합할 필요가 있다. 관계형 데이터베이스에서는 조인(JOIN) 연산자를 사용해 관련 있는 컬럼 기준으로 행을 합쳐준다. LEFT JOIN과 INNER JOIN 이 두 가지를 절대적으로 많이 사용하고 나머지는 사용빈도가 적은 편이다.
mysql> select * from people;
id | name | phone |
---|---|---|
1 | Mr Brown | 01225 708225 |
2 | Miss Smith | 01225 899360 |
3 | Mr Pullen | 01380 724040 |
mysql> select * from property;
id | selling | people_id |
---|---|---|
1 | Old House Farm | 1 |
2 | The Willows | 3 |
3 | Tail Trees | 3 |
4 | The Melksham Florist | 3 |
5 | Dun Roamin | 4 |
기본적으로 JOIN은 교집합이다.
mysql> select name, phone, selling
from people JOIN property
on people.id = property.people_id;
+-----------+--------------+----------------------+
| 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 |
+-----------+--------------+----------------------+
mysql> select name, phone, selling
from people LEFT JOIN property
on people.id = property.people_id;
+------------+--------------+----------------------+
| 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 |
+------------+--------------+----------------------+
mysql> select name, phone, selling
from people RIGHT JOIN property
on people.id = property.people_id;
+-----------+--------------+----------------------+
| 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 |
+-----------+--------------+----------------------+