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

JiYoung Dev ๐Ÿ–ฅ

[Oracle Database] ROWNUM, TOP-N, ํŽ˜์ด์ง• ๊ธฐ์ˆ , ์„œ๋ธŒ์ฟผ๋ฆฌ (2023.03.28~29) ๋ณธ๋ฌธ

full stack/database

[Oracle Database] ROWNUM, TOP-N, ํŽ˜์ด์ง• ๊ธฐ์ˆ , ์„œ๋ธŒ์ฟผ๋ฆฌ (2023.03.28~29)

Shinjio 2023. 3. 28. 14:08

๐Ÿ”Ž ROWNUM

ํ…Œ์ด๋ธ”์˜ ํŠœํ”Œ(ํ–‰)์— ์ž„์‹œ๋กœ ๋ถ€์—ฌ๋˜๋Š” ์ผ๋ จ๋ฒˆํ˜ธ

 

์‹ค์ œ ํ…Œ์ด๋ธ”์—๋Š” ์—†์ง€๋งŒ ํŠน์ • ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ปฌ๋Ÿผ์„ ๊ฐ€์งœ์ปฌ๋Ÿผ(์˜์‚ฌ์ปฌ๋Ÿผ)์ด๋ผ๊ณ  ํ•จ

์˜ˆ: ROWNUM, ROWID

 

 

ROWNUM์€ ๋ณดํ†ต WHERE์ ˆ์— ์‚ฌ์šฉ

WHERE์ ˆ์— ์‚ฌ์šฉํ•˜๋ฉด ์ถœ๋ ฅ๋˜๋Š” ํŠœํ”Œ(ํ–‰)์˜ ๊ฐœ์ˆ˜๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Œ

 

 

์‚ฌ์šฉ์‹œ ์ฃผ์˜์‚ฌํ•ญ

ROWNUM์€ 1์˜ ๊ฐ’์„ ๋จผ์ € ์‚ฌ์šฉํ•ด์•ผ 2์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

 

ROWNUM = 2์ธ ๋Œ€์ƒ์„ ๋ฝ‘์œผ๋ ค๋ฉด? ์ธ๋ผ์ธ๋ทฐ ์‚ฌ์šฉ

์ธ๋ผ์ธ๋ทฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ROWNUM๋„ ์ง์› ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐ€๊ณตํ•ด ์‚ฌ์šฉํ•˜๋Š” ์›๋ฆฌ

 

 

๐Ÿ”Ž TOP-N

์ƒ์œ„์—์„œ N๊ฐœ ๋ฝ‘๊ธฐ

ROWNUM ๊ฐœ๋…๊ณผ ์ธ๋ผ์ธ๋ทฐ ๊ฐœ๋…์„ ์กฐํ•ฉํ•˜์—ฌ ์ƒ์œ„ N๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋ฝ‘๋Š” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

 

โ–ผ ์ง์›๋“ค์˜ ์—ฐ๋ด‰์ด ๋†’์€ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌ ํ›„ ์ƒ์œ„ 5๋ช…๋งŒ ์ถœ๋ ฅ โ–ผ

1. ์ง์› ํ…Œ์ด๋ธ”์„ ์—ฐ๋ด‰์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ

2. ์œ„์—์„œ ์ƒˆ๋กœ ์ •๋ ฌํ•œ ํ…Œ์ด๋ธ”์„ ์ธ๋ผ์ธ๋ทฐ๋กœ ์‚ฌ์šฉํ•˜๊ณ , WHERE ์กฐ๊ฑด์— ROWNUM ํ™œ์šฉํ•˜์—ฌ 5๊ฐœ๋งŒ ์ถœ๋ ฅ

 

 

๐Ÿ”Ž ํŽ˜์ด์ง• ๊ธฐ์ˆ 

ํŽ˜์ด์ง•์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ๊ธˆ์”ฉ ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ์ˆ  (ํŽ˜์ด์ง€๋งˆ๋‹ค ์ •ํ•ด์ง„ ๊ฐœ์ˆ˜์˜ ๊ฒŒ์‹œ๊ธ€์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ)

ROWNUM๊ณผ TOP-N ๊ธฐ์ˆ ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ

 

โ–ผ ๊ฒŒ์‹œํŒ ํ…Œ์ด๋ธ”์—์„œ ๊ฐ€์žฅ ์ตœ๊ทผ์— ๊ฒŒ์‹œ๋œ ๊ฒŒ์‹œ๋ฌผ 40๊ฐœ๋ฅผ ๋ฝ‘์€ ํ›„ ๊ทธ ์ค‘์—์„œ 21๋ฒˆ์งธ๋ถ€ํ„ฐ ๋ฝ‘๊ธฐ โ–ผ 

1) ๊ฐ€์žฅ ์ตœ๊ทผ์— ๊ฒŒ์‹œ๋œ ๊ฒŒ์‹œ๋ฌผ 40๊ฐœ ๋จผ์ € ๋ฝ‘๊ธฐ (TOP-N)

2) 21๋ฒˆ์งธ๋ถ€ํ„ฐ ๋ฝ‘๊ธฐ ์œ„ํ•ด์„œ๋Š” 1)์˜ ์กฐํšŒ ๋ฐ์ดํ„ฐ์— ROWNUM์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ธ๋ผ์ธ์ฟผ๋ฆฌ๋กœ ์‚ฌ์šฉ

3) WHERE ์กฐ๊ฑด์œผ๋กœ 21์ด์ƒ 

 

ํŽ˜์ด์ง• ๊ธฐ์ˆ  ์ž‘์„ฑ๋ฒ•

 

 

 

๐Ÿ”Ž ์„œ๋ธŒ์ฟผ๋ฆฌ(SUB QUERY)

์ž‘์„ฑ๋œ ์ฟผ๋ฆฌ ๋‚ด๋ถ€์— ๋‹ค๋ฅธ ์ฟผ๋ฆฌ๋ฅผ ์‚ฝ์ž… (์‹ค๋ฌด์—์„œ 200% ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ )

๋ฐ–์— ์žˆ๋Š” ์ฟผ๋ฆฌ๋Š” ๋ฉ”์ธ ์ฟผ๋ฆฌ๋ผ ํ•จ

 

๐Ÿ“– ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ(scala subquery)

SELECT์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ

์Šค์นผ๋ผ๋Š” 'ํ•˜๋‚˜์˜'๋ผ๋Š” ๋œป์œผ๋กœ ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ํ–‰๋งŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ํŠน์ง•์„ ๊ฐ€์ง 

์ถœ๋ ฅ๋˜๋Š” ํ•˜๋‚˜์˜ ๊ฐ’์ด ์—†๋‹ค๋ฉด NULL์„ ๋ฐ˜ํ™˜

 

 

โš™ ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ ์‹คํ–‰ ์›๋ฆฌ

๋ฉ”์ธ์ฟผ๋ฆฌ์—์„œ ์ถœ๋ ฅ๋˜๋Š” ํŠœํ”Œ์˜ ์ˆ˜๋งŒํผ SELECT์— ์žˆ๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ๋ฐ˜๋ณต ์‹คํ–‰

 

์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ์•„์šฐํ„ฐ ์กฐ์ธ์œผ๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

์กฐ์ธ ๋ฐฉ์‹ ์‚ฌ์šฉ์„ ์ถ”์ฒœํ•˜์ง€๋งŒ, ์Šค์นผ๋ผ ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ

์•„์šฐํ„ฐ ์กฐ์ธ ์“ฐ๋Š” ์ด์œ 

โ‘  ์„ฑ๋Šฅ

โ‘ก ์Šค์นผ๋ผ์„œ๋ธŒ์ฟผ๋ฆฌ์—์„œ๋Š” ์˜ค๋กœ์ง€ ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ, ํ•˜๋‚˜์˜ ํ–‰๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ

 

์ฃผ์˜ ์‚ฌํ•ญ

์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ ์ถœ๋ ฅ๋˜๋Š” ํ–‰(ํŠœํ”Œ)์€ 1๊ฐœ ํ˜น์€ NULL ์ด์–ด์•ผ ํ•จ

์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ ์ถœ๋ ฅ๋˜๋Š” ์ปฌ๋Ÿผ์€ 1๊ฐœ์—ฌ์•ผ ํ•จ

 

์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ์—์„œ 2๊ฐœ์˜ ์ปฌ๋Ÿผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

 

์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ์—์„œ ์—ฌ๋Ÿฌ ํ–‰์„ ์ถœ๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

 

์Šค์นผ๋ผ์„œ๋ธŒ์ฟผ๋ฆฌ ์“ฐ๋Š” ์ด์œ  

์กฐ์ธ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ

 

โ–ผ ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ ๋ฌธ์ œ 

 

 

๐Ÿ“– ์ธ๋ผ์ธ๋ทฐ(INLINE VIEW)

FROM ๋ถ€๋ถ„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด ๋งˆ์น˜ ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

 

์ƒ์„ธ๋‚ด์šฉ ์•„๋ž˜ ๋งํฌ ์ฐธ์กฐ

 

[Oracle Database] DDL - DROP, ์‹œํ€€์Šค์™€ ๋ทฐ (2023.03.27)

์ฝ”๋ฉ˜ํŠธ ์ž…๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ• COMMENT ON TABLE ํ…Œ์ด๋ธ”๋ช… IS 'ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์„ค๋ช…' ; COMMENT ON COLUMN ํ…Œ์ด๋ธ”๋ช….์ปฌ๋Ÿผ๋ช… IS '์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ์„ค๋ช…' ; ๐Ÿ”Ž ํ…Œ์ด๋ธ”/์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œํ•˜๊ธฐ (DROP) ๐Ÿ“– DROP DROP TABLE ํ…Œ์ด๋ธ”์„ ์˜๊ตฌ

danyoujeong.tistory.com

 

๐Ÿ“– ์ค‘์ฒฉ ์„œ๋ธŒ์ฟผ๋ฆฌ (nested sub query)

์ฃผ๋กœ WHERE์—์„œ ์“ฐ์ž„ (์‚ฌ์šฉ : WHERE, HAVING)

๋ฉ”์ธ์ฟผ๋ฆฌ์™€ ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š”์ง€์— ๋”ฐ๋ผ ์ƒ๊ด€ ์„œ๋ธŒ์ฟผ๋ฆฌ์™€ ๋น„์ƒ๊ด€ ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ ๋‚˜๋‰จ

 

โš™ ๋น„์ƒ๊ด€ ์„œ๋ธŒ์ฟผ๋ฆฌ

์„œ๋ธŒ์ฟผ๋ฆฌ์—์„œ ๋ฉ”์ธ์ฟผ๋ฆฌ์˜ ์ปฌ๋Ÿผ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ (๋ฉ”์ธ์ฟผ๋ฆฌ์™€ ์—ฐ๊ด€X)

์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๊ณ  ๋ฉ”์ธ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰

 

โš™ ์ƒ๊ด€ ์„œ๋ธŒ์ฟผ๋ฆฌ

์„œ๋ธŒ์ฟผ๋ฆฌ์—์„œ ๋ฉ”์ธ์ฟผ๋ฆฌ์˜ ์ปฌ๋Ÿผ์„ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์˜๋ฏธํ•จ (๋ฉ”์ธ์ฟผ๋ฆฌ์™€ ์—ฐ๊ด€ O)

๋ฉ”์ธ์ฟผ๋ฆฌ์—์„œ ์ถœ๋ ฅ๋˜๋Š” ํŠœํ”Œ(ํ–‰) ์ˆ˜๋งŒํผ ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋Œ€์ž…ํ•ด ๋ฉ”์ธ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰

1) ๋ฉ”์ธ์ฟผ๋ฆฌ์—์„œ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์ œ์™ธํ•œ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ํŠœํ”Œ ์ˆ˜๋งŒํผ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰

2) ์„œ๋ธŒ์ฟผ๋ฆฌ์— ์žˆ๋Š” ๋ฉ”์ธ์ฟผ๋ฆฌ ์ปฌ๋Ÿผ์— ์ฐจ๋ก€๋Œ€๋กœ ๊ฐ’์„ ์ž…๋ ฅ

 

 

โ–ผ ์ƒ๊ด€ ์ฟผ๋ฆฌ, ๋น„์ƒ๊ด€ ์ฟผ๋ฆฌ ๋ฌธ์ œ

 

๐Ÿ“– ๋‹จ์ผํ–‰/๋‹ค์ค‘ํ–‰ ์—ฐ์‚ฐ์ž

 

 

 

๋‹จ์ผํ–‰ ์—ฐ์‚ฐ์ž : = , >= , < , != (๋น„๊ต์—ฐ์‚ฐ์ž)

๋‹ค์ค‘ํ–‰ ์—ฐ์‚ฐ์ž : IN, EXISTS, NOT EXISTS, ANY, ALL ๋“ฑ

 

IN : ์ž…๋ ฅ๋œ ๋‹ค์ค‘ํ–‰ ์ค‘์—์„œ ์ผ์น˜ํ•˜๋Š” ๊ฐ’๋“ค์„ ๋ชจ๋‘ ์ถœ๋ ฅ

 

 

ANY : ์ž…๋ ฅ๋œ ๋‹ค์ค‘ํ–‰ ์ค‘์—์„œ ํ•˜๋‚˜๋ผ๋„ ์ผ์น˜ํ•˜๋ฉด ์ถœ๋ ฅ

 

 

ALL : ์ž…๋ ฅ๋œ ๋‹ค์ค‘ํ–‰ ์ค‘์—์„œ ๋ชจ๋‘ ์ผ์น˜ํ•ด์•ผ ์ถœ๋ ฅ