[ Oracle ] 오라클 서브쿼리 예제

2021. 4. 12. 17:22·Archive/Develop
728x90
반응형

아래 예제는 오라클에서 기본제공하는 hr 스키마를 이용했습니다.

 

 

 

 

 

 

--ex 2-1) 부서별로 사원의 수가 5명 이상인 부서의
-- 부서번호와 부서명 
-- , 부서장사번, first_name을 인원수순으로 출력하라.

select d.department_id, d.department_name, d.manager_id, 
        (select first_name from employees
        where d.manager_id = employee_id
        ), count(*)
from departments d join employees e
    on d.department_id = e.department_id
group by d.department_id, d.department_name, d.manager_id
having count(*) >=5
order by 5 desc;

 

 

 

 

 

 

-- ex 2-2) 부서별로 얼마나 많은 급여가 지급되는지 알고 싶다.
-- 전체 총급여에서 부서가 차지하는 비율을 볼 수 있도록 작성하라. 
-- 부서번호,부서별 급여합계, 비율(%가 맨뒤에 오도록)을 비율순으로 출력하라.

select department_id, sum(salary), 
lpad(round((sum(salary)/(select sum(salary) from employees))*100) || '%',10)
from employees
group by department_id
order by 3;

 

 

 

 

 

 

-- ex 2-3)직속상사가 없는 사원을 포함하여 
-- 모든 사원의 직속상사가 나오도록 하고 싶다. 
--사번(employee_id), first_name, 직속상사사번(manager_id), 
-- 직속상사first_name을 사번순으로 출력하라. (correlated subquery이용)

select employee_id, first_name, manager_id, 
    (select first_name from employees where e.manager_id = employee_id)
from employees e
order by 1;

 

 

...

 

 

 

 

 

-- ex 2-4)모든 급여의 평균급여보다 시(city)별로 
-- 지급된 평균급여가 적은 시에 대하여 
-- 시(city), 시별 평균급여를 출력하시오.


select l.city,
round(avg(e.salary)) 
from locations l 
join departments d on l.location_id=d.location_id
join employees e on d.department_id = e.department_id
group by l.city
having avg(e.salary)<(select avg(salary) from employees);

 

 

 

 

 

 

-- ex 2-5)두 번이상의 job이력을 가진 모든 사원의 사번, 
-- first_name, 현재부서번호, 현재부서명, job이력부서번호, 
-- job이력부서명을 출력하시오.


select e.employee_id, e.first_name,
e.department_id, d.department_name,
h.department_id, (select department_name from departments where
        department_id = h.department_id)
from employees e 
join departments d on e.department_id = d.department_id
join job_history h on h.employee_id = e.employee_id
where e.employee_id in 
    (select employee_id from job_history group by employee_id having count(*)>=2);

-- 다른 방법

select e.employee_id, e.first_name,
e.department_id, d.department_name,
h.department_id, (select department_name from departments where
        department_id = h.department_id)
from employees e 
join departments d on e.department_id = d.department_id
join job_history h on h.employee_id = e.employee_id
where 2<=(select count(*) from job_history where e.employee_id=employee_id);

 

 

 

 

 

 

-- ex 2-6) job이력이 있는 모든 사원의 
-- 사번, first_name, 현재 job번호, 현재 job명을 출력하시오.
-- (exists 이용)

select e.employee_id, e.first_name, e.job_id, j.job_title
from employees e join jobs j on e.job_id = j.job_id
where exists (select *
                from job_history where e.employee_id=employee_id);
                

 

 

 

 

 

 

 

            
-- ex 2-7)CTAS기법으로 employees를 testemp2 테이블로 복사하고 
-- testemp2의 job_id가 ‘ST_MAN’인 사원의 salary를 
-- 부서장사번이 ‘100’인 부서의 평균월급으로 update하라.

create table testemp3 as select * from employees;

update testemp3 t
set salary = (select avg(salary) from employees e 
                join departments d on d.department_id = e.department_id
                where d.manager_id='100')
where job_id='ST_MAN';

 

 

 

 

 

 

-- ex 2-8)부서명이 ‘Marketing’인 사원 중에서 
-- 그 부서의 평균 급여보다 
-- 더 높은 급여를 받는 사원의 first_name과 급여를 출력하라.
select d.department_id,avg(e.salary) from employees e join departments d
            on d.department_id = e.department_id group by d.department_id;

select first_name, salary from employees e
where 
    (select department_name from departments d
        where e.department_id = d.department_id)='Marketing' and
     salary >
     (select avg(salary) from employees e1 join departments d
            on e1.department_id = d.department_id);
        

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

'Archive > Develop' 카테고리의 다른 글

코테를 위한 준비 과정(순서)  (0) 2021.04.15
[ C++ ] 객체 포인터와 객체 - string 클래스 find() | C++ 행맨 게임  (0) 2021.04.13
[ Docker ] Docker Django Container 만들기  (0) 2021.04.08
[ Docker ] Nginx 컨테이너 생성하기  (0) 2021.04.08
[ Docker ] Docker hub 를 이용해 Portainer 이미지 다운받기  (0) 2021.04.08
'Archive/Develop' 카테고리의 다른 글
  • 코테를 위한 준비 과정(순서)
  • [ C++ ] 객체 포인터와 객체 - string 클래스 find() | C++ 행맨 게임
  • [ Docker ] Docker Django Container 만들기
  • [ Docker ] Nginx 컨테이너 생성하기
코뮤(commu)
코뮤(commu)
코딩으로 커뮤니케이션하는 코뮤입니다 😎
  • 코뮤(commu)
    코뮤(COMMU)
    코뮤(commu)
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Archive
        • Hacking
        • Develop
        • ETC
      • Algorithm
      • DB&Infra
      • ETC
      • Node
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • IT지식보따리
    • IT가 맛있다
    • IT 천재
  • 공지사항

    • 배고픕니다
  • 인기 글

  • 태그

    백준 문제풀이
    파이썬 알고리즘
    파이썬 백준
    백준 파이썬
    Git
    장고
    파이썬 기초 문제
    Django
    파이썬 기초
    Python
    자바스크립트
    파이썬
    oracle db
    파이썬 문제
    오라클
    Codeup
    비박스
    docker
    코드업
    자바스크립트 객체
    코드업 기초
    javascript
    C++
    백준
    Oracle
    코드업 파이썬 기초 100제
    자바스크립트 API
    카카오 100일 프로젝트
    보안뉴스
    백준 풀이
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
코뮤(commu)
[ Oracle ] 오라클 서브쿼리 예제
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.