데이터베이스 3일차_조인(2)(oracle, sql)
## SQL 조인문제
-- 오라클 구문, Ansi 표준 구문 두가지로 기술해 주세요.
EX1. 모든 사원의 이름, 부서 번호, 부서 이름을 표시하는 질의를 작성하시오.
SELECT E.last_name, E.DEPARTMENT_ID, D.DEPARTMENT_NAME
FROM EMP E , DEPT D
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID ;
SELECT E.last_name, E.DEPARTMENT_ID, D.DEPARTMENT_NAME
FROM EMP E join DEPT D
ON (E.DEPARTMENT_ID=D.DEPARTMENT_ID ) ;
EX2. 부서 60에 속하는 모든 사원의 이름과 부서이름을 표시하는 질의를 작성하시오.
SELECT E.LAST_NAME, D.DEPARTMENT_NAME
FROM EMP E, DEPT D
WHERE E.DEPARTMENT_ID = 60
AND E.DEPARTMENT_ID = D.DEPARTMENT_ID ;
SELECT E.LAST_NAME, D.DEPARTMENT_NAME
FROM EMP E JOIN DEPT D
ON (E.DEPARTMENT_ID = D.DEPARTMENT_ID)
WHERE E.DEPARTMENT_ID = 60 ;
EX3. 커미션을 받는 모든 사원의 이름과 부서이름을 표시하는 질의를 작성하시오.
SELECT E.LAST_NAME, D.DEPARTMENT_NAME
FROM EMP E, DEPT D
WHERE COMMISSION_PCT IS NOT NULL
AND E.DEPARTMENT_ID = D.DEPARTMENT_ID ;
SELECT E.LAST_NAME, D.DEPARTMENT_NAME
FROM EMP E JOIN DEPT D
ON (E.DEPARTMENT_ID = D.DEPARTMENT_ID)
WHERE COMMISSION_PCT IS NOT NULL ;
EX4. 이름에 A가 들어가는 모든 사원의 이름과 부서이름을 표시하는 질의를 작성하시오.
SELECT E.LAST_NAME, D.DEPARTMENT_NAME
FROM EMP E, DEPT D
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID
AND UPPER(E.last_name) LIKE '%A%' ;
SELECT E.LAST_NAME, D.DEPARTMENT_NAME
FROM EMP E JOIN DEPT D
ON (E.DEPARTMENT_ID = D.DEPARTMENT_ID)
WHERE UPPER(E.last_name) LIKE '%A%' ;
EX5. LOCATION_ID가 1700 에서 근무하는
모든 사원의 이름, 직위, 부서 번호 및 부서 이름을 표시하는 질의를 작성한다.
SELECT E.LAST_NAME, E.JOB_ID, E.DEPARTMENT_ID, D.DEPARTMENT_NAME
FROM EMP E, DEPT D
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID
AND D.LOCATION_ID = 1700 ;
SELECT E.LAST_NAME, E.JOB_ID, E.DEPARTMENT_ID, D.DEPARTMENT_NAME
FROM EMP E JOIN DEPT D
ON ( E.DEPARTMENT_ID = D.DEPARTMENT_ID )
WHERE D.LOCATION_ID = 1700 ;
EX6. 사원의 이름 및 사원 번호, 관리자(상사)의 이름과 관리자 번호와 함께 표시하고
열 레이블 각각 Employee, Emp#, Manager, Mgr#로 지정한다.
단, 매니저가 없는 사원도 출력하시오.
SELECT C.LAST_NAME AS "Employee", C.EMPLOYEE_ID AS "Emp#",
M.LAST_NAME AS "Manager", M.EMPLOYEE_ID AS "Mgr#"
FROM EMP C, EMP M
WHERE C.MANAGER_ID = M.EMPLOYEE_ID(+) ;
SELECT C.LAST_NAME AS "Employee", C.EMPLOYEE_ID AS "Emp#",
M.LAST_NAME AS "Manager", M.EMPLOYEE_ID AS "Mgr#"
FROM EMP C LEFT OUTER JOIN EMP M
ON ( C.MANAGER_ID = M.EMPLOYEE_ID ) ;
EX7. JOB_GRADES 테이블의 구조를 확인하고,
모든 사원의 이름, 직위, 부서 이름, 급여 및 등급을 표시하는 질의 작성하시오.
단, 급여가 많은 사원부터 출력하시오.
SELECT E.last_name, E.JOB_ID, D.DEPARTMENT_NAME, E.SALARY, S.GRADE_LEVEL
FROM EMP E, DEPT D, JOB_GRADES S
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID
AND E.SALARY BETWEEN LOWEST_SAL AND HIGHEST_SAL
ORDER BY E.SALARY DESC ;
SELECT E.last_name, E.JOB_ID, D.DEPARTMENT_NAME, E.SALARY, S.GRADE_LEVEL
FROM EMP E JOIN DEPT D
ON ( E.DEPARTMENT_ID = D.DEPARTMENT_ID )
JOIN JOB_GRADES S
ON ( E.SALARY BETWEEN LOWEST_SAL AND HIGHEST_SAL )
ORDER BY E.SALARY DESC ;
EX8. Chen 사원보다 늦게 입사한 사원의 이름과 입사일을 표시하는 질의를 작성 하시오.
SELECT E.last_name, E.HIRE_DATE
FROM EMP E, EMP B
WHERE B.last_name = 'Chen' AND B.HIRE_DATE < E.HIRE_DATE ;
SELECT LAST_NAME, HIRE_DATE
FROM EMP
WHERE HIRE_DATE > ( SELECT HIRE_DATE
FROM EMP
WHERE LAST_NAME = 'Chen' ) ;