참고도서: 모두의 SQL(길벗) 6장 http://www.yes24.com/Product/Goods/64434562?OzSrank=1
모두의 SQL
난생처음 SQL로 데이터를 분석하고 가공해야 한다면? 초보자와 비전공자를 위한 가장 쉬운 SQL 입문서인터넷이 발전하고 페이스북과 같은 소셜 미디어가 활성화되면서 데이터로 모든 것을 말하
www.yes24.com
---- 모두의 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 |
댓글