๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

RDB๐Ÿ—‚๏ธ/์ธํ”„๋Ÿฐ : SQLD ์ž๊ฒฉ์ฆ ๋”ฐ๊ธฐ

SQL ๊ฐœ๋ฐœ์ž (SQLD) ์ž๊ฒฉ์ฆ ๋”ฐ๊ธฐ Part.2 ์„น์…˜ 2.

728x90

1. ์กฐ์ธ

1) EQUI(๋“ฑ๊ฐ€) ์กฐ์ธ(๊ต์ง‘ํ•ฉ)

(1) EQUI(๋“ฑ๊ฐ€) ์กฐ์ธ

- ์กฐ์ธ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฆด๋ ˆ์ด์…˜์„ ์‚ฌ์šฉํ•ด์„œ ์ƒˆ๋กœ์šด ๋ฆด๋ ˆ์ด์…˜์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •

- ์กฐ์ธ์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์€ ๊ต์ง‘ํ•ฉ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ

- ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ” ๊ฐ„ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์„ ์กฐ์ธ

- EQUI ์กฐ์ธ์€ EMP ํ…Œ์ด๋ธ”๊ณผ DEPT ํ…Œ์ด๋ธ”์—์„œ DEPTNO ์นผ๋Ÿผ์„ ์‚ฌ์šฉํ•ด ๊ฐ™์€ ๊ฒƒ์„ ์กฐ์ธ, " = "๋ฅผ ํ™œ์šฉํ•ด ๋‘ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•œ๋‹ค

ISO ํ‘œ์ค€์œผ๋กœ INNER JOIN์ด ์žˆ๋‹ค. INNER JOIN์€ ON๋ฌธ์„ ์‚ฌ์šฉํ•ด ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐ

(2) INNER JOIN

~ ํ•ด์‹œ ์กฐ์ธ

-> EQUI ์กฐ์ธ์€ ๋‘ ํ…Œ์ด๋ธ” ์ „์ฒด๋ฅผ ๋‹ค ์ฝ์€ ๋‹ค์Œ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋‘ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•œ๋‹ค. ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ํ…Œ์ด๋ธ”์„ ํ•ด์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•œ ํ›„ ํ•ด์‹œ ํ•จ์ˆ˜๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•. ํ•ด์‹œ ์กฐ์ธ์€ EQUI ์กฐ์ธ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค

ํ•ด์‹œ์กฐ์ธ์€ ๋จผ์ € ์„ ํ–‰ ํ…Œ์ด๋ธ”์„ ๊ฒฐ์ •ํ•˜๊ณ  ์ฃผ์–ด์ง„ ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ํ–‰์ด ์„ ํƒ๋˜๋ฉด ์กฐ์ธ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ด ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑํ•˜๊ณ  ํ›„ํ–‰ ํ…Œ์ด๋ธ”์— ์ฃผ์–ด์ง„ ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋Š” ํ–‰์„ ์ฐพ๋Š”๋‹ค. ํ›„ํ–‰ ํ…Œ์ด๋ธ”์˜ ์กฐ์ธ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ด ํ•ด๋‹น ๋ฒ„ํ‚ท์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์•Œ๋งž์€ ๊ฒƒ์„ ์ถœ๋ ฅํ•œ๋‹ค

(3) INTERSECT ์—ฐ์‚ฐ

- INTERSECT ์—ฐ์‚ฐ์€ ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์—์„œ ๊ต์ง‘ํ•ฉ์„ ์กฐํšŒํ•œ๋‹ค. ์ฆ‰ ๋‘ ๊ฐœ ํ…Œ์ด๋ธ”์—์„œ ๊ณตํ†ต ๊ฐ’์„ ์กฐํšŒ

 

2) Non-EQUI ์กฐ์ธ

- ์ •ํ™•ํ•˜๊ฒŒ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ์กฐ์ธ

 

3) OUTER JOIN (์™ธ๋ถ€ ์กฐ์ธ)

- OUTER JOIN์€ ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„ ๊ต์ง‘ํ•ฉ์„ ์กฐํšŒํ•˜๊ณ  ํ•œ ์ชฝ ํ…Œ์ด๋ธ”์—๋งŒ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋„ ํฌํ•จ์‹œ์ผœ ์กฐํšŒํ•œ๋‹ค. ์™ผ์ชฝ์˜ ๋ฐ์ดํ„ฐ๋งŒ OUTERํ•˜๋ฉด LEFT, ์˜ค๋ฅธ์ชฝ์€ RIGHT OUTER JOIN, ์–‘์ชฝ ๋‹ค๋Š” FULL OUTER JOIN

 

์กฐ์ธ ๊ด€๋ จ ๋ฌธ์ œ 5๋ฌธ์ œ ์ด์ƒ ์ถœ์ œ๋จ!

 

4) CROSS JOIN (์ƒํ˜ธ ์กฐ์ธ)

- CROSS JOIN์€ ์กฐ์ธ ์กฐ๊ฑด๊ตฌ๋ฌธ ์—†์ด 2๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜๋กœ ์กฐ์ธ

- ์กฐ์ธ ๊ตฌ๋ฌธ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์นดํ…Œ์‹œ์•ˆ ๊ณฑ์ด ๋ฐœ์ƒํ•œ๋‹ค ~ ๋‘ ํ…Œ์ด๋ธ”์—์„œ ์กฐ์ธ์œผ๋กœ ๋ฐœ์ƒ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ๋‹ค

ex) ์นด๋””๋„๋ฆฌํ‹ฐ 15, 5์˜ ํ…Œ์ด๋ธ”์„ ์ƒํ˜ธ ์กฐ์ธ -> 75๊ฐœ์˜ ์ƒํ˜ธ ์กฐ์ธ๋œ ํ–‰์ด ์กฐํšŒ๋œ๋‹ค

 

5) UNION์„ ์‚ฌ์šฉํ•œ ํ•ฉ์ง‘ํ•ฉ

(1) UNION

UNION ์—ฐ์‚ฐ์€ ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜๋กœ ๋งŒ๋“œ๋Š” ์—ฐ์‚ฐ์ด๋‹ค. UNION ์—ฐ์‚ฐ์€ ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉฐ ํ…Œ์ด๋ธ”์„ ํ•ฉ์นœ๋‹ค

(2) UNION ALL

UNION ALL์€ ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋Š” ๊ฒƒ์ด๋‹ค. UNION์ฒ˜๋Ÿผ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์ •๋ ฌ์„ ์œ ๋ฐœํ•˜์ง€ ์•Š๋Š”๋‹ค

 

6) ์ฐจ์ง‘ํ•ฉ์„ ๋งŒ๋“œ๋Š” MINUS

- MINUS ์—ฐ์‚ฐ์€ ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์—์„œ ์ฐจ์ง‘ํ•ฉ์„ ์กฐํšŒํ•œ๋‹ค. ์ฆ‰, ๋จผ์ € ์“ด SELECT ๋ฌธ์—๋Š” ์žˆ๊ณ  ๋’ค์— ์“ฐ๋Š” SELECT ๋ฌธ์—๋Š” ์—†๋Š” ์ง‘ํ•ฉ์„ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์ด๋‹ค(MYSQL : NOT IN, NOT EXISTS ๋“ฑ)

2. ๊ณ„์ธตํ˜• ์กฐํšŒ(Connect By) : ๋นˆ์ถœ!

- ๊ณ„์ธตํ˜• ์กฐํšŒ๋Š” Oracle ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ง€์›ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ณ„์ธตํ˜•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค ~ ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ๊ตฌ์กฐ๋ฅผ ์œ„์—์„œ ์•„๋ž˜๋กœ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ์กฐํšŒ ๋˜๋Š” ์—ญ๋ฐฉํ–ฅ ์กฐํšŒ

- CONNECT BY๋Š” ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ๊ตฌ์กฐ๋กœ ์งˆ์˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ START WITH๋ฌธ์€ ์‹œ์ž‘ ์กฐ๊ฑด์„ ์˜๋ฏธํ•˜๊ณ  CONNECT BY PRIOR๋Š” ์กฐ์ธ ์กฐ๊ฑด์ด๋‹ค. ROOT ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ํ•˜์œ„ ๋…ธ๋“œ์˜ ์งˆ์˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค

- ๊ณ„์ธตํ˜• ์กฐํšŒ์—์„œ MAX(LEVEL)๋ฅผ ์‚ฌ์šฉํ•ด ์ตœ๋Œ€ ๊ณ„์ธต ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค

- ๊ณ„์ธตํ˜• ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ ๋ช…ํ™•ํžˆ ๋ณด๊ธฐ ์œ„ํ•ด LPAD ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

~ CONNECT BY ISLEAF : ๊ณ„์ธตํ˜• ์ฟผ๋ฆฌ์—์„œ ํ•ด๋‹นํ•˜๋Š” ๋กœ์šฐ๊ฐ€ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌ, ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ 0, ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ 1

~ CONNECT BY ROOT : ๊ณ„์ธตํ˜• ์ฟผ๋ฆฌ์—์„œ ์ตœ์ƒ์œ„ ๋…ธ๋“œ๋ฅผ ์ฐพ๊ณ ์ž ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ

3. ์„œ๋ธŒ ์ฟผ๋ฆฌ : ๋นˆ์ถœ!

1) ๋ฉ”์ธ ์ฟผ๋ฆฌ์™€ ์„œ๋ธŒ์ฟผ๋ฆฌ

- Subquery๋Š” Select๋ฌธ ๋‚ด ๋‹ค์‹œ Select๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” SQL๋ฌธ์ด๋‹ค

- Subquery์˜ ํ˜•ํƒœ๋Š” FROM๊ตฌ์— SELECT๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ์ธ๋ผ์ธ ๋ทฐ์™€ SELECT๋ฌธ์— Subquery๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ ๋“ฑ์ด ์žˆ๋‹ค ~ ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ์ข…๋ฅ˜๋Š” ์ด 3๊ฐ€์ง€

- WHERE๊ตฌ์— SELECT๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋ธŒ์ฟผ๋ฆฌ๋ผ๊ณ  ํ•œ๋‹ค

 

2) ๋‹จ์ผ ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ์™€ ๋‹ค์ค‘ ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ

- ๋‹จ์ผ ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ๋‹จ ํ•˜๋‚˜์˜ ํ–‰๋งŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ ๋น„๊ต ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

- ๋‹ค์ค‘ ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ–‰์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ IN, ANY, ALL, EXISTS๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค

 

3) ๋‹ค์ค‘ ํ–‰

- ๋‹จ์ผ ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ€ ํ•œ ๊ฐœ์˜ ํ–‰์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‹จ์ผ ํ–‰ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

ex) SELECT username, height FROM usertbl WHERE height > (SELECT height FROM usertbl WHERE addr = '๊ฒฝ๋‚จ');

-> ์˜ค๋ฅ˜ ๋ฐœ์ƒ, ๋‹จ์ผ์ธ์ง€ ๋‹ค์ค‘์ธ์ง€ ํŒ๋‹จํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—

(1) ANY

- ์„œ๋ธŒ์ฟผ๋ผ ์•ž ANY์˜ ์˜๋ฏธ๋Š” OR์˜ ๊ฐœ๋…๊ณผ ๋น„์Šทํ•˜๋‹ค

ex) SELECT username, height FROM usertbl WHERE ANY height (SELECT height FROM usertbl WHERE addr = '๊ฒฝ๋‚จ');

- ANY์™€ ๋™์ผํ•œ ์—ญํ• ์„ ํ•˜๋Š” SOME๋„ ์žˆ๋‹ค

(2) ALL : ALL์€ ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋‹ค ๋งŒ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ถœ๋ ฅํ•œ๋‹ค. AND์˜ ๊ฐœ๋…๊ณผ ์œ ์‚ฌํ•˜๋‹ค

(3) IN : IN์€ ๋ฉ”์ธ ์ฟผ๋ฆฌ์˜ ๋น„๊ต์กฐ๊ฑด์ด ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ ์ค‘ ํ•˜๋‚˜๋งŒ ๋™์ผํ•˜๋ฉด ์ฐธ์ด ๋œ๋‹ค(OR ์กฐ๊ฑด๊ณผ ์œ ์‚ฌ)

(4) EXISTS

- EXISTS๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ ์–ด๋–ค ๋ฐ์ดํ„ฐ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ

(5) ์Šค์นผ๋ผ

- ์Šค์นผ๋ผ๋Š” ๋ฐ˜๋“œ์‹œ ํ•œ ํ–‰๊ณผ ํ•œ ์นผ๋Ÿผ๋งŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ, ์—ฌ๋Ÿฌ ํ–‰์ด ๋ฐ˜ํ™˜๋˜๋ฉด ์˜ค๋ฅ˜ ๋ฐœ์ƒ

 

 

 

728x90