ํ๋์ ์ฟผ๋ฆฌ ๋ฌธ์ฅ ๋ด์ ํฌํจ๋ ๋ ํ๋์ ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ ๋งํ๋ค. ๋น๊ต ์ฐ์ฐ์์ ์ค๋ฅธ์ชฝ์ ๊ธฐ์ ํด์ผ ํ๊ณ ๋ฐ๋์ ๊ดํธ ์์ ๋ฃ์ด์ผ ํ๋ค. ๋ฉ์ธ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๊ธฐ ์ ์ ํ ๋ฒ ์คํ๋๋ค.
-- 'ALLEN'์ ๋ถ์๋ช
์ ๊ตฌํ์์ค.
select ename, (select d.dname from dept d where d.deptno=emp.deptno) as dept_name from emp where ename='ALLEN';
select์ ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ ๋ฉ์ธ ์ฟผ๋ฆฌ์์ selectํ ์ ์๋๋ก ๋ฐ๋์ ๋จ์ผ ํ์ด๋ ๋จ์ผ ๊ฐ์ผ๋ก ๋ฆฌํด๋์ด์ผ ํ๋ค.
from์ ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ ๋ฐ๋์ ํ๋์ ํ ์ด๋ธ๋ก ๋ฆฌํด๋์ด์ผ ํ๋ค. ์ธ๋ผ์ธ ๋ทฐ๋ฅผ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ๋ก๋ TOP N ์ฟผ๋ฆฌ, ํ์ด์ง ์ฟผ๋ฆฌ ๋ฑ์ด ์๋ค.
TOP-N ์ฟผ๋ฆฌ
์์ N๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ์ฟผ๋ฆฌ์ด๋ค.
-- ์ต๊ณ ๊ธ์ฌ 3๋ช select * from (select * from emp order by sal desc) where rownum<=3;
์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฐ์ง ์๊ณ where์ ๊ณผ order by์ ์ ์ฐ๊ฒ ๋๋ฉด, where์ ์ด ๋จผ์ ์คํ๋์ด order by์ ์๊ด์์ด ๋๋ค์ผ๋ก ์ ๋ ฌ๋ 3๋ช ์ด ์ถ๋ ฅ๋๋ค. ๋ฐ๋ผ์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ด์ฉํด order by๋ก ์ ๋ ฌ์ ๋จผ์ ์คํํด ์ฃผ๋ ๊ฒ์ด๋ค.
ํ์ด์ง ์ฟผ๋ฆฌ
TOP-N ์ฟผ๋ฆฌ๋ฅผ ์ด์ฉํ์ง๋ง ์กฐ๊ธ ๋ ๋ณต์กํ๋ค. 1-5 ํ์ด์ง๋ TOP-N ์ฟผ๋ฆฌ๋ก ์ฝ๊ฒ ๊ตฌํํ ์ ์์ง๋ง 6-10 ํ์ด์ง๋ถํฐ๋ rownum์ ํน์ฑ์(1์ด ์์ด์ผ 2๊ฐ ์๊ณ , 2๊ฐ ์์ด์ผ 3์ด ์๋ค.)
rownum<=10
์ ๋จผ์ ์คํํ๊ณ ,rownum>=6
์ ์คํํด์ผ ํ๋ค.select * from (select rownum as rnum, new_desc.* from (select * from emp order by empno desc) new_desc where rownum<=10) where rnum>=6;
rownum์ select๋ฌธ๋ง๋ค ๋ฐ๋ก ๋ถ์ฌ๋๊ธฐ ๋๋ฌธ์ ์๋ธ์ฟผ๋ฆฌ์ rownum์ ์ ์ฅํด ์ฃผ๊ณ ๋ฉ์ธ ์ฟผ๋ฆฌ์์ ์ ์ฅํ rownum์ ์จ์ผ ํ๋ค
์์ฑ ์์
- ํ ์ด๋ธ์ ์ ๋ ฌ์ ๋จผ์ ํ๋ select๋ฌธ์ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ select๋ฌธ์ ๋ณ์นญ์ ๋ถ์ฌ ์ค๋ค. (๋ค์์ ์ด์ฉํด์ผ ํจ)
- โค ๋ฒ์๋ฅผ ๊ฑธ์ด ์ฃผ๋ select๋ฌธ์ ์์ฑํ๋ค. 1์ select๋ฌธ์ ๋ณ์นญ์ ๊ฑธ์ด ์ฃผ์๊ธฐ ๋๋ฌธ์
๋ณ์นญ.*
์ผ๋ก ๋ด์ฉ์ ๋ฝ์ ์ฌ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด select๋ฌธ์ rownum๋ ์ถ๋ ฅํ๋ฉด์ ๋ณ์นญ์ ๋ถ์ฌ ์ค๋ค. (๋ค์์ ์จ์ผ ํจ)- โฅ ๋ฒ์๋ฅผ ๊ฑธ์ด ์ฃผ๋ select๋ฌธ์ ์์ฑํ๋ค. ์ด๋ 2์ rownum์ ๋ณ์นญ์ ๊ฑธ์ด ์ฃผ์๊ธฐ ๋๋ฌธ์ 2๋ฒ select๋ฌธ์ rownum์ ์ด์ฉํ ์ ์๋ค.
๊ฐ์ฅ ๋์ค์ ์ธ ์๋ธ์ฟผ๋ฆฌ์ด๋ค. ๋จ์ผ ํ, ๋ณต์ ํ ๋ชจ๋ ๋ฆฌํด์ด ๊ฐ๋ฅํ๋ค.
-- ์ต๊ณ ๊ธ์ฌ์์ job
select job from emp where sal=(select max(sal) from emp);
-- 7369๋ฒ ์ฌ์์ ๋ถ์๋ช
(join ๊ธ์ง)
select dname from dept where deptno=(select deptno from emp where empno=7369);
-- ํ๊ท ๊ธ์ฌ ์ด์์ ๊ธ์ฌ๋ฅผ ๋ฐ๋ ์ฌ์ ๋ช
๋จ
select ename from emp where sal>=(select avg(sal) from emp);
-- 'ALLEN'๊ณผ ๊ฐ์ ๋ถ์์ ๊ทผ๋ฌดํ๋ ์ฌ์ ์ถ๋ ฅ
select ename from emp where deptno=(select deptno from emp where ename='ALLEN') and ename!='ALLEN';
-- and ename!='ALLEN'์ ALLEN์ ์ถ๋ ฅ์์ ์ ์ธํ๋ ์์ด๋ค.
-- SMITH์ ๊ฐ์ job์ ๊ฐ์ง ์ฌ์ ์ถ๋ ฅ
select ename from emp where job=(select job from emp where ename='SMITH');