## SQL - 조인(JOIN)
-- 부서테이블 복사
CREATE TABLE DEPT
AS
SELECT * FROM HR.DEPT;
-- 지역 테이블 복사
CREATE TABLE LOCATIONS
AS
SELECT * FROM HR.LOCATIONS;
-- JOB_GRADES 테이블 복사
CREATE TABLE JOB_GRADES
AS
SELECT * FROM HR.JOB_GRADES;
---------------------------------------
#조인
-하나 이상이 테이블을 합치는 것 (좌우로 합침)
-오라클 전용 조인, ANSI 표준 조인
# 조인의 유형
-EQUI JOIN (등가 조인 : INNER JOIN, NATURAL JOIN )
-NON EQUI JOIN
-OUTER JOIN
-SELF JOIN
-CROSS JOIN
# 오라클 전용 조인
-EQUIL JOIN
이름, 부서명 검색
SELECT LAST_NAME, DEPARTMENT_NAME
FROM EMP, DEPT
WHERE EMP.DEPARTMENT_ID=DEPT.DEPARTMENT_ID;
-OUTER JOIN
이름, 부서명 검색. 단, 사원은 모두 검색 => LEFT OUTER JOIN
SELECT LAST_NAME, DEPARTMENT_NAME
FROM EMP, DEPT
WHERE EMP.DEPARTMENT_ID=DEPT.DEPARTMENT_ID(+);
이름, 부서명 검색. 단, 부서는 모두 검색 => RIGHT OUTER JOIN
SELECT LAST_NAME, DEPARTMENT_NAME
FROM EMP, DEPT
WHERE EMP.DEPARTMENT_ID(+)=DEPT.DEPARTMENT_ID;
이름, 부서명 검색. 단, 사원, 부서 모두 검색 => FULL OUTER JOIN
SELECT LAST_NAME, DEPARTMENT_NAME
FROM EMP, DEPT
WHERE EMP.DEPARTMENT_ID(+)=DEPT.DEPARTMENT_ID(+);
==>지원 안함!!
----------------------------------------------------------------------------
# ANSI 표준 조인
--EQUIL JOIN
이름, 부서명 검색
SELECT LAST_NAME, DEPARTMENT_NAME
FROM EMP JOIN DEPT
ON (WHERE EMP.DEPARTMENT_ID=DEPT.DEPARTMENT_ID);
SELECT LAST_NAME, DEPARTMENT_NAME
FROM EMP JOIN DEPT using (DEPARTMENT_ID);
-OUTER JOIN
이름, 부서명 검색. 단, 사원은 모두 검색 => LEFT OUTER JOIN
SELECT LAST_NAME, DEPARTMENT_NAME
FROM EMP LEFT JOIN DEPT
ON (WHERE EMP.DEPARTMENT_ID=DEPT.DEPARTMENT_ID);
이름, 부서명 검색. 단, 부서는 모두 검색 => RIGHT OUTER JOIN
SELECT LAST_NAME, DEPARTMENT_NAME
FROM EMP RIGHT JOIN DEPT
WHERE (EMP.DEPARTMENT_ID=DEPT.DEPARTMENT_ID);
이름, 부서명 검색. 단, 사원, 부서 모두 검색 => FULL OUTER JOIN
SELECT LAST_NAME, DEPARTMENT_NAME
FROM EMP FULL JOIN DEPT
WHERE (EMP.DEPARTMENT_ID=DEPT.DEPARTMENT_ID);
** 조인시 성능 향상을 위한 팁 !
- JOIN, ORDER BY는 시간이 오래 걸린다...
- 테이블 별칭시 AS는 안쓴다!!
SELECT E.LAST_NAME, D.DEPARTMENT_NAME
FROM EMP JOIN DEPT D
ON (WHERE EMP.DEPARTMENT_ID=DEPT.DEPARTMENT_ID);
===============================
#NON-EQUI JOIN
이름, 월급, 월급레벨
SELECT E.LAST_NAME, E.SALARY,J.GRADE_LEVEL
FROM EMP E JOIN JOB_GRADES J
ON (E.SALARY BETWEEN J.LOWEST_SAL AND J.HIGHEST_SAL);
#SELF JOIN
-테이블의 별칭을 다르게 주어 일반적인 조인문법으로 조인한다.
사원이름, 직속상관이름
SELECT E1.LAST_NAME AS 사원이름,E2.LAST_NAME AS 직속상관이름
FROM EMP E1 JOIN EMP E2
ON(E1.MANAGER_ID=E2.EMPLOYEE_ID);
** 여러 테이블 조인하기
SELECT *
FROM A,B,C
WHERE A.a = B.b and B.c=C.c
SELECT *
FROM A join B on (A.a=B.b)
join C on (B.c=C.c);
'Lobo's study room > 오라클DB' 카테고리의 다른 글
[4일차]서브쿼리 (0) | 2022.02.10 |
---|---|
[3일차 과제]급여 최고액, 최저액, 총액, 평균 구하기 (0) | 2022.02.10 |
[2일차 과제]단일행 함수 (0) | 2022.02.10 |
[2일차]함수 (0) | 2022.02.10 |
[1일차 과제]select절과 쿼리 실행 순서 (0) | 2022.02.10 |