Contents
1. JOIN 개요1️⃣ JOIN 기초 개념2️⃣ JOIN은 반드시 식별자 관계만 가능한가?3️⃣ JOIN의 종류2. EQUI JOIN(등가 조인)과 Non EQUI JOIN(비등가 조인)1️⃣ EQUI JOIN의 기초 개념2️⃣ Non EQUI JOIN의 기초 개념3️⃣ EQUI JOIN과 Non EQUI JOIN3. 3개 이상의 TABLE JOIN1️⃣ 3개 이상의 TABLE JOIN2️⃣ 3개 이상의 TABLE JOIN 예4. NATURAL JOIN1️⃣ NATURAL JOIN 기초 개념2️⃣ 공통된 칼럼명이 여러 개인 경우의 NATURAL JOIN3️⃣ NATURAL JOIN 예5. USING 조건절1️⃣ USING 조건절 기초 개념2️⃣ USING 조건절 예3️⃣ ON 조건절과 USING 조건절의 차이6. CROSS JOIN1️⃣ CROSS JOIN 기초 개념2️⃣ CROSS JOIN 예1. JOIN 개요
1️⃣ JOIN 기초 개념
1) JOIN
- 데이터를 서로 연결해서 볼 수 있는 방법
- 데이터를 연결해 주는 연결고리(식별자)를 통해 두 가지 다른 정보를 한데 모아 볼 수 있음
2) 문법
SELECT 별칭1.칼럼명, 별칭2.칼럼명
FROM 테이블1 AS 별칭1 JOIN 테이블2 AS 별칭2
ON 별칭1.칼럼명 = 별칭2.칼럼명;2️⃣ JOIN은 반드시 식별자 관계만 가능한가?
- 그렇지는 않음!
- 일반적으로 주식별자(PK)나 보조식별자(FK) 값의 연관에 의해 조인 이루어짐
- 하지만 식별자 관계없이 논리적인 값들의 연관만으로도 JOIN 이루어질 수 있음
- 데이터의 정합성과 의미를 신중히 고려해야 함
3️⃣ JOIN의 종류
- STUDENT 테이블
ID | NAME | DEPTNO | ENROLL_DATE | GRADE |
1 | John | 10 | 2023-01-01 | 90 |
2 | Jane | 20 | 2022-02-01 | 85 |
3 | Jim | 10 | 2023-03-01 | 88 |
4 | Jake | 30 | 2023-04-01 | 92 |
5 | Jill | NULL | 2023-05-01 | 75 |
- DEPARTMENT 테이블
DEPTNO | DNEME |
10 | Computer Science |
20 | Mathematics |
30 | Physics |
40 | Chemistry |
1) INNER JOIN
- 두 테이블 간의 공통된 값을 가진 행만 반환
- INNER 생략 가능 (INNER JOIN = JOIN)
SELECT S.ID, S.NAME, D.DNAME
FROM STUDENT S INNER JOIN DEPARTMENT D
ON S.DEPTNO = D.DEPTNO;ID | NAME | DNAME |
1 | John | Computer Science |
2 | Jane | Mathematics |
3 | Jim | Computer Science |
4 | Jake | Physics |
2) LEFT OUTER JOIN
- 왼쪽 테이블의 모든 행과 오른쪽 테이블의 공통된 값을 가진 행을 반환
- 오른쪽 테이블에 일치하는 값이 없으면 NULL로 표시
- OUTER 생략 가능 (LEFT OUTER JOIN = LEFT JOIN)
SELECT S.ID, S.NAME, D.DNAME
FROM STUDENT S LEFT OUTER JOIN DEPARTMENT D
ON S.DEPTNO = D.DEPTNO;ID | NAME | DNAME |
1 | John | Computer Science |
2 | Jane | Mathematics |
3 | Jim | Computer Science |
4 | Jake | Physics |
5 | Jill | NULL |
- (오라클) WHERE 조건에서 (+) 기호를 기준이 되는 반대쪽 칼럼에 붙이면 LEFT OUTER JOIN과 같은 결과
- LEFT OUTER JOIN, (+) 두 문법 모두 사용 가능
SELECT S.ID, S.NAME, D.DNAME
FROM STUDENT S, DEPARTMENT D
WHERE S.DEPTNO = D.DEPTNO(+);ID | NAME | DNAME |
1 | John | Computer Science |
2 | Jane | Mathematics |
3 | Jim | Computer Science |
4 | Jake | Physics |
5 | Jill | NULL |
3) RIGHT OUTER JOIN
- 오른쪽 테이블의 모든 행과 왼쪽 테이블의 공통된 값을 가진 행을 반환
- 왼쪽 테이블에 일치하는 값이 없으면 NULL로 표기
- OUTER 생략 가능 (RIGHT OUTER JOIN = RIGHT JOIN)
SELECT S.ID, S.NAME, D.DNAME
FROM STUDENT S RIGHT OUTER JOIN DEPARTMENT D
ON S.DEPTNO = D.DEPTNO;ID | NAME | DNAME |
1 | John | Computer Science |
2 | Jane | Mathematics |
3 | Jim | Computer Science |
4 | Jake | Physics |
NULL | NULL | Chemitry |
- (오라클) WHERE 조건에서 (+) 기호를 기준이 되는 반대쪽 칼럼에 붙이면 RIGHT OUTER JOIN과 같은 결과
- RIGHT OUTER JOIN, (+) 두 문법 모두 사용 가능
SELECT S.ID, S.NAME, D.DNAME
FROM STUDENT S, DEPARTMENT D
WHERE S.DEPTNO(+) = D.DEPTNO;ID | NAME | DNAME |
1 | John | Computer Science |
2 | Jane | Mathematics |
3 | Jim | Computer Science |
4 | Jake | Physics |
NULL | NULL | Chemitry |
4) FULL OUTER JOIN
- 두 테이블의 모든 행을 반환
- 공통된 값이 없는 경우에도 각각의 테이블에서 행을 반환하고 NULL로 표시
- OUTER 생략 가능 (FULL OUTER JOIN = FULL JOIN)
SELECT S.ID, S.NAME, D.DNAME
FROM STUDENT S FULL OUTER JOIN DEPARTMENT D
ON S.DEPTNO = D.DEPTNO;ID | NAME | DNAME |
1 | John | Computer Science |
2 | Jane | Mathematics |
3 | Jim | Computer Science |
4 | Jake | Physics |
5 | Jill | NULL |
NULL | NULL | Chemitry |
5) UNION
- JOIN의 종류는 아니지만, 두 테이블을 결합할 때 자주 사용
- 두 쿼리의 결과 집합을 합치되, 중복된 행이 있다면 중복 행을 제거하고 유일한 하나의 행만 출력
- 중복된 행을 모두 표시하고 싶을 때는 UNION ALL 사용
SELECT ID, NAME, DEPTNO
FROM STUDENT
UNION
SELECT DEPTNO AS ID, DNAME AS NAME, NULL AS DEPTNO
FROM DEPARTMENT;ID | NAME | DEPTNO |
1 | John | 10 |
2 | Jane | 20 |
3 | Jim | 10 |
4 | Jake | 30 |
5 | Jill | NULL |
10 | Computer Science | NULL |
20 | Mathematics | NULL |
30 | Physics | NULL |
40 | Chemitry | NULL |
- 주의사항
- 각 쿼리의 칼럼 개수와 데이터 유형이 동일해야 함
- 각 칼럼의 이름이 동일할 필요는 없지만 의미상으로는 일치해야 함
※ FULL OUTER JOIN vs UNION vs UNION ALL
항목 | FULL OUTER JOIN | UNION | UNION ALL |
데이터 결합 방식 | 두 테이블의 모든 행 결합 | 두 쿼리의 결과 집합 합침 | 두 쿼리의 결과 집합 합침 |
중복 처리 | 중복된 행 포함 | 중복된 행 제거 | 중복된 행 포함 |
NULL 처리 | 어느 한쪽에만 존재하는 행은 NULL로 채움 | 중복된 행은 한 번만 포함 | 각 쿼리의 결과에 포함된 NULL 값 그대로 유지 |
사용 목적 | 두 테이블 간의 모든 데이터 결합 | 여러 쿼리의 결과를 하나로 결합 | 여러 쿼리의 결과를 중복 포함하여 하나로 결합 |
2. EQUI JOIN(등가 조인)과 Non EQUI JOIN(비등가 조인)
1️⃣ EQUI JOIN의 기초 개념
1) EQUI JOIN
- 두 테이블을 특정 열의 값이 동일한 행을 기준으로 결합하는 조인 방식
ON절에서 두 열의 값이 같은지 확인하는 조건 사용
- 가장 일반적인 형태의 조인 중 하나
INNER JOIN과 동일한 방식으로 작동
- SQL에서 등가 조인은 일반적으로
=연산자를 사용해 수행
2) 문법
SELECT A.열1, B.열2
FROM 테이블A AS A JOIN 테이블B AS B
ON A.공통열 = B.공통열;2️⃣ Non EQUI JOIN의 기초 개념
1) Non EQUI JOIN
- 두 테이블을 결합할 때
=연산자가 아닌 다른 비교 연산자(>,<,>=,<=,!=, 등)를 사용하는 조인 방식
- 두 테이블 간의 관계가 단순히 동일한 값이 아니라, 범위나 다른 조건에 따라 결합되어야 할 때 사용
2) 문법
SELECT A.*, B.*
FROM 테이블A AS A JOIN 테이블B AS B
ON A.비교열 연산자 B.비교열;3️⃣ EQUI JOIN과 Non EQUI JOIN
- NEW_STUDENT 테이블
ID | NAME | SCORE |
1 | John | 85 |
2 | Jane | 92 |
3 | Jim | 78 |
4 | Jake | 89 |
5 | Mike | 90 |
6 | Anna | 80 |
- NEW_DEPARTMENT 테이블
DEPT_ID | MIN_SCORE | MAX_SCORE | GRADE |
1 | 90 | 100 | A |
2 | 80 | 89 | B |
3 | 70 | 79 | C |
1) EQUI JOIN
SELECT S.ID, S.NAME, S.SCORE, D.DEPT_ID, D.GRADE
FROM NEW_STUDENT S JOIN NEW_DEPARTMENT D
ON S.SCORE = D.MIN_SCORE;ID | NAME | SCORE | DEPT_ID | GRADE |
5 | Mike | 90 | 1 | A |
6 | Anna | 80 | 2 | B |
2) Non EQUI JOIN
SELECT S.ID, S.NAME, S.SCORE, D.DEPT_ID, D.GRADE
FROM NEW_STUDENT S JOIN NEW_DEPARTMENT D
ON S.SCORE BETWEEN D.MIN_SCORE AND D.MAX_SCORE;ID | NAME | SCORE | DEPT_ID | GRADE |
3 | Jim | 78 | 3 | C |
6 | Anna | 80 | 2 | B |
1 | John | 85 | 2 | B |
4 | Jake | 89 | 2 | B |
5 | Mike | 90 | 1 | A |
2 | Jane | 92 | 1 | A |
3. 3개 이상의 TABLE JOIN
1️⃣ 3개 이상의 TABLE JOIN
- 두 개의 테이블을 조인하는 방식과 동일하게, 각 테이블 간의 관계를 정의하여 연결
- 각 조인의 결과를 다음 조인에 사용하는 방식으로 여러 테이블을 연속적으로 조인
2️⃣ 3개 이상의 TABLE JOIN 예
SELECT O.ORDER_ID, O.ORDER_DATE, E.FIRST_NAME, E.LAST_NAME, C.NAME, C.ADDRESS
FROM ORDERS O JOIN EMPLOYEES E
ON O.SALESMAN_ID = E.EMPLOYEE_ID
JOIN CUSTOMERS C
ON O.CUSTOMER_ID = C.CUSTOMER_ID;4. NATURAL JOIN
1️⃣ NATURAL JOIN 기초 개념
1) NATURAL JOIN
- 두 테이블 간의 공통 열을 자동으로 사용하여 조인을 수행하는 SQL 조인 방식
- 조인 조건을 명시적으로 지정할 필요 없음 (두 테이블에 동일한 이름을 가진 모든 열이 조인 조건으로 사용됨)
SELECT *
FROM 테이블A NATURAL JOIN 테이블B- 공통된 칼럼명이 하나일 때 사용하는 것이 좋음
2️⃣ 공통된 칼럼명이 여러 개인 경우의 NATURAL JOIN
- 오류 발생하거나, 결과값이 없거나, 예상치 못한 방식으로 조인되어 결과 테이터가 이상하게 나올 수 있음
3️⃣ NATURAL JOIN 예
SELECT *
FROM EMP NATURAL JOIN DEPT;➡️ 공통 칼럼이 한 번만 나옴
5. USING 조건절
1️⃣ USING 조건절 기초 개념
1) USING 조건절
- SQL에서 조인을 수행할 때 두 테이블 간의 공통 칼럼을 명시적으로 지정하는 방법
2) 문법
SELECT *
FROM 테이블A JOIN 테이블B
USING(공통 칼럼);2️⃣ USING 조건절 예
SELECT *
FROM EMP A JOIN DEPT B
USING(DEPTNO);3️⃣ ON 조건절과 USING 조건절의 차이
구분 | ON | USING |
조건 표현 | 자유로운 조건식 가능 | 동일한 컬럼명만 지정 |
컬럼명 요구 | 달라도 됨 | 양쪽 테이블 컬럼명이 반드시 동일 |
결과 컬럼 | 컬럼 중복 유지 | 조인 컬럼 하나로 합쳐짐 |
표현력 | 매우 유연 | 제한적이지만 간결 |
6. CROSS JOIN
1️⃣ CROSS JOIN 기초 개념
1) CROSS JOIN
- 두 테이블 간의 모든 행을 조합하여 결과 집합을 만드는 조인 방식
- 두 테이블의 카테시안 곱(Cartesian product)을 생성
- 조인 조건이 없으며, 모든 가능한 행의 조합이 결과 집합에 포함됨
2) 문법
SELECT *
FROM 테이블A CROSS JOIN 테이블B;2️⃣ CROSS JOIN 예
1) 교재 예시
SELECT *
FROM EMP CROSS JOIN DEPT;2) 간단한 예시
- 테이블 A (색상)
color |
Red |
Blue |
- 테이블 B (사이즈)
size |
S |
M |
L |
- CROSS JOIN 쿼리
SELECT *
FROM A CROSS JOIN B;- 결과 (카테시안 곱)
color | size |
Red | S |
Red | M |
Red | L |
Blue | S |
Blue | M |
Blue | L |
Share article