OUTER JOIN은 SQL에서 두 테이블 간의 관계를 설정할 때, 한쪽 테이블에만 데이터가 있는 경우에도 모든 행을 포함할 수 있도록 도와주는 조인 방식입니다. INNER JOIN과 달리, 일치하지 않는 데이터도 함께 조회할 수 있는 것이 큰 특징입니다.
-- 기본 구문
SELECT columns
FROM table1
LEFT JOIN table2 ON table1.column = table2.column;
-- 예시: 모든 직원과 부서 정보 조회
SELECT e.empno, e.ename, d.dname
FROM emp e
LEFT JOIN dept d ON e.deptno = d.deptno;
-- 기본 구문
SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.column = table2.column;
-- 예시: 모든 부서와 소속 직원 조회
SELECT d.deptno, d.dname, e.empno, e.ename
FROM emp e
RIGHT JOIN dept d ON e.deptno = d.deptno;
SELF JOIN은 하나의 테이블을 스스로 조인하여 동일 테이블 내의 데이터를 결합할 때 사용하는 조인 방식입니다. SELF JOIN은 일반적으로 테이블 내의 두 행 간의 관계를 비교하거나, 계층 구조(예: 직원과 상사 관계)를 나타낼 때 유용합니다
-- 기본 구문
SELECT a.column, b.column
FROM table_name a
JOIN table_name b ON a.column = b.column;
-- 기본 예제
SELECT
e.empno AS 직원번호,
e.ename AS 직원이름,
m.empno AS 상사번호,
m.ename AS 상사이름
FROM emp e
LEFT JOIN emp m ON e.mgr = m.empno;
-- NULL 처리 추가
SELECT
e.empno AS 직원번호,
e.ename AS 직원이름,
IFNULL(m.ename, '관리자 없음') AS 관리자이름
FROM emp e
LEFT JOIN emp m ON e.mgr = m.empno;
-- 부서가 없는 직원 확인
SELECT e.*
FROM emp e
LEFT JOIN dept d ON e.deptno = d.deptno
WHERE d.deptno IS NULL;
-- 모든 부서와 직원 수 확인
SELECT
d.dname,
COUNT(e.empno) as 직원수
FROM dept d
LEFT JOIN emp e ON d.deptno = e.deptno
GROUP BY d.dname;
-- 3단계 조직도 구성
SELECT
e1.ename as 직원,
e2.ename as 직속상사,
e3.ename as 차상위상사
FROM emp e1
LEFT JOIN emp e2 ON e1.mgr = e2.empno
LEFT JOIN emp e3 ON e2.mgr = e3.empno;
-- 부하 직원 수 확인
SELECT
m.ename as 관리자,
COUNT(e.empno) as 부하직원수
FROM emp e
RIGHT JOIN emp m ON e.mgr = m.empno
GROUP BY m.ename;