Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 빅분기
- 프로그래머스
- Python
- Kaggle
- 알고리즘
- 실기
- level 2
- level 1
- matplotlib
- 파이썬
- pandas
- 머신러닝
- 실습
- 빅데이터 분석 기사
- 오라클
- python3
- R
- oracle
- 데이터 분석
- 튜닝
- Oracel
- sklearn
- SQL
- seaborn
- 코딩테스트
- Numpy
- 카카오
Archives
- Today
- Total
라일락 꽃이 피는 날
[Oracle] having/from/select 절의 서브 쿼리 본문
728x90
select 검색하고자 하는 컬럼명
from 검색하고자 하는 데이터가 있는 테이블명
where 검색 조건
group by 그룹핑할 컬럼명
having 그룹 함수로 조건을 줄 때 사용하는 절
order by 정렬해서 보고싶은 컬럼명
select 서브쿼리 사용가능
from 서브쿼리 사용가능
where 서브쿼리 사용가능
group by 서브쿼리 사용 불가능
having 서브쿼리 사용가능
order by 서브쿼리 사용가능
예제 1. 직업과 직업 별 토탈 월급을 출력하는데, 직업이 SALESMAN 인 토탈 월급보다 더 큰 것만 출력
select job, sum(sal)
from emp
group by job
having sum(sal) > (select sum(sal)
from emp
where job = 'SALESMAN');
GROUP 함수로 조건을 줄 수 있는 절은 where 절이 아니라 having 절이다.
예제 2. 부서 번호, 이름, 월급, 부서 번호 별로 각각 월급에 대한 순위를 출력하는데, 순위가 2등인 사원들만 출력
select *
from ( select deptno, ename, sal
, dense_rank() over (partition by deptno
order by sal desc) 순위
from emp )
where 순위 = 2;
from 절을 서브 쿼리로 감싸서 미리 from 절의 쿼리문을 출력해서 메모리에 올린다.
그리고 그 메모리에 올라간 결과가 마치 하나의 테이블처럼 사용된다.
예제 3. 이름, 월급, 사원 테이블의 평균 월급을 출력
select ename, sal, (select avg(sal) from emp)
from emp;
select ename, sal, avg(sal) over ()
from emp;
2개의 SQL 중에서 아래의 SQL이 훨씬 좋은 SQL이다.
왜냐하면 emp 테이블을 한 번만 엑세스하기 때문이다.
그러나 2개 중 위쪽의 SQL을 더 많이 사용할 수 밖에 없는 문제들이 많다.
예제 4. 이름, 월급, 직업이 SALESMAN 인 사원들의 평균 월급을 출력
select ename, sal, (select avg(sal) from emp where job = 'SALESMAN')
from emp;
select 절의 서브 쿼리를 스칼라(scalar) 서브 쿼리라고 한다.
스칼라 서브 쿼리의 특징이 하나의 값만 출력할 수 있다는 것이다.
728x90
'프로그래밍 > Oracle' 카테고리의 다른 글
[Oracle] 데이터 삭제 (0) | 2022.06.03 |
---|---|
[Oracle] 데이터 입력/수정 (0) | 2022.06.03 |
[Oracle] exists 를 활용한 서브 쿼리 (0) | 2022.06.02 |
[Oracle] 다중 컬럼 서브 쿼리 (0) | 2022.06.02 |
[Oracle] 단일행/다중행 서브 쿼리 (0) | 2022.06.02 |