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 |