데이터베이스

JOIN

sekong 2023. 12. 16. 16:43

JOIN은 2개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것이다.

  • INNER JOIN(내부 조인) : 2개의 테이블에 모두 지정한 열의 데이터가 있어야 한다.
  • OUTER JOIN(외부 조인): 1개의 테이블에만 데이터가 있어도 결과가 나온다.
  • CROSS JOIN(상호 조인): 한 쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인한다.
  • SELF JOIN(자체 조인): 자신과 자신을 조인하는 것으로 1개의 테이블을 사용한다.

FOOD_1
ID FOOD
1 돈까스
2 치킨
3 삼겹살
4 초밥

 

FOOD_2  
ID FOOD
1 방어
2 돈까스
3 떡볶이
4 치킨

 

INNER JOIN

SELECT <COL>
FROM <TABLE_1> <Alias>
	INNER JOIN <TABLE_2> <Alias>
	ON <JOIN CONDITION>
WHERE <SEARCH CONDITION>
SELECT * 
FROM FOOD_1 A
	INNER JOIN FOOD_2 B
	ON A.FOOD_1 = B.FOOD_2;

결과

A.ID  A.FOOD_1  B.ID B.FOOD_2
1 돈까스 2 돈까스
2 치킨 4 치킨

 

OUTER JOIN

 

- LEFT OUTER JOIN

SELECT <COL>
FROM <TABLE_1> <Alias>
	LEFT OUTER JOIN <TABLE_2> <Alias>
	ON <JOIN CONDITION>
SELECT * 
FROM FOOD_1 A
		LEFT OUTER JOIN FOOD_2 B
	ON A.FOOD_1 = B.FOOD_2;

결과

A.ID  A.FOOD_1 B.ID  B.FOOD_1
1 돈까스 2 돈까스
2 치킨 4 치킨
3 삼겹살 (NULL) (NULL)
4 초밥 (NULL) (NULL)

 

- LEFT OUTER JOIN_(LEFT ONLY )

SELECT <COL>
FROM <TABLE_1> <Alias>
	LEFT OUTER JOIN <TABLE_2> <Alias>
	ON <JOIN CONDITION>
WHERE <TABLE B.KEY IS NULL>
SELECT * 
FROM FOOD_1 A
	LEFT OUTER JOIN FOOD_2 B
	ON A.FOOD_1 = B.FOOD_2
WHERE B.ID IS NULL;

결과

A.ID  A.FOOD_1 B.ID  B.FOOD_1
3 삼겹살 (NULL) (NULL)
4 초밥 (NULL) (NULL)

 

- RIGHT OUTER JOIN

SELECT <COL>
FROM <TABLE_1> <Alias>
	RIGHT OUTER JOIN <TABLE_2> <Alias>
	ON <JOIN CONDITION>
SELECT * 
FROM FOOD_1 A
	RIGHT OUTER JOIN FOOD_2 B
	ON A.FOOD_1 = B.FOOD_2;

결과

A.ID A.FOOD_1  B.ID B.FOOD_1 
1 돈까스 2 돈까스
2 치킨 4 치킨
(NULL) (NULL) 1 방어
(NULL) (NULL) 3 떡볶이

 

- RIGHT OUTER JOIN_(RIGHT ONLY)

SELECT <COL>
FROM <TABLE_1> <Alias> 
	RIGHT OUTER JOIN <TABLE_2> <Alias>
	ON <JOIN CONDITION>
WHERE <TABLE A.KEY IS NULL>
SELECT * 
FROM FOOD_1 A
	RIGHT OUTER JOIN FOOD_2 B
	ON A.FOOD_1 = B.FOOD_2
WHERE A.ID IS NULL;

결과

A.ID A.FOOD_2 B.ID B.FOOD_2
(NULL) (NULL) 1 방어
(NULL) (NULL) 3 떡볶이

 

- FULL OUTER JOIN

SELECT <COL>
FROM <TABLE_1> <Alias>
	FULL OUTER JOIN <TABLE_2> <Alias>
	ON <JOIN CONDITION>
SELECT * 
FROM FOOD_1 A
	FULL OUTER JOIN FOOD_2 B
	ON A.FOOD_1 = B.FOOD_2

결과

A.ID A.FOOD_2 B.ID B.FOOD_2
1 돈까스 1 방어
2 치킨 2 돈까스
3 삼겹살 3 떡볶이
4 초밥 4 치킨

 

- FULL OUTER JOIN_(OUTER ONLY)

SELECT <COL>
FROM <TABLE_1> <Alias>
	FULL OUTER JOIN <TABLE_2> <Alias>
	ON <JOIN CONDITION>
WHERE <TABLE B.KEY IS NULL
				OR TALBE A.KEY IS NULL>
SELECT * 
FROM FOOD_1 A
	FULL OUTER JOIN FOOD_2 B
	ON A.FOOD_1 = B.FOOD_2
WHERE A.FOOD_1 IS NULL 
	OR B.FOOD_2 IS NULL

결과

A.ID  A.FOOD_1 B.ID  B.FOOD_1
(NULL) (NULL) 1 방어
(NULL) (NULL) (NULL) (NULL)
3 삼겹살 3 떡볶이
4 초밥 (NULL) (NULL)

 

- CROSS JOIN

SELECT <COL>
FROM <TALBE_1> <Alias>
	CROSS JOIN <TABLE_2> <Alias>
SELECT * 
FROM FOOD_1 A
	CROSS JOIN FOOD_2 B

결과

A.ID A.FOOD_2 B.ID B.FOOD_2
1 돈까스 1 방어
1 돈까스 2 돈까스
1 돈까스 3 떡볶이
1 돈까스 4 치킨
2 치킨 1 방어
2 치킨 2 돈까스
2 치킨 3 떡볶이
2 치킨 4 치킨
3 삼겹살 1 방어
3 삼겹살 2 돈까스
3 삼겹살 3 떡볶이
3 삼겹살 4 치킨
4 초밥 1 방어
4 초밥 2 돈까스
4 초밥 3 떡볶이
4 초밥 4 치킨

 

- SELF JOIN

SELECT <COL>
FROM <TABLE_1> <Alias>
	INNER JOIN <TABLE_1> <Alias>

 

 

 

'데이터베이스' 카테고리의 다른 글

정규화  (0) 2024.01.07
SQL vs NoSQL  (0) 2023.12.24
키(Key)  (1) 2023.11.19
데이터베이스 기초  (0) 2023.11.18