Tags
- distinct
- Tree
- Article & User
- Queue
- count
- 스택
- DB
- 백트래킹
- M:N
- stack
- 트리
- drf
- delete
- 이진트리
- 그리디
- update
- 큐
- 뷰
- ORM
- 쟝고
- Django
- create
- SQL
- 통계학
- outer join
- regexp
- migrations
- Vue
- N:1
- 완전검색
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Notice
Recent Posts
Link
데이터 분석 기술 블로그
FULL(OUTER) JOIN 절 본문
예를 들어, 아래와 같은 두 개의 테이블이 있다고 가정해 봅시다.
employees 테이블 (직원 정보):
employee_id | name | department_id |
1 | John | 101 |
2 | Alice | 102 |
3 | Bob | NULL |
departments 테이블 (부서 정보):
department_id | department_name |
101 | Sales |
102 | HR |
103 | Marketing |
여기서 employees 테이블은 직원 정보를 담고 있고, departments 테이블은 부서 정보를 담고 있습니다. 각 직원은 부서에 속해 있는데, 그 정보는 department_id를 통해 관리됩니다.
FULL JOIN이란?
FULL (OUTER) JOIN은 두 테이블의 모든 행을 반환합니다. 일치하는 값이 있으면 두 테이블에서 결합된 데이터를 반환하고, 일치하지 않는 값이 있으면 NULL로 채웁니다.
즉, LEFT JOIN과 RIGHT JOIN을 결합한 형태라고 볼 수 있습니다:
- LEFT JOIN은 왼쪽 테이블의 모든 데이터를 반환하고, 오른쪽 테이블에 일치하는 값이 없으면 NULL을 반환합니다.
- RIGHT JOIN은 오른쪽 테이블의 모든 데이터를 반환하고, 왼쪽 테이블에 일치하는 값이 없으면 NULL을 반환합니다.
- FULL JOIN은 두 테이블의 모든 행을 반환하고, 일치하지 않는 경우에도 NULL로 데이터를 채워 반환합니다.
우리는 employees 테이블과 departments 테이블을 FULL (OUTER) JOIN으로 결합해 모든 직원과 모든 부서 정보를 출력하고 싶습니다. 일치하지 않는 데이터가 있으면 NULL로 처리합니다.
SELECT employees.name, departments.department_name
FROM employees
FULL OUTER JOIN departments
ON employees.department_id = departments.department_id;
- employees 테이블에서 직원 이름을 가져옵니다.
- departments 테이블에서 부서 이름을 가져옵니다.
- **department_id**를 기준으로 두 테이블을 결합합니다.
- 두 테이블에서 일치하는 데이터는 결합되고, 일치하지 않는 데이터는 **NULL**로 표시됩니다.
name | department_name |
Jhon | Sales |
Alice | HR |
Bob | NULL |
NULL | Marketing |
- John은 department_id가 101이므로 Sales 부서에 속해 있습니다.
- Alice는 department_id가 102이므로 HR 부서에 속해 있습니다.
- Bob은 부서 정보가 없으므로 department_id가 NULL이고, **부서 정보도 NULL**로 표시됩니다.
- Marketing 부서(103)는 부서에 속한 직원이 없기 때문에, **직원 이름이 NULL**로 표시됩니다.
<수정>
직접 MySQL에서 사용해 본 결과 오류가 떴고 확인해 보니 MySQL에서는 FULL JOIN을 지원하지 않습니다.
그래서 union을 사용해야 합니다. 그래서 left join과 rigth join을 union 하는 형태로 쓰입니다.
SELECT column_name(s)
FROM table1 left join table2
ON table1.column_name = table2.column_name;
union
SELECT column_name(s)
FROM table1 right join table2
ON table1.column_name = table2.column_name;
'SQL > 개념' 카테고리의 다른 글
HAVING 절 (0) | 2024.09.13 |
---|---|
CROSS JOIN 절 (0) | 2024.09.05 |
RIGHT(OUTER) JOIN 절 (0) | 2024.09.03 |
LEFT(OUTER) JOIN 절 (0) | 2024.09.02 |
INNER JOIN 절 (0) | 2024.09.01 |