๊ด€๋ฆฌ ๋ฉ”๋‰ด

์ฝ”์ง„๋‚จ

์„œ๋ธŒ์ฟผ๋ฆฌ,๋‹จ์ผํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ ๋ณธ๋ฌธ

Database

์„œ๋ธŒ์ฟผ๋ฆฌ,๋‹จ์ผํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ

woojin126 2021. 12. 12. 15:22

๐Ÿ’ก ์„œ๋ธŒ์ฟผ๋ฆฌ๋ž€? ( ์˜ค๋ผํด emp ํ…Œ์ด๋ธ” ์‚ฌ์šฉ )

์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” SQL๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€๋กœ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด SQL๋ฌธ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” SELECT๋ฌธ์„ ์˜๋ฏธํ•œ๋‹ค. ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์˜์—ญ์€ ๋ฉ”์ธ์ฟผ๋ฆฌ(main query)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

โ€‹

ex) ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ JONES์˜ ๊ธ‰์—ฌ๋ณด๋‹ค ๋†’์€ ๊ธ‰์—ด๋ฅด ๋ฐ›๋Š” ์‚ฌ์›์ •๋ณด ์ถœ๋ ฅํ•˜๊ธฐ

โ€‹

SELECT *

FROM EMP

WHERE SAL > (SELECT SAL

FROM EMP

WHERE ENAME = 'JONES');

โ€‹

โ€‹

SELECT SAL FROM EMPWHERE ENAME = 'JONES'; ์„œ๋ธŒ์ฟผ๋ฆฌ

SELECT * FROM EMP WHERE SAL > :๋ฉ”์ธ์ฟผ๋ฆฌ

โ€‹

โ€‹

๐Ÿ’ก์„œ๋ธŒ์ฟผ๋ฆฌ ํŠน์ง•

โ—์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ์—ฐ์‚ฐ์ž์™€ ๊ฐ™์€ ๋น„๊ต ๋˜๋Š” ์กฐํšŒ ๋Œ€์ƒ์˜ ์œผ๋ก ์ชฝ์— ๋†“์ด๋ฉฐ ๊ด„ํ˜ธ ()๋กœ ๋ฌถ์–ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

โ—ํŠน์ˆ˜ํ•œ ๋ช‡๋ช‡ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•œ ๋Œ€๋ถ€๋ถ„์˜ ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ORDER BY ์ ˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

โ—์„œ๋ธŒ์ฟผ๋ฆฌ์˜ SELECT์ ˆ์— ๋ช…์‹œํ•œ ์—ด์€ ๋ฉ”์ธ์ฟผ๋ฆฌ์˜ ๋น„๊ต ๋Œ€์ƒ๊ณผ ๊ฐ™์€ ์ž๋ฃŒํ˜•๊ณผ ๊ฐ™์€ ๊ฐœ์ˆ˜๋กœ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ฉ”์ธ์ฟผ๋ฆฌ์˜ ๋น„๊ต ๋Œ€์ƒ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜๋ผ๋ฉด ์„œ๋ธŒ์ฟผ๋ฆฌ SELECT์ ˆ ์—ญ์‹œ ๊ฐ™์€ ์ž๋ฃŒํ˜•์ธ ์—ด์„ ํ•˜๋‚˜ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.

โ—์„œ๋ธŒ์ฟผ๋ฆฌ์— ์žˆ๋Š” SELECT๋ฌธ์˜ ๊ฒฐ๊ณผ ํ–‰ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์ธ์ฟผ๋ฆฌ์˜ ์—ฐ์‚ฐ์ž ์ข…๋ฅ˜์™€ ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•ด์•ผํ•œ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ๋ฉ”์ธ์ฟผ๋ฆฌ์— ์‚ฌ์šฉํ•œ ์—ฐ์‚ฐ์ž๊ฐ€ ๋‹จ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋กœ๋งŒ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•œ ์—ฐ์‚ฐ์ž๋ผ๋ฉด ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ ํ–‰ ์ˆ˜๋Š” ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์—ฌ์•ผ ํ•œ๋‹ค.

โ€‹

โ€‹

ex)EMP ํ…Œ์ด๋ธ”์˜ ์‚ฌ์› ์ •๋ณด ์ค‘์—์„œ ์‚ฌ์› ์ด๋ฆ„์ด ALLEN์ธ ์‚ฌ์›์˜ ์ถ”๊ฐ€ ์ˆ˜๋‹น๋ณด๋‹ค ๋งŽ์€ ์ถ”๊ฐ€ ์ˆ˜๋‹น์„ ๋ฐ›๋Š” ์‚ฌ์› ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•ด๋ผ.

โ€‹

SELECT *

FROM EMP

WHERE COMM > (SELECT COMM

FROM EMP

WHERE ENAME = 'ALLEN');

โ€‹

โ€‹

โ€‹

๐Ÿ’ก์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ํ•˜๋‚˜์ธ ๋‹จ์ผํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ

๋‹จ์ผํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ(single-row subquery)๋Š” ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ๋‹จ ํ•˜๋‚˜์˜ ํ–‰์œผ๋กœ ๋‚˜์˜ค๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ๋œปํ•จ.

โ— ์—ฐ์‚ฐ์ž ์ข…๋ฅ˜ : > ์ดˆ๊ณผ , >= ์ด์ƒ , = ๊ฐ™์Œ , <= ์ดํ•˜ ,< ๋ฏธ๋งŒ, <> or ^= or != ๊ฐ™์ง€์•Š์Œ

โ— ์œ„์—์„œ ์‚ดํŽด๋ณธ JONES์˜ ๊ธ‰์—ฌ๋ณด๋‹ค ๋†’์€ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ์‚ฌ์› ๋ชฉ๋ก์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ ์„œ๋ธŒ์ฟผ๋ฆฌ์—ญ์‹œ ๋‹จ์ผํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ JONES๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋‹จ์ผํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋‚˜์ค‘์— ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

โ€‹

WHY?

์‚ฌ๋žŒ ์ด๋ฆ„์€ ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ๊ฐ€์งˆ์ˆ˜๋„ ์žˆ๊ธฐ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ• ์ˆ˜๋„ ์žˆ๋‹ค., ์ด์™€ ๊ฐ™์ด ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋กœ ์—ฌ๋Ÿฌ ํ–‰์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ์—๋Š” ๋‹ค์ค‘ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

โ€‹

ex)EMP ํ…Œ์ด๋ธ”์—์„œ SCOTT๋ณด๋‹ค ๋นจ๋ฆฌ ์ž…์‚ฌํ•œ ์‚ฌ์› ๋ชฉ๋ก์„ ์กฐํšŒ ํ•ด๋ณด๊ธฐ

โ€‹

SELECT

FROM EMP

WHERE HIREDATE < (SELECT HIREDATE

FROM EMP

WHERE ENAME = 'SCOTT');

โ€‹

โ€‹

ex)20๋ฒˆ ๋ถ€์„œ์— ์†ํ•œ ์‚ฌ์›Œ ์ค‘ ์ „์ฒด ์‚ฌ์›์˜ ํ‰๊ท  ๊ธ‰์—ฌ๋ณด๋‹ค ๋†’์€ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ์‚ฌ์› ์ •๋ณด์™€ ์†Œ์† ๋ถ€์„œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ์กฐํšŒํ•ด๋ณด๊ธฐ.

โ€‹

(์„œ๋ธŒ์ฟผ๋ฆฌ ์•ˆ์—์„œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ)

โ€‹

SELECT E.EMPNO, E.JOB, E.SAL , D.DEPTNO,D.DNAME,D.LOC

FROM EMP E, DEPT D

WHERE E.DEPTNO = D.DEPTNO

AND E.DEPTNO = 20

AND E.SAL > (SELECT AVG(SAL)

FROM EMP);