[ Index ]

 

1. 내부 조인

(1) 일대다 관계      (2) INNER JOIN

2. 외부 조인

(1) LEFT JOIN      (2) RIGHT JOIN      (3) FULL JOIN

3. 기타 조인

(1) 상호 조인      (2) 자체 조인

 


 

 

 

 

1.  내부 조인

 

(1) 일대다 관계

조인이란 두 테이블을 묶어서 하나의 결과로 만드는 것을 말한다.

조인을 하기 위해서는 두 테이블이 일대다 관계를 가지고 있어야 한다.

그렇다면, 일대다 관계란 무엇일까?

 

일대다 관계란 한쪽 테이블에는 하나의 값만 가지고,

다른 쪽 테이블에는 여러 개의 값이 존재할 수 있는 관계이다.

 

한 쇼핑몰 데이터베이스에 회원들의 정보가 담긴 회원 테이블

구매 정보가 담기 구매 테이블이 있다고 할 때,

한 사람에 대한 회원 정보는 하나의 값만 있으면 되지만,

한 사람에 대한 구매는 여러 번 발생할 수 있으므로 여러 개의 값이 존재할 수 있다.

이러한 관계를 일대다 관계라고 한다!!

 

 

(2) INNER JOIN

내부 조인은 조인 중에 가장 많이 사용되는 조인 방법으로,

INNER JOIN을 그냥 JOIN이라고만 써도 된다.

조인에 대한 실습을 위해 다음과 같은 테이블을 생성했다.

 

회원 테이블(member)

아이디
(mem_id)
이름
(mem_name)
주소
(addr)
전화번호
(phone)
가입일자
(join_date)
A111 김태연 서울 11111111 2020-10-05
A222 김민준 대전 22222222 2021-11-24
B333 이서윤 대구 33333333 2021-08-03
B444 박서준 울산 44444444 2022-01-26
C555 최도윤 부산 55555555 2022-06-19
C666 이시우 서울 66666666 2022-12-08
D777 유주원 광주 77777777 2023-05-23
D888 임하은 부산 88888888 2023-10-15

구매 테이블(buy)

순번
(num)
아이디
(mem_id)
물품명
(pro_name)
분류
(class)
단가
(price)
수량
(amount)
1 C666 지갑   400 1
2 B333 원피스 패션 40 2
3 D888 노트북 디지털 1300 1
4 B333 가방 패션 100 1
5 C555 신발 패션 110 3
6 A111 신발 패션 200 2
7 C555 TV 디지털 4000 1
8 D888 라면 식품 11 5
9 B333 지갑   200 3
10 A111 아이패드 디지털 800 1
11 D888 케이크 식품 32 2
12 C666 햇반 식품 13 10

 

INNER JOIN을 이용해 회원 테이블과 구매 테이블을 연결해서 출력해 보자.

SELECT *
FROM buy
INNER JOIN member
ON buy.mem_id = member.mem_id;
Result

 

테이블명을 별칭으로 설정해 좀 더 간결하게 표현할 수도 있다.

SELECT B.mem_id, B.pro_name, M.addr, M.phone
FROM buy B
INNER JOIN member M
ON B.mem_id = M.mem_id;
Result

 

내부 조인은 두 테이블에 모두 있는 내용만을 연결해서 출력해 주기 때문에

두 테이블 중 하나의 테이블에만 있는 내용을 포함하고 싶다면, 외부 조인을 사용해야 한다.

 

 

 

 

2.  외부 조인

 

외부 조인은 두 테이블 중 한쪽 테이블에만 내용이 있어도 결과를 추출할 수 있다.

외부 조인에는 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN이 있으며,

OUTER를 생략하고 LEFT JOIN, RIGHT JOIN, FULL JOIN이라고 써도 된다.

 

(1) LEFT JOIN

LEFT JOIN은 왼쪽 테이블의 내용이 모두 출력된다.

즉 왼쪽 테이블의 내용을 모두 출력하고,

왼쪽 테이블에는 있지만 오른쪽 테이블에는 없는 값은 NULL로 표시한다.

SELECT M.mem_id, M.addr, M.phone, B.pro_name
FROM member M
LEFT JOIN buy B
ON M.mem_id = B.mem_id;
Result

 

 

(2) RIGHT JOIN

RIGHT JOIN은 오른쪽 테이블의 내용이 모두 출력된다.

즉 오른쪽 테이블의 내용을 모두 출력하고,

오른쪽 테이블에는 있지만 왼쪽 테이블에는 없는 값은 NULL로 표시한다.

-- (1) LEFT JOIN에서 RIGHT JOIN으로 변경
SELECT M.mem_id, M.addr, M.phone, B.pro_name
FROM member M
RIGHT JOIN buy B
ON M.mem_id = B.mem_id;  

-- (2) LEFT JOIN에서 RIGHT JOIN으로 바꾸고, 테이블의 위치도 변경
SELECT M.mem_id, M.addr, M.phone, B.pro_name
FROM buy B
RIGHT JOIN member M
ON M.mem_id = B.mem_id;
(1) Result (2) Result

※ LEFT JOIN과 RIGHT JOIN은 테이블의 위치만 바꿔주면 같은 결과를 얻을 수 있다.

 

 

(3) FULL JOIN

FULL JOIN은 LEFT JOIN과 RIGHT JOIN이 합쳐진 것으로,

왼쪽 테이블과 오른쪽 테이블 중 어느 한쪽에 내용이 들어 있으면 출력한다.

 

 

 

 

3.  기타 조인

 

(1) 상호 조인

상호 조인은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시킨다.

따라서, 상호 조인 결과의 전체 행 개수는 두 테이블의 행 개수를 곱한 것과 같다.

 

* 상호 조인의 특징 *

  • ON 구문을 사용할 수 없다.
  • 랜덤으로 조인한다.
  • 테스트를 위한 대용량 데이터 생성에 주로 사용한다.

 

SELECT COUNT(*)
FROM sakila.city;  -- (1) sakila.city 행 개수

SELECT COUNT(*)
FROM world.city;  -- (2) world.city 행 개수

SELECT COUNT(*)
FROM sakila.city
CROSS JOIN world.city;  -- (3) 상호 조인 결과 행 개수
(1) Result (2) Result (3) Result


600


4079


600 x 4079 = 2447400

 

 

(2) 자체 조인

자체 조인은 자기 자신과 조인하는 것이다.

자체 조인은 자주 사용되지는 않지만, 회사 조직도 테이블에서 주로 사용된다.

 

조직도 테이블(company)

직원(employee) 직속상관(manager) 연락처(phone)
김대표   0000
김이사 김대표 1111
박부장 김이사 2222
박과장 박부장 3333
최대리 박과장 4444
최주임 최대리 5555

 

위와 같은 조직도 테이블이 있다고 할 때, 자체 조인을 사용해

최대리의 직속상관과 직속상관의 연락처를 출력해 보자.

SELECT A.employee "직원", B.employee "직속상관", B.phone "직속상관연락처"
FROM company A
INNER JOIN company B
ON A.manager = B.employee
WHERE A.employee = '최대리';
Result

 

 

 

 


 

[ Reference ]

 

📙 우재남, 한빛미디어, 혼자 공부하는 SQL

 


 

 

'📖 STUDY > SQL' 카테고리의 다른 글

[EP.08] 테이블의 모든 것  (0) 2023.10.24
[EP.07] SQL 프로그래밍  (0) 2023.10.20
[EP.05] 데이터 형식  (0) 2023.10.17
[EP.04] 데이터 입력, 수정, 삭제  (0) 2023.10.16
[EP.03] ORDER BY, GROUP BY  (0) 2023.10.16

+ Recent posts