데이터베이스
25일차//[Oracle] SUB QUERY 예제
aesup
2021. 2. 16. 11:52
728x90
--문제1) EMPLOYEES 테이블에서 Kochhar의 급여보다 많은 사원의 정보를 사원
--번호,이름,담당업무,급여를 출력하라.
SELECT employee_id, last_name, job_id, salary, ( SELECT salary
FROM employees
WHERE last_name = 'Kochhar')
FROM employees
WHERE salary > ( SELECT salary
FROM employees
WHERE last_name = 'Kochhar');
--문제2) EMPLOYEES 테이블에서 급여의 평균보다 적은 사원의 정보를 사원번호,
--이름,담당업무,급여,부서번호를 출력하여라.****
SELECT last_name, job_id, salary, department_id
FROM employees
HAVING AVG(salary)>(SELECT AVG(salary)
FROM employees
GROUP BY salary);
--문제3) EMPLOYEES 테이블에서 100번 부서의 최소 급여보다 최소 급여가
--많은 다른 모든 부서를 출력하라###다시보기
SELECT DISTINCT department_id
FROM employees
GROUP BY department_id
HAVING MIN(salary) > (SELECT MIN(salary) FROM employees WHERE department_id = 100)
;
--문제4) 업무별로 최소 급여를 받는 사원의 정보를 사원번호,이름,업무,부서번호
--를 출력하여라. 단 업무별로 정렬하여라. ****
SELECT employee_id , first_name, job_id, department_id
FROM employees
WHERE (job_id,salary )IN (SELECT job_id, MIN(salary)
FROM employees
GROUP BY job_id) -- 그룹을 하는이유는?
ORDER BY job_id;
--문제5) EMPLOYEES 과 DEPARTMENTS 테이블에서 업무가 세일드맨 사원의 정
--보를 이름,업무,부서명,근무지를 출력하라.
SELECT a.first_name, a.job_id, d.department_name,d.location_id
FROM employees a, departments d
WHERE job_id = (SELECT job_id
FROM employees
WHERE job_id = 'SA_MAN'
GROUP BY job_id);
--FROM 절에 하는방법--(이게 올바른 답)
SELECT first_name , job_id, d.department_name, d.location_id
FROM (SELECT first_name , job_id, department_id
FROM employees
WHERE job_id = 'SA_MAN') e, departments d
WHERE e.department_id = d.department_id;
--문제6) EMP 테이블에서 가장 많은 사원을 갖는 MANAGER의 사원번호를
--출력하라.
SELECT manager_id
FROM employees
GROUP BY manager_id
HAVING COUNT(manager_id) IN (SELECT MAX(COUNT(manager_id))
FROM employees
GROUP BY manager_id);
--문제7) EMP 테이블에서 가장 많은 사원이 속해있는 부서번호와 사원수를
--출력하라.
SELECT department_id, COUNT(*)--모든행수를 카운트한다
FROM employees
GROUP BY department_id
HAVING COUNT(department_id) IN(SELECT MAX(COUNT(department_id))
FROM employees
GROUP BY department_id);
--문제8) EMP 테이블에서 사원번호가 123인 사원의 직업과 같고
-- 사원번호가 192인 사원의 급여(SAL)보다 많은 사원의 사원번호, 이름,
--직업, 급여를 출력하라.
SELECT employee_id, first_name, job_id, salary
FROM employees
WHERE job_id =(SELECT job_id
FROM employees
WHERE employee_id = 123)
AND salary>
(SELECT salary
FROM employees
WHERE employee_id = 192) ;
SELECT employee_id, first_name, job_id, salary
FROM employees
WHERE employee_id = 123;
--문제9) 직업(JOB)별로 최소 급여를 받는 사원의 정보를 사원번호, 이름, 업
--무, 부서명을 출력하라.
-- 조건1 : 직업별로 내림차순 정렬
SELECT a.employee_id, a.last_name, a.job_id, d.department_name
FROM employees a, departments d
WHERE a.department_id = d.department_id
and salary IN( SELECT MIN(salary)
FROM employees
GROUP BY job_id) --job으로 묶어야함
ORDER BY job_id DESC;
--문제10) EMPLOYEES 테이블에서 50번 부서의 최소 급여를 받는 사원 보다 많
--은 급여를 받는 사원의 정보를 사원번호,이름,업무,입사일자,급여,부서번호를
--출력하라. 단 50번은 제외 (ANY)
SELECT employee_id, last_name, job_id, hire_date, salary, department_id
FROM employees
WHERE salary > (SELECT MIN(salary)
FROM employees
WHERE department_id = 50)
AND department_id !=50
ORDER BY department_id DESC;
--문제11) EMPLOYEES 테이블에서 50번 부서의 최고 급여를 받는 사원 보다
--많은 급여를 받는 사원의 정보를 사원번호,이름,업무,입사일자,급여,부서번호를
--출력하라. 단50번은 제외 (ALL
SELECT employee_id, last_name, job_id, hire_date, salary, department_id
FROM employees
WHERE salary > (SELECT MAX(salary)
FROM employees
WHERE department_id = 50)
AND department_id !=50
ORDER BY department_id DESC;
SELECT SUM(SALARY), AVG(salary) --두개이상의 칼럼을 뽑겠다는게 다중 컬럼이다
FROM employees;
728x90