์ค๋ผํด์์ EXISTS( ) ํจ์๋ฅผ ์ฒ์ ์ ํ๋ฉด ์กฐ๊ธ ์ด๋ ค์ ๋๋์ด ๋ค ์๋ ์๋ค. EXISTS๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋น์ทํ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค ์ ์๋ ๊ธฐ๋ฅ์ด ๋ง๊ธฐ ๋๋ฌธ์, EXISTS์ ๋ํด ์์ธํ ์ตํ์ง ์๊ณ ๋์ด๊ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
EXISTS(์๋ธ ์ฟผ๋ฆฌ)๋ ์๋ธ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ “ํ ๊ฑด์ด๋ผ๋ ์กด์ฌํ๋ฉด” TRUE ์์ผ๋ฉด FALSE๋ฅผ ๋ฆฌํดํ๋ค.
EXISTS๋ ์๋ธ ์ฟผ๋ฆฌ์ ์ผ์นํ๋ ๊ฒฐ๊ณผ๊ฐ ํ ๊ฑด์ด๋ผ๋ ์์ผ๋ฉด ์ฟผ๋ฆฌ๋ฅผ ๋ ์ด์ ์ํํ์ง ์๋๋ค.
์๋์ ์ํ ํ ์ด๋ธ์ ์ฐธ๊ณ ํ์ฌ ์์ ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ฉด ์ฝ๊ฒ ์ดํดํ ์ ์์ ๊ฒ์ด๋ค.
1
2
3
4
5
6
7
8
|
SELECT a.empno
, a.ename
, a.deptno
FROM emp a
WHERE a.job = 'MANAGER'
AND EXISTS (SELECT 1
FROM dept_history aa
WHERE aa.empno = a.empno)
|
์์ ์ฟผ๋ฆฌ(ํ ์ด๋ธํฌํจ).txt
EXISTS, NOT EXISTS ์ฌ์ฉ๋ฒ
– dept_history ํ ์ด๋ธ์ JONES 2๊ฑด, CLARK 1๊ฑด, BLAKE 0๊ฑด์ผ๋ก BLAKE๋ ์ ์ธํ๊ณ ์กฐํ๋๋ค.
– ์๋ธ ์ฟผ๋ฆฌ์ dept_history ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ํ ๊ฑด์ด๋ผ๋ ์กด์ฌํด์ผ ๋ฐ์ดํฐ๊ฐ ์กฐํ ๋๋ค.
– [ SELECT 1 ] SELECT ์ ์ ์ปฌ๋ผ์ ๋ถํ์ํ๊ธฐ ๋๋ฌธ์ ์๋ฏธ์๋ 1์ ๊ธฐ์ ํ์๋ค.
– dept_history ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ์ง ์๋ BLAKE๋ง ์กฐํ๋๋ค.
CASE ๋ฌธ์์ ์ฌ์ฉ๋ฒ
– EXISTS๋ TRUE, FALSE๋ฅผ ๋ฆฌํดํ๊ธฐ ๋๋ฌธ์ If๋ฌธ๊ณผ ๋น์ทํ CASE๋ฌธ์ ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
– CASE๋ฌธ์์ EXISTS๋ฅผ ์ฌ์ฉํ๋ฉด ์ฟผ๋ฆฌ๊ฐ ๋ณต์กํด์ง๊ธฐ ๋๋ฌธ์ ๊ถ์ฅํ์ง๋ ์๋๋ค.
IN๊ณผ EXISTS ๋น๊ต
– ์์ ์ฟผ๋ฆฌ๋ฅผ ๋น๊ตํด ๋ณด๋ฉด IN๊ณผ EXISTS๋ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์กฐํ๋๋ค.
– IN์ ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ ์ํํ๊ณ , EXISTS๋ ์ผ์นํ๋ ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด ๋ ์ด์ ์ํํ์ง ์๋๋ค.
– ์๋ธ ์ฟผ๋ฆฌ ํ ์ด๋ธ(dept_history)์ ๋ฐ์ดํฐ๋์ด ๋ง์ผ๋ฉด EXISTS๋ฅผ ์ฌ์ฉํ๋๊ฒ์ด ์ฑ๋ฅ์ด ์ข๋ค.
JOIN๊ณผ EXISTS ๋น๊ต
– EXISTS์ ์๋ธ ์ฟผ๋ฆฌ๋ฅผ ๋ฉ์ธ ์ฟผ๋ฆฌ JOIN์ผ๋ก ๋ณ๊ฒฝํ ๊ฒฝ์ฐ ์์ ๊ฐ์ด ์ค๋ณต๋ ๋ฐ์ดํฐ ๋์ฌ ์ ์์ผ๋ ์ฃผ์ํด์ผ ํ๋ค.
– JOIN์ ์ฌ์ฉํ๋๊ฒ์ด ์ฑ๋ฅ์ ์ข์ ์ ์์ผ๋ ๋ฉ์ธ ์ฟผ๋ฆฌ์ ์๋ธ ์ฟผ๋ฆฌ์ ๋ฐ์ดํฐ๊ฐ 1:1์ผ ๊ฒฝ์ฐ ๊ฐ๋ฅํ๋ค.