[SQL] 5. rownum, exists

hhs012·2022년 1월 11일
1

SQL

목록 보기
5/8

1. rownum

: 조회된 행이 몇번째 행인지 부여해주는 것 즉, 조회된 순서대로 순번을 매긴다.

✔️ROWNUM을 사용한 곳에 ORDER BY를 사용할 수 없다. ORDER BY를 사용해야 한다면 서브쿼리 안에 사용할 것!

--[rownum] 월급이 높은 순으로 사번, 이름, 월급을 상위 5명만 출력
select rownum,empno,ename,sal 
from (select empno,ename,sal 
      from emp 
      order by sal desc) -- ❗ select,from 2번 쓴다. (이중 서브쿼리)
where rownum<=5;

-- 월급이 높은 순으로 사번, 이름, 월급을 상위 3번~5번 사람들 출력
select rownum,ee.* --테이블명.*
from (select rownum,e.* -- = ins_rownum,empno,ename,sal 
from (select rownum ins_rownum,empno,ename,sal 
from emp order by sal desc)e)ee  -- ❗ select,from 3번 쓴다. (3중 서브쿼리)
where ins_rownum between 3 and 5;

---
* e 참고
select rownum,e.* -- = ins_rownum,empno,ename 
from (select rownum as ins_rownum,empno,ename from emp order by ename asc)e;

---- 이중 서브쿼리
select rownum,ins_rownum,empno,ename 
from 
(select rownum as ins_rownum,empno,ename 
from emp order by ename asc)
where rownum<=3; 

-- 3중 서브쿼리
select *
from(select rownum as sel_rownum,empno,ename 
from (select rownum as ins_rownum,empno,ename 
from emp order by ename asc))
where sel_rownum between 4 and 8;

2. exists / not exists

exists(서브쿼리) 데이터가 한 건이라도 있으면 true, 없으면 false.
데이터량이 많을 때 exists 사용하는 것이 성능에 좋다.

--1) 조인
select e.ename, d.dname from emp e, dept d 
where e.deptno = d.deptno;

--2) 서브쿼리
select e.ename, e.deptno from emp e 
where e.deptno in (select deptno from dept);

--3) exists
select e.ename, e.deptno from emp e
where exists (select deptno from dept d where e.deptno=d.deptno);

in과 exists는 같은 결과가 조회된다. in은 서브쿼리 결과를 모두 수행하고, exists는 일치하는 결과가 있으면 더 이상 수행하지 않는다.

0개의 댓글