본문 바로가기
데이터 [Data]/SQL

SQL 조인 실습 코드

by 냉철하마 2021. 5. 14.

참고도서: 모두의 SQL(길벗) 6장 http://www.yes24.com/Product/Goods/64434562?OzSrank=1

 

모두의 SQL

난생처음 SQL로 데이터를 분석하고 가공해야 한다면? 초보자와 비전공자를 위한 가장 쉬운 SQL 입문서인터넷이 발전하고 페이스북과 같은 소셜 미디어가 활성화되면서 데이터로 모든 것을 말하

www.yes24.com

 

 

출처: HR 스키마 (Oracle Database 11g 교안)

---- 모두의 SQL 6장: 조인과 집합으로 여러 테이블 연결하기 ----
--- 1) 동등 조인(Inner Join)
SELECT TO_CHAR(e.hire_date, 'MM'), SUM(j.max_salary)
FROM EMPLOYEES E, JOBS J
WHERE (E.JOB_ID = J.JOB_ID)
GROUP BY TO_CHAR(e.hire_date, 'MM');

-- ANSI 조인
SELECT TO_CHAR(e.hire_date, 'MM'), SUM(j.max_salary)
FROM EMPLOYEES E INNER JOIN JOBS J ON (E.JOB_ID = J.JOB_ID)
GROUP BY TO_CHAR(e.hire_date, 'MM');

-- 예제 6-1
SELECT A.EMPLOYEE_ID, A.DEPARTMENT_ID, B.DEPARTMENT_NAME,
       C.LOCATION_ID, C.CITY
FROM EMPLOYEES A, DEPARTMENTS B, LOCATIONS C
WHERE A.DEPARTMENT_ID = B.DEPARTMENT_ID 
    AND B.LOCATION_ID = C.LOCATION_ID;

-- HR 스키마의 모든 테이블을 JOIN하기
-- 조인 조건에 따라 결과값이 다르게 출력
SELECT * 
FROM EMPLOYEES e, DEPARTMENTS d, LOCATIONS l, COUNTRIES c,
     REGIONS r, JOB_HISTORY j, JOBS j2
WHERE (e.department_id = d.department_id)
    AND (d.location_id = l.location_id)
    AND (l.country_id = c.country_id)
    AND (r.region_id = c.region_id)
    AND (j.department_id = e.department_id)
    AND (j.job_id = j2.job_id);
    
--- 2) 외부 조인(Outer Join)
-- LEFT JOIN, RIGHT JOIN, FULL JOIN
SELECT * FROM EMPLOYEES e, DEPARTMENTS d
WHERE (e.department_id(+) = d.department_id);

SELECT * FROM EMPLOYEES e RIGHT OUTER JOIN DEPARTMENTS d
         ON (e.department_id = d.department_id);  -- 위 조인과 동일한 결과

SELECT * FROM EMPLOYEES e FULL JOIN DEPARTMENTS d -- FULL OUTER JOIN
         ON (e.department_id = d.department_id);  -- OUTER 키워드 생략 가능

--- 3) 자체 조인(Self Join)
-- 예제 6-3. employees 테이블을 자체 조인하여 직원별 담당 매니저가 누구인지 조회
SELECT A.EMPLOYEE_ID, A.FIRST_NAME, A.LAST_NAME, A.MANAGER_ID,
       B.FIRST_NAME || ' ' || B.LAST_NAME MANAGER_NAME
FROM EMPLOYEES A, EMPLOYEES B
WHERE A.MANAGER_ID = B.EMPLOYEE_ID
ORDER BY A.EMPLOYEE_ID;

--- 4) 집합 연산자: 집합으로 연결하기
-- UNION, UNION ALL, INTERSECT, MINUS
-- 예제 6-4
SELECT DEPARTMENT_ID FROM EMPLOYEES
UNION
SELECT DEPARTMENT_ID FROM DEPARTMENTS;

-- 예제 6-5
SELECT DEPARTMENT_ID FROM EMPLOYEES
UNION ALL
SELECT DEPARTMENT_ID FROM DEPARTMENTS
ORDER BY DEPARTMENT_ID;

-- UNION ALL에서 WHERE절을 사용하기
SELECT DEPARTMENT_ID FROM EMPLOYEES
WHERE department_id > 100
UNION ALL
SELECT DEPARTMENT_ID FROM DEPARTMENTS
WHERE department_id > 200
ORDER BY 1;

-- 예제 6-6
SELECT DEPARTMENT_ID FROM EMPLOYEES
INTERSECT
SELECT DEPARTMENT_ID FROM DEPARTMENTS
ORDER BY DEPARTMENT_ID;

-- 예제 6-7
SELECT DEPARTMENT_ID FROM DEPARTMENTS
MINUS
SELECT DEPARTMENT_ID FROM EMPLOYEES;

(SELECT SALARY, LAST_NAME FROM EMPLOYEES
UNION
SELECT MANAGER_ID,DEPARTMENT_NAME FROM DEPARTMENTS)
MINUS
SELECT MIN_SALARY, JOB_ID FROM JOBS;

-- 추가예제
SELECT EMPLOYEE_ID FROM EMPLOYEES
MINUS
SELECT EMPLOYEE_ID FROM JOB_HISTORY;


'데이터 [Data] > SQL' 카테고리의 다른 글

SQL DML 실습 코드  (0) 2021.05.14
SQL 서브쿼리 실습 코드  (0) 2021.05.14
SQL 함수 실습 코드  (0) 2021.05.13
SQL SELECT문 실습 코드  (0) 2021.05.13
현직자와 함께 배우는 SQL: 코멘토 직무부트캠프 후기  (0) 2020.09.13

댓글