์๋ธ์ฟผ๋ฆฌ๋?
SQL ์์ฑ ์ ์ฌ๋ฌ ์ง๋ฌธ์ด ํ ๋ฒ์ ๋์ค๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํจ
ํ๋์ ์ฟผ๋ฆฌ ์์ ๋ ๋ค๋ฅธ ํ๋์ ์ฟผ๋ฆฌ๊ฐ ๋ด๊ฒจ ์๋ ๊ฒ์ ๋งํ๋ค.
MAIN ๋ณธ์ฟผ๋ฆฌ , SUB ์๋ธ์ฟผ๋ฆฌ
SELECT ~ FROM ~
WHERE ์กฐ๊ฑด์ฐ์ฐ์ (SELECT
FROM
WHERE )
<์๋ธ์ฟผ๋ฆฌ ์ฃผ์์ฌํญ>
- WHERE ์ ์ฐ์ฐ์ ์ค๋ฅธ์ชฝ์ ์์นํด์ผํ๋ฉฐ ๋ฐ๋์ ๊ดํธ๋ก ๋ฌถ๋๋ค
- ํน๋ณํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ ์๋ธ์ฟผ๋ฆฌ์ OrderBy์ ์ด ์ฌ ์ ์๋ค
- ๋จ์ผํ, ๋ค์คํ์ ๋ฐ๋ผ ์ฐ์ฐ์๋ฅผ ์ ์ ํํ๋ค.
<์๋ธ์ฟผ๋ฆฌ>
์๋ธ์ฟผ๋ฆฌ -> ๋ณธ์ฟผ๋ฆฌ : ์๋ธ์ฟผ๋ฆฌ๊ฐ ์ํ๋์ด ๊ฒฐ๊ณผ ๊ฐ์ ์ ํด์ฃผ๊ณ ๋ณธ์ฟผ๋ฆฌ๊ฐ ๋ฐ์์ ์ต์ข
๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํจ
SELECT * FROM EMP
WHERE ENAME = 'FORD';
SELECT * FROM EMP
WHERE SAL > 3000;
SELECT * FROM EMP
WHERE SAL >(SELECT SAL FROM EMP WHERE ENAME = 'FORD');
SELECT EMPNO, ENAME FROM EMP
WHERE SAL >(SELECT SAL FROM EMP WHERE ENAME = 'FORD');
SELECT * FROM EMP
WHERE COMM <(SELECT COMM FROM EMP WHERE ENAME = 'WARD');
--NULL์ ์ ์ธํ๊ณ ์กฐํ
<๋จ์ผํ ์๋ธ์ฟผ๋ฆฌ>
์ํ ๊ฒฐ๊ณผ ๊ฐ์ด 1๊ฐ์ ํ๋ง ์ถ๋ ฅ ๋๋ ๊ฒ
SELECT NAME STUD_NAME, DNAME DEPT_NAME FROM STUDENT S
INNER JOIN DEPARTMENT D ON S.DEPTNO1 = D.DEPTNO
WHERE DEPTNO1 = (SELECT DEPTNO1 FROM STUDENT
WHERE NAME= 'Anthony Hopkins'); --JOIN๊ฑธ๊ธฐ
SELECT S.NAME STUD_NAME,D.DNAME DEPT_NAME FROM STUDENT S
INNER JOIN DEPARTMENT D ON S.DEPTNO1 = D.DEPTNO
WHERE DEPTNO1 = (SELECT DEPTNO1 FROM STUDENT
WHERE NAME= 'Anthony Hopkins'); --JOIN๊ฑธ๊ธฐ DEPT ์ NAME ๊ฐ ์ถ๋ ฅํด์ผ๋จ
<๋ค์คํ ์๋ธ์ฟผ๋ฆฌ>
์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ 2๊ฑด ์ด์ ์ถ๋ ฅ๋๋ ๊ฒ
โถIN ์กฐ๊ฑด ์ฌ๋ฌ๊ฐ ์ผ๋ ์ฌ์ฉ (๋ฉํฐ ROW)
= ์๋ธ์ฟผ๋ฆฌ์์ ๊ฒ์ ๋ ์กฐ๊ฑด๋ง ๋ฉ์ธ์ฟผ๋ฆฌ์์ ์ฐ์ฐํจ
= ๋ฐ๋์ ํ๊ฐ์ผ๋ ์ฌ์ฉ๊ฐ๋ฅ (๊ฐ๋ค ==)
SELECT * FROM DEPT2 WHERE AREA = 'Pohang Main Office';
SELECT * FROM EMP2
WHERE DEPTNO IN (SELECT DEPTNO FROM DEPT2 WHERE AREA = 'Pohang Main Office');
โถExists ์ฐ์ฐ์
=์๋ธ์ฟผ๋ฆฌ ๋ด์ฉ ์ํ ํด์ 1๊ฑด์ด๋ผ๋ ๋์ค๋ฉด ๋ฉ์ธ ์ฟผ๋ฆฌ๋ฅผ ์ํํ๋ค.
=์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ์๊ด ์์ด ๋ฉ์ธ ์ฟผ๋ฆฌ ์ํ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ค.
= ๋ฐ์ดํฐ๊ฐ ์๋์ง ์๋์ง ํ์ธํด์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋ ์ฌ์ฉํ๋ ํจ์
<๋ค์ค์ปฌ๋ผ>
= ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฌ์ปฌ๋ผ์ธ ๊ฒฝ์ฐ
SELECT NAME, GRSELECT NAME, GRADE, WEIGHT FROM STUDENT
WHERE (GRADE, WEIGHT) IN (SELECT GRADE, MAX(WEIGHT) --ํ๋
๋ณ ์ต๋ ๋ชธ๋ฌด๊ฒ
FROM STUDENT
GROUP BY GRADE);
--์กฐ๊ฑด์ด 2๊ฐ
SELECT NAME, GRADE, WEIGHT FROM STUDENT
WHERE WEIGHT IN (SELECT MAX(WEIGHT) --ํ๋
๋ณ ์ต๋ ๋ชธ๋ฌด๊ฒ ์ค๋ณต๊น์ง ๋ค ๊ฐ์ ธ์ด
FROM STUDENT
GROUP BY GRADE);
<์ํธ์ฐ๊ด ์๋ธ์ฟผ๋ฆฌ>
= ๋ฉ์ธ๊ฐ์ ์๋ธ์ฟผ๋ฆฌ์ ์ฃผ๊ณ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ํํ ํ , ๋ฉ์ธ ๊ฐ์ผ๋ก ๋ฐํํด์ ์ํํ๋ ์๋ธ์ฟผ๋ฆฌ