우와한 개발자

[SQL] Oracle 전용 JOIN 문법 - EQUI / SELF / NON-EQUI / OUTER JOIN

by 우와한개발자

[ 예시 테이블 ]

  • 직원 테이블 EMPLOYEE
EMPLOYEE_ID EMPLOYEE_NAME DEPARTMENT_ID MANAGER_ID SALARY
1001 홍길동 10 NULL 3000
1002 김철수 20 1001 2500
1003 이영희 20 1001 2800
1004 박민수 NULL 1002 2200
1005 최지우 30 NULL 2600

 

  • 부서 테이블 DEPARTMENT
DEPARTMENT_ID DEPARTMENT_NAME
10 인사팀
20 개발팀
30 영업팀
40 총무팀

 

  • 급여등급 테이블 SALARY_GRADE
GRADE_LEVEL MIN_SALARY MAX_SALARY
1 0 1999
2 2000 2499
3 2500 2999
4 3000 9999

 

[ 오라클 전용 JOIN ]

  • FROM A, B 형식 사용
  • 조인 조건은 WHERE에 작성

 

1. EQUI JOIN

  • 조인 조건을 = 으로 연결하는 조인
  • WHERE 조건에서 둘 중 하나라도 값이 NULL이면 출력되지 않음
SELECT E.EMPLOYEE_ID,
       E.EMPLOYEE_NAME,
       E.DEPARTMENT_ID,
       D.DEPARTMENT_NAME
FROM EMPLOYEE E, DEPARTMENT D
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID;
EMPLOYEE_ID EMPLOYEE_NAME DEPARTMENT_ID DEPARTMENT_NAME
1001 홍길동 10 인사팀
1002 김철수 20 개발팀
1003 이영희 20 개발팀
1005 최지우 30 영업팀

 

2. SELF JOIN

  • 자기 자신 테이블과 조인
  • 별칭 필수
SELECT E.EMPLOYEE_ID   AS 직원번호,
       E.EMPLOYEE_NAME AS 직원이름,
       M.EMPLOYEE_NAME AS 관리자이름
FROM EMPLOYEE E, EMPLOYEE M
WHERE E.MANAGER_ID = M.EMPLOYEE_ID;
직원번호 직원이름 관리자이름
1002 김철수 홍길동
1003 이영희 홍길동
1004 박민수 김철수

 

3. NON-EQUI JOIN

  • = 이 아닌 조건으로 조인
  • 주로 BETWEEN, <, > 등 사용
SELECT E.EMPLOYEE_ID,
       E.EMPLOYEE_NAME,
       E.SALARY,
       S.GRADE_LEVEL
FROM EMPLOYEE E, SALARY_GRADE S
WHERE E.SALARY BETWEEN S.MIN_SALARY AND S.MAX_SALARY;
EMPLOYEE_ID EMPLOYEE_NAME SALARY GRADE_LEVEL
1001 홍길동 3000 4
1002 김철수 2500 3
1003 이영희 2800 3
1004 박민수 2200 2
1005 최지우 2600 3

 

4. OUTER JOIN

  • (+) 기호 사용 (두 테이블 중 한 곳에만 사용)
  • (+) 기호가 없는 테이블을 중심으로 JOIN
  • FULL OUTER JOIN 없음
-- 부서가 없어도 직원은 다 출력 (EMPLOYEE 기준)
SELECT E.EMPLOYEE_ID,
       E.EMPLOYEE_NAME,
       E.DEPARTMENT_ID,
       D.DEPARTMENT_NAME
FROM EMPLOYEE E, DEPARTMENT D
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID(+);
EMPLOYEE_ID EMPLOYEE_NAME DEPARTMENT_ID DEPARTMENT_NAME
1001 홍길동 10 인사팀
1002 김철수 20 개발팀
1003 이영희 20 개발팀
1004 박민수 NULL NULL
1005 최지우 30 영업팀

 

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기