JOIN 기반 메커니즘
조인 기반 메커니즘
1. 조인의 개요와 데이터 집합 레벨 변화
개요
데이터 집합 레벨의 변화
1:M 조인 시 결과 집합은 M집합의 레벨을 따라간다.
실습 문제 풀기
실습 환경에 대한 설명
emp_salary_his, emp_dept_his : 과거 급여, 소속 부서 이력 테이블
emp, dept : 직원의 현재 소속 부서, 부서 정보가 담긴 테이블, Master 테이블
실습 문제
직원 정보와 직원이 속한 부서명을 가져오기
1 2 3
select emp.*, dept.dname from hr.emp as emp join hr.dept as dept on emp.deptno = dept.deptno
job이 SALESMAN인 직원정보와 직원이 속한 부서명을 가져오기
1 2 3 4
select emp.*, dept.dname from hr.emp as emp join hr.dept as dept on emp.deptno = dept.deptno where emp.job = 'SALESMAN'
부서명 SALES와 RESEARCH의 소속 직원들의 부서명, 직원번호, 직원명, JOB 그리고 과거 급여 정보 추출
1 2 3 4 5
select dept.dname, emp.empno, emp.ename, emp.job, sal_his.sal rom hr.emp as emp join hr.dept as dept on emp.deptno = dept.deptno join hr.emp_salary_hist as sal_his on sal_his.empno = emp.empno where dept.dname in ('SALES', 'RESEARCH')
- 위의 문제에서 emp는 dept에게 M집합, emp_salary_hist는 emp에게 M집합이므로 최종 M집합은 emp_salary_hist가 된다.
- 조인 결과, emp_salary_hist의 sal을 기준으로 중복된 값들이 생성된 것을 볼 수 있다.
부서명 SALES와 RESEARCH의 소속 직원들의 부서명, 직원번호, 직원명, JOB 그리고 과거 급여 정보중 1983년 이전 데이터는 무시하고 데이터 추출
1 2 3 4 5 6 7
select dept.dname, emp.empno, emp.ename , emp.job, sal_his.sal, sal_his.fromdate, sal_his.todate from hr.emp as emp join hr.dept as dept on emp.deptno = dept.deptno join hr.emp_salary_hist as sal_his on sal_his.empno = emp.empno where dept.dname in ('SALES', 'RESEARCH') and sal_his.fromdate >= to_date('19830101', 'yyyymmdd') /* order by 1, 2, 3, sal_his.fromdate */
부서명 SALES와 RESEARCH 소속 직원별로 과거부터 현재까지 모든 급여를 취합한 평균 급여
1 2 3 4 5 6 7 8 9 10 11 12
with member_sal as ( select dept.dname, emp.empno, emp.ename , emp.job, sal_his.sal, sal_his.fromdate, sal_his.todate from hr.emp as emp join hr.dept as dept on emp.deptno = dept.deptno join hr.emp_salary_hist as sal_his on sal_his.empno = emp.empno where dept.dname in ('SALES', 'RESEARCH') and sal_his.fromdate >= to_date('19830101', 'yyyymmdd') /* order by 1, 2, 3, sal_his.fromdate */ ) select empno, max(ename) as ename, avg(sal) as avg_sal from member_sal group by empno
직원명 SMITH의 과거 소속 부서 정보를 구할 것
1 2 3 4 5
select emp.empno, emp.ename, dept_his.fromdate, dept_his.todate, dept.dname from hr.emp as emp join hr.emp_dept_hist as dept_his on dept_his.empno = emp.empno join hr.dept as dept on dept.deptno = dept_his.deptno where emp.ename = 'SMITH'
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.



