๐ NOT IN
NOT IN์ ์ง์ ๋ ๊ฐ ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ ์ฌ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ถ์ ํ ์ด๋ธ์ ์กด์ฌํ์ง ์๋ ์ง์์ ์กฐํํ๋ค๊ณ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค.
SELECT *
FROM EMP
WHERE DEPTNO NOT IN (
SELECT DEPTNO
FROM DEPT
);
์ฆ,
EMP.DEPTNO ≠ DEPT.DEPTNO
์ธ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๋ฐฉ์์ ๋๋ค.
๐ NOT EXISTS
NOT EXISTS๋ ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ ์กด์ฌํ์ง ์์ ๋ TRUE๊ฐ ๋๋ ์กฐ๊ฑด๋ฌธ์ ๋๋ค.
๊ฐ์ ์์ ๋ฅผ NOT EXISTS๋ก ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
SELECT *
FROM EMP A
WHERE NOT EXISTS (
SELECT 1
FROM DEPT B
WHERE A.DEPTNO = B.DEPTNO
);
EMP ํ ์ด๋ธ์ DEPTNO์ ๊ฐ์ ๊ฐ์ด DEPT ํ ์ด๋ธ์ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ์ ํฌํจ๋ฉ๋๋ค.
๐ NOT IN vs NOT EXISTS ์ฐจ์ด
NOT IN๊ณผ NOT EXISTS์ ๊ฐ์ฅ ํฐ ์ฐจ์ด๋ NULL ์ฒ๋ฆฌ ๋ฐฉ์์ ๋๋ค.
์๋ฅผ ๋ค์ด DEPT ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค.
| 10 |
| 20 |
| NULL |
์ด ๊ฒฝ์ฐ ๋ค์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ฉด
SELECT *
FROM EMP
WHERE DEPTNO NOT IN (
SELECT DEPTNO
FROM DEPT
);
์กฐํ ๊ฒฐ๊ณผ๊ฐ ๋์ค์ง ์์ ์ ์์ต๋๋ค.
SQL์์ ๊ฐ != NULL
๋น๊ต ๊ฒฐ๊ณผ๋ TRUE๋ FALSE๋ ์๋ UNKNOWN์ด ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ฐ๋ฉด NOT EXISTS๋ NULL์ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค.
SELECT *
FROM EMP A
WHERE NOT EXISTS (
SELECT 1
FROM DEPT B
WHERE A.DEPTNO = B.DEPTNO
);
์ด ๊ฒฝ์ฐ ์ ์์ ์ผ๋ก ๊ฒฐ๊ณผ๊ฐ ์กฐํ๋ฉ๋๋ค.
๐ ์ฑ๋ฅ ์ฐจ์ด
์ผ๋ฐ์ ์ผ๋ก NOT EXISTS๊ฐ NOT IN๋ณด๋ค ๋ ์์ ์ ์ธ ์ฑ๋ฅ์ ๋ณด์ ๋๋ค.
๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
NOT IN: ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ ์ฒด์ ๋น๊ต
NOT EXISTS: ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฐ์ดํฐ๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ์ฆ์ ํ์ ์ข ๋ฃ
๋ฐ๋ผ์, ๋ฐ์ดํฐ๊ฐ ๋ง์์๋ก NOT EXISTS๊ฐ ๋ ํจ์จ์ ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๐ ์ ๋ฆฌ
| ๊ตฌ๋ถ | NOT IN | NOT EXISTS |
| ๋น๊ต ๋ฐฉ์ | ๊ฐ ๋ชฉ๋ก ๋น๊ต | ์กด์ฌ ์ฌ๋ถ ํ์ธ |
| NULL ์ํฅ | ์์ | ์์ |
| ์ฑ๋ฅ | ๋๋ฆด ์ ์์ | ๋น๊ต์ ์์ ์ |
| ์ค๋ฌด ์ฌ์ฉ | ์ ํ์ | ๋ง์ด ์ฌ์ฉ |