[PostgreSQL] ๊ณ ๊ธ‰ GROUPING ์ „๋žต : SETS, CUBE, ROLLUP์˜ ๊ฐœ๋…, ํšจ๊ณผ์ ์ธ ์‚ฌ์šฉ๋ฒ• ๋ฐ ์ฃผ์˜์‚ฌํ•ญ

[PostgreSQL] ๊ณ ๊ธ‰ GROUPING ์ „๋žต : SETS, CUBE, ROLLUP์˜ ๊ฐœ๋…, ํšจ๊ณผ์ ์ธ ์‚ฌ์šฉ๋ฒ• ๋ฐ ์ฃผ์˜์‚ฌํ•ญ

1. SETS, CUBE, ROLLUP์˜ ๊ฐœ๋… ๋ฐ ์‚ฌ์šฉ๋ฒ• ๊ณ ๊ธ‰ "GROUP BY"์˜ ๊ธฐ๋Šฅ๋“ค๋กœ PostgreSQL์—์„œ๋Š” SETS, CUBE, ROLLUP ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ์ฝ˜์…‰ํŠธ๋Š” ์ผ๋ฐ˜ GROUP BY์™€ ๋™์ผํ•˜๊ฒŒ FROM / WHERE ์ ˆ์—์„œ ์„ ํƒ๋œ ๋ฐ์ดํ„ฐ๋Š” ๊ฐ๊ฐ ์ง€์ •๋œ ๊ทธ๋ฃน์œผ๋กœ GROUP BY ๋˜๊ณ , ๊ฐ ๊ทธ๋ฃน์— ๋Œ€ํ•ด ์ง‘๊ณ„๊ฐ€ ๊ณ„์‚ฐ๋œ ํ›„, ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค. ๋‹ค์Œ์€ ํ…Œ์ŠคํŠธ๋กœ ์‚ฌ์šฉํ•  ํ…Œ์ด๋ธ” ์ •๋ณด์ด๋‹ค. (๋งˆ์ง€๋ง‰ ์žฅ์˜ 4. ํ…Œ์ด๋ธ” & ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์ฐธ๊ณ ) 1-1. GROUP BY SETS์˜ ๊ฐœ๋… ๋ฐ ์‚ฌ์šฉ๋ฒ• GROUPING SETS์˜ ๊ฐ ํ•˜์œ„ ์š”์†Œ(subsets)๋“ค์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ์—ด ํ˜น์€ ํ‘œํ˜„์‹์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์กฐํ•ฉ์— ๋งž๊ฒŒ ์ง‘๊ณ„ ๊ฒฐ๊ณผ๋ฅผ ๋ณ„๋„๋กœ ๊ณ„์‚ฐํ•œ๋‹ค. ...

[PostgreSQL] UNION, INTERSECT, EXCEPT, SQL ์ฟผ๋ฆฌ ๊ฒฐํ•ฉ์˜ ๊ฐœ๋…, ์‚ฌ์šฉ๋ฒ• ๋ฐ ์ฃผ์˜์‚ฌํ•ญ

[PostgreSQL] UNION, INTERSECT, EXCEPT, SQL ์ฟผ๋ฆฌ ๊ฒฐํ•ฉ์˜ ๊ฐœ๋…, ์‚ฌ์šฉ๋ฒ• ๋ฐ ์ฃผ์˜์‚ฌํ•ญ

1. UNION, INTERSECT, EXCEPT๋ฅผ ํ†ตํ•œ ์ฟผ๋ฆฌ ๊ฒฐํ•ฉ UNION(๊ฒฐํ•ฉ), INTERSECT(๊ต์ฐจ), EXCEPT(์ฐจ์ด) ๊ตฌ๋ฌธ์„ ํ†ตํ•ด ๋‘ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค. query1 UNION [ALL] query2 query1 INTERSECT [ALL] query2 query1 EXCEPT [ALL] query2 ํ•ด๋‹น ๊ตฌ๋ฌธ๋“ค์„ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” query1, query2๊ฐ€ ๋™์ผํ•œ ๊ฐœ์ˆ˜, ๋™์ผํ•œ type์˜ ์นผ๋Ÿผ์„ ๋ฆฌํ„ดํ•ด์•ผ ํ•œ๋‹ค. 2. UNION query2์˜ ๊ฒฐ๊ณผ๋ฅผ query1์— ์ด์–ด ๋ถ™์ธ๋‹ค. ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜์—ฌ distinct์™€ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, UNION ALL์„ ์‚ฌ์šฉํ•˜๋ฉด ์ค‘๋ณต์„ ํฌํ•จํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ํ•ฉ์นœ๋‹ค. 2-1. UNION ๋‹จ์ผ ์‚ฌ์šฉ 1~5 ๋ฒˆ์งธ ROWS, 4~8๋ฒˆ์งธ ROWS๋ฅผ ํ•ฉ์นœ ํ›„ ์ค‘๋ณต ์ œ๊ฑฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ...

[PostgreSQL] ํŽ˜์ด์ง• : OFFSET๊ณผ LIMIT์˜ ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ๊ณผ ์ฃผ์˜์ 

[PostgreSQL] ํŽ˜์ด์ง• : OFFSET๊ณผ LIMIT์˜ ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ๊ณผ ์ฃผ์˜์ 

1. Limit๊ณผ Offset์˜ ๊ฐœ๋… ๋ฐ ์‚ฌ์šฉ๋ฒ• Limit๊ณผ Offset์€ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ค‘ ํŠน์ • ๋ถ€๋ถ„์˜ ROW๋งŒ์„ ์กฐํšŒํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. SELECT select_list FROM table_expression [ ORDER BY ... ] [ LIMIT { number | ALL } ] [ OFFSET number ] ์˜ˆ๋ฅผ ๋“ค์–ด ID์ˆœ์„œ๋กœ ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ ์…‹์—์„œ 21๋ฒˆ์งธ๋ถ€ํ„ฐ 30๋ฒˆ์งธ์˜ ROWS๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. -- 21~30๋ฒˆ์งธ ์—ด ์กฐํšŒ SELECT * FROM TEST_EXPLAIN ORDER BY ID LIMIT 10 OFFSET 20 LIMIT์„ ์ง€์ •ํ•˜๋ฉด ํ•ด๋‹น ๊ฐ’๋งŒํผ์˜ ๊ฒฐ๊ณผ๋งŒ ์ถœ๋ ฅ๋˜๋ฉฐ ์ด ๊ฒฐ๊ณผ ๊ฐ’์ด ๋” ์ ์„ ๊ฒฝ์šฐ ์žˆ๋Š” ๋งŒํผ๋งŒ ์ถœ๋ ฅํ•œ๋‹ค. LIMIT ALL, LIMIT NULL์€ LIMIT์„ ์„ค์ •ํ•˜์ง€ ์•Š์€ ๊ฒƒ (์ „์ฒด ROWS ๋ฆฌํ„ด)๊ณผ ๋™์ผํ•˜๋‹ค. OFFSET์€ ๋ฆฌํ„ด๋˜๋Š” ROWS์˜ ์‹œ์ž‘์ ์„ ์ง€์ •ํ•œ๋‹ค. OFFSET 0, OFFSET NULL์€ OFFSET์„ ์„ค์ •ํ•˜์ง€ ์•Š์€ ๊ฒƒ (์ฒซ ROW๋ถ€ํ„ฐ ๋ฆฌํ„ด)๊ณผ ๋™์ผํ•˜๋‹ค. OFFSET๊ณผ LIMIT์„ ๋‘˜ ๋‹ค ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, LIMIT ์นด์šดํŠธ๋ฅผ ์„ธ๊ธฐ ์ „์— OFFSET๋งŒํผ์˜ ROWS๊ฐ€ย ์•ž์—์„œ ์ƒ๋žต๋œ๋‹ค. 2. ์ฃผ์˜์  LIMIT์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ฒฐ๊ณผ ROWS์˜ ์ˆœ์„œ๋ฅผ ์œ ๋‹ˆํฌํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ORDER BY์™€ ํ•จ๊ป˜ ์“ฐ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์„ ์กฐํšŒํ•˜๊ฒŒ ๋  ์ˆ˜ ์žˆ๋‹ค. ์•ž์˜ ์˜ˆ์‹œ ์ฟผ๋ฆฌ์—์„œ ORDER BY๋ฅผ ๋บ€๋‹ค๋ฉด, 10~20 ๋ฒˆ์งธ๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ•ด๋„, ์–ด๋–ค ์ˆœ์„œ์—์„œ์˜ 10~20 ๋ฒˆ์งธ์ธ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. ...

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] 9. try-finally ๋ณด๋‹ค๋Š” try-with-resources๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] 9. try-finally ๋ณด๋‹ค๋Š” try-with-resources๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

1. ๊ฐœ๋… ์ž๋ฐ” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” close ๋ฉ”์„œ๋“œ๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•ด์„œ ๋‹ซ์•„์ค˜์•ผ ํ•˜๋Š” ์ž์›์ด ๋งŽ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ InputStream, ouputStream java.sql.connection ๋“ฑ์ด ์žˆ์œผ๋ฉฐ ํ•ด๋‹น ์ž์›๋“ค์€ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋†“์น˜๊ธฐ ์‰ฌ์›Œ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ์„ฑ๋Šฅ ๋ฌธ์ œ๋กœ ์ด์–ด์ง€๊ณค ํ•œ๋‹ค. ์ด์ค‘ ์ƒ๋‹น ์ˆ˜๊ฐ€ finalizer๋ฅผ ์•ˆ์ •๋ง์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ์— ๋Œ€๋น„ํ•˜๊ณ  ์žˆ๊ธด ํ•˜์ง€๋งŒ, ์™„์ „ํžˆ ์•ˆ์ „ํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์—†๋‹ค. (ํ•ด๋‹น ๋‚ด์šฉ์€ ๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅ) [์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] - [์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] 8. finalizer์™€ cleaner ์‚ฌ์šฉ์„ ํ”ผํ•˜๋ผ ํ”ํžˆ ์‚ฌ์šฉํ•˜๋Š” try-finally๋ฅผ ์‚ฌ์šฉํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ™•์ธํ•ด๋ณด์ž 2. try-finally 2-1. ์ž์›์„ 1๊ฐœ ์‚ฌ์šฉํ•˜๋Š” try-finally ๋ฉ”์„œ๋“œ static String firstLineOfFile(String path) throws IOException { BufferdReader br = new BufferedReader(new FileReader(Path)); try { return br.readLine(); } finally { br.close(); } } ...

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] 8. finalizer ์™€ cleaner ์‚ฌ์šฉ์„ ํ”ผํ•˜๋ผ

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] 8. finalizer ์™€ cleaner ์‚ฌ์šฉ์„ ํ”ผํ•˜๋ผ

1. finalizer์™€ cleaner๋ž€? finalizer์™€ cleaner๋Š” ์ž๋ฐ”์˜ 2๊ฐ€์ง€ ๊ฐ์ฒด ์†Œ๋ฉธ์ž์ด๋‹ค. finalizer๋Š” Object.finalize() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•จ์œผ๋กœ์จ ์‚ฌ์šฉ๋œ๋‹ค. ์ž‘๋™ ์—ฌ๋ถ€ ๋ฐ ์‹œ์ ์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๊ณ  ์ƒํ™ฉ์— ๋”ฐ๋ผ ์œ„ํ—˜ํ•  ์ˆ˜ ์žˆ์–ด ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถˆํ•„์š”ํ•˜๋ฉฐ, ๊ธฐ๋Šฅ์˜ ์ž˜๋ชป๋œ ๋™์ž‘, ๋‚ฎ์€ ์„ฑ๋Šฅ, ์ด์‹์„ฑ ๋ฌธ์ œ์˜ ์›์ธ์ด ๋˜๊ธฐ๋„ ํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋˜๊ณ , ์ž๋ฐ” 9์—์„œ๋Š” finalizer๋ฅผ deprecated API๋กœ ์ง€์ •ํ•˜๊ณ , java.lang.ref.Cleaner ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋œ cleaner๋ฅผ ๋Œ€์•ˆ์œผ๋กœ ์ œ์‹œํ•˜์˜€์œผ๋‚˜, cleaner ๋˜ํ•œ finalizer๋ณด๋‹ค๋Š” ๋œ ์œ„ํ—˜ ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์˜ˆ์ธก๋ถˆ๊ฐ€ํ•˜๊ณ  ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š์•„ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถˆํ•„์š”ํ•˜๋‹ค.ย ...