본문 바로가기

오답노트/DBMS

데이터베이스(Oracle)_서브쿼리(subQuery) 연습문제

▶문제1

 

월급이 가장 적은 사람의 fist_name, last_name 을 출력하라

    

1
2
3
4
SELECT e.FIRST_NAME , e.LAST_NAME 
FROM EMPLOYEES e 
WHERE e.SALARY = (SELECT min(salary) FROM EMPLOYEES e)
;
cs

    

 

▶문제2

 

월급이 가장 많은 사람의 first_name, last_name, job_title을 출력하라 

 

1
2
3
4
5
SELECT e.FIRST_NAME, e.LAST_NAME , j.JOB_TITLE 
FROM EMPLOYEES e 
     LEFT OUTER JOIN JOBS j ON e.JOB_ID  = j.JOB_ID 
WHERE e.SALARY  = (SELECT max(SALARY) FROM EMPLOYEES e)
;
cs

 

 

▶문제3

 

EMPLOYEES 테이블에서 Kochhar의 급여보다 많은 사원의 정보를 사원번호, 이름, 담당업무(job_id), 급여를 출력하라

 

1
2
3
4
5
6
SELECT EMPLOYEE_ID , FIRST_NAME , JOB_ID , SALARY 
FROM EMPLOYEES e
WHERE  SALARY > (SELECT SALARY 
                 FROM EMPLOYEES e2 
                 WHERE LAST_NAME = 'Kochhar')
;
cs

 

 

▶문제4

 

EMPLOYEES 테이블에서 급여의 평균보다 적은 사원의 사원번호, 이름, 담당업무, 급여, 부서번호를 출력하라.

 

1
2
3
4
SELECT e.EMPLOYEE_ID , e.FIRST_NAME , e.JOB_ID , e.SALARY , e.DEPARTMENT_ID 
FROM EMPLOYEES e 
WHERE SALARY < (SELECT avg(SALARY) FROM EMPLOYEES e2)
;
cs

 

 

▶문제5

 

EMPLOYEES 테이블에서 100번 부서의 최소 급여보다 최소 급여가 많은 다른 모든 부서(department_id), 최소급여(salary)를 출력하라

 

1
2
3
4
5
6
7
SELECT DEPARTMENT_ID , min(SALARY)
FROM EMPLOYEES e 
GROUP BY DEPARTMENT_ID 
HAVING min(SALARY) > (SELECT min(SALARY)
                        FROM EMPLOYEES e 
                        WHERE DEPARTMENT_ID = 100)
;
cs

 

 

▶문제6

 

EMPLOYEES 테이블에서 사원 번호가 123인 사원의 직업과 같고, 사원번호가 192인 사원의 급여보다 많은 사원의 사원번호, 이름, 직업(job_id), 급여를 출력하라

 

1
2
3
4
5
6
7
8
9
SELECT EMPLOYEE_ID , FIRST_NAME , JOB_ID , SALARY 
FROM EMPLOYEES e 
WHERE JOB_ID = (SELECT JOB_ID
                FROM EMPLOYEES e 
                WHERE EMPLOYEE_ID = 123)
AND   SALARY > (SELECT SALARY 
                FROM EMPLOYEES e 
                WHERE EMPLOYEE_ID = 129)    
;
cs

 

 

▶문제7

 

EMPLOYEES 테이블에서 50번 부서의 최소 급여를 받는 사원보다 많은 급여를 받는 사원의 사원번호, 이름, 업무(job_id), 입사일자, 급여, 부서번호를 출력하라. 단, 50번 부서는 제외

 

1
2
3
4
5
6
7
SELECT EMPLOYEE_ID , FIRST_NAME , JOB_ID , HIRE_DATE , SALARY , DEPARTMENT_ID   
FROM EMPLOYEES e 
WHERE SALARY > (SELECT min(SALARY)
                FROM EMPLOYEES e 
                WHERE DEPARTMENT_ID = 50)
AND NOT DEPARTMENT_ID = 50
;
cs

 

 

▶문제8

 

EMPLOYEES 테이블에서 50번 부서의 최대 급여를 받는 사원보다 많은 급여를 받는 사원의 사원번호, 이름, 업무(job_id), 입사일자, 급여, 부서번호를 출력하라. 단, 50번 부서는 제외

 

1
2
3
4
5
6
7
SELECT EMPLOYEE_ID , FIRST_NAME , JOB_ID , HIRE_DATE , SALARY , DEPARTMENT_ID   
FROM EMPLOYEES e 
WHERE SALARY > (SELECT max(SALARY)
                FROM EMPLOYEES e 
                WHERE DEPARTMENT_ID = 50)
AND NOT DEPARTMENT_ID = 50
;
cs

 

 

▶문제9

 

EMPLOYEES 테이블에서 가장 많은 사원이 속해 있는 부서 번호와, 사원수를 출력하라.

 

1
2
3
4
5
6
7
SELECT DEPARTMENT_ID , count(SALARY)
FROM EMPLOYEES e  
GROUP BY DEPARTMENT_ID 
HAVING count(DEPARTMENT_ID ) = ( SELECT max(count(DEPARTMENT_ID))
                                FROM EMPLOYEES e 
                                GROUP BY DEPARTMENT_ID)
;
cs