TIL#51 DB) 관계형 데이터베이스의 JOIN 연산자

luneah·2021년 12월 16일
0

Database

목록 보기
5/5
post-thumbnail

JOIN

관계형 데이터베이스에서는 중복 데이터를 피하기 위해서 데이터를 쪼개 여러 테이블로 나눠서 저장한다. 이렇게 분리되어 저장된 데이터에서 원하는 결과를 다시 도출하기 위해서는 여러 테이블을 조합할 필요가 있다. 관계형 데이터베이스에서는 조인(JOIN) 연산자를 사용해 관련 있는 컬럼 기준으로 행을 합쳐준다. LEFT JOIN과 INNER JOIN 이 두 가지를 절대적으로 많이 사용하고 나머지는 사용빈도가 적은 편이다.

조인의 종류

Example 테이블

mysql> select * from people;
idnamephone
1Mr Brown01225 708225
2Miss Smith01225 899360
3Mr Pullen01380 724040
mysql> select * from property;
idsellingpeople_id
1Old House Farm1
2The Willows3
3Tail Trees3
4The Melksham Florist3
5Dun Roamin4

1. INNER JOIN

기본적으로 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 | 
 +-----------+--------------+----------------------+

2. LEFT JOIN

  • 왼쪽 테이블을 중심으로 오른쪽의 테이블을 매치시킨다.
  • 왼쪽 테이블의 한 개의 레코드에 여러개의 오른쪽 테이블 레코드가 일치할 경우, 해당 왼쪽 레코드를 여러번 표시하게 된다.
  • 왼쪽은 무조건 표시하고 매치되는 레코드가 오른쪽에 없으면 NULL을 표시한다.
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 |
+------------+--------------+----------------------+

3. RIGHT JOIN

  • 오른쪽 테이블을 중심으로 왼쪽 테이블을 매치시킨다.
  • LEFT JOIN에서 방향을 오른쪽으로만 바꾼것이므로, 역시 해당 레코드가 여러번 표시되거나, NULL이 표시된다.
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           |
+-----------+--------------+----------------------+
profile
하늘이의 개발 일기

0개의 댓글

관련 채용 정보