기본 콘텐츠로 건너뛰기

조인과 서브쿼리

1. EMPLOYESS와 DEPT 을 JOIN하여 부서 번호, 부서명, 이름, 급여를 출력하라.
SELECT HR_EMPLOYEES.DEPARTMENT_ID, DEPARTMENT_NAME, LAST_NAME, SALARY FROM HR_EMPLOYEES INNER JOIN HR_DEPARTMENTS ON HR_EMPLOYEES.DEPARTMENT_ID = HR_DEPARTMENTS.DEPARTMENT_ID

2. 이름이 'HALL'인 사원의 부서명을 출력하라.
SELECT DEPARTMENT_NAME FROM HR_EMPLOYEES E, HR_DEPARTMENTS D WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID AND E.LAST_NAME='HALL'

3. 직원의 이름, 성, 상관 번호, 상관 이름, 성을 출력하라 출력하라.
SELECT E1.FIRST_NAME , E1.LAST_NAME, E1.MANAGER_ID, E2.FIRST_NAME, E2.LAST_NAME  FROM HR_EMPLOYEES E1, HR_EMPLOYEES E2 WHERE E1.MANAGER_ID = E2.EMPLOYEE_ID

4. DEPT Table 에는 존재하는 부서코드이지만 해당부서에 근무하는 사람이 존재하지 않는 경우의 결과를 출력하라.
SELECT * FROM HR_DEPARTMENTS WHERE DEPARTMENT_ID NOT IN(SELECT E.DEPARTMENT_ID FROM HR_EMPLOYEES E GROUP BY E.DEPARTMENT_ID HAVING COUNT(E.DEPARTMENT_ID) >0 )
               
5. 'ALLEN'의 직무와 같은 사람의 이름, 부서명, 급여, 직무를 출력하라.
 SQL> select e.ename, d.dname, e.sal, e.job
   from emp e, dept d
   where e.deptno = d.deptno
    and e.job = (select job from emp where ename = 'ALLEN')
   ;



6. 'JAMES'가 속해있는 부서의 모든 직원의 정보를 출력하라.
SELECT * FROM HR_EMPLOYEES WHERE DEPARTMENT_ID IN (SELECT DEPARTMENT_ID FROM HR_EMPLOYEES WHERE FIRST_NAME='JAMES')
     
7. 전체 사원의 평균 임금보다 많은 사원의 사원번호, 이름, 부서명, 입사일, 급여를 출력하라.
SELECT EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_NAME, HIRE_DATE, SALARY FROM HR_EMPLOYEES E, HR_DEPARTMENTS D WHERE E.DEPARTMENT_ID=D.DEPARTMENT_ID AND E.SALARY>=(SELECT AVG(SALARY) FROM HR_EMPLOYEES)

8. 50번 부서 사람들 중에서 80번 부서의 사원과 같은 업무를 하는 사원의 사원번호, 이름, 부서명, 입사일을 출력하라.
SELECT EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_NAME, HIRE_DATE FROM HR_EMPLOYEES E, HR_DEPARTMENTS D WHERE E.DEPARTMENT_ID=D.DEPARTMENT_ID
AND JOB_ID IN (SELECT JOB_ID FROM HR_EMPLOYEES WHERE DEPARTMENT_ID=80) AND E.DEPARTMENT_ID=50
 
9. 50번 부서 중에서 80번 부서에는 없는 업무를 하는 사원의 사원번호, 이름, 부서명, 입사일자을 출력하라.
SELECT EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_NAME, HIRE_DATE FROM HR_EMPLOYEES E, HR_DEPARTMENTS D WHERE E.DEPARTMENT_ID=D.DEPARTMENT_ID
AND JOB_ID NOT IN (SELECT JOB_ID FROM HR_EMPLOYEES WHERE DEPARTMENT_ID=80) AND E.DEPARTMENT_ID=50

10. 80번 부서에 근무하는 사원의 사원번호, 이름, 부서명, 입사일, 급여를 급여가 많은 순으로 출력하라.
SELECT EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_NAME, HIRE_DATE, SALARY FROM HR_EMPLOYEES E, HR_DEPARTMENTS D WHERE E.DEPARTMENT_ID=D.DEPARTMENT_ID AND E.DEPARTMENT_ID=80 ORDER BY SALARY DESC

11. 'JAMES'이나 'JOHN'의 급여와 같은 사원의 사원번호, 이름, 급여를 출력하라.
SELECT * FROM HR_EMPLOYEES WHERE SALARY IN (SELECT SALARY FROM HR_EMPLOYEES WHERE FIRST_NAME='JAMES' OR FIRST_NAME='JOHN')

12. 급여가 80번 부서의 최고 급여보다 높은 사원의 사원번호, 이름, 급여를 출력하라.
 SELECT * FROM HR_EMPLOYEES WHERE SALARY>(SELECT MAX(SALARY) FROM HR_EMPLOYEES WHERE DEPARTMENT_ID=80)

13. 급여가 80번 부서의 최저 급여보다 높은 사원의 사원번호, 이름, 급여를 출력하라.
 SELECT * FROM HR_EMPLOYEES WHERE SALARY>(SELECT MIN(SALARY) FROM HR_EMPLOYEES WHERE DEPARTMENT_ID=80)

댓글

이 블로그의 인기 게시물

2017 암호경진대회 4번

가장 쉽게 풀었죠. 30분도 안걸렸던거 같네요. 프로그램을 통해서 암호문의 유효성이 검증되는데요, 역공학을 통해서 암호문을 쉽게 찾을 수 있습니다. 답안  : Snow White and the Seven Dwarfs!. 풀이  : Oracle 함수가  CRC 를 계산하기 위해서는 중간에 평문이 복구될 것으로 보였다 .  제공하는  dll 을 이용하여  Oracle 함수의 입력으로 암호문을 넣은 프로그램을 작성하였다 . IDA 와  Immunity Debugger 를 이용해 프로그램을 역공학하여 얻을 수 있었다 .