코딩(Coding)/데이터베이스(SQL)

데이터베이스 3일차_조인(2)(oracle, sql)

펭볶 2021. 5. 3. 18:30
반응형

##  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' ) ;



728x90
반응형