Programming/DB (6) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [Oracle] ์ค๋ผํด ์ฟผ๋ฆฌ ํ๋ ํ๊ณ (TOP-N ๋ฐฉ์ ํ์ด์ง ์ฒ๋ฆฌ) TOP-N๊ณผ ์ธ๋ฑ์ค ์ค์บ์ด์ ๊ทธ๋ ๊ฒ ๋์ํ๋์ง๊น์ง ์ฌ๋ด์์ ํ์ด์ง์ฒ๋ฆฌ๋ฅผ ์ํด์ ๊ณ ์ ๋ฐฉ์์ ์ฟผ๋ฆฌ๋ฅผ ์ด์ฉํ TOP-N ๋ฐฉ์์ ์ฌ์ฉํ๋ค.์์SELECT *FROM( SELECT ROWNUM as row_num, T.* FROM ( SELECT * FROM MY_TABLE WHERE :์กฐ๊ฑด ORDER BY :์ธ๋ฑ์ค_์ปฌ๋ผ ) T WHERE ROWNUM (:pageNum - 1) * :pageCountpageNum: ํ์ด์ง ๋ฒํธpageCount: ํ ํ์ด์ง์ ํ๊ธฐํ ์์ดํ ์ ์์ ๊ฐ์ ๊ท์น์ ๋ง๊ฒ ์์ฑ๋์ด์๋ ํ์ด์ง์ ์ฒ๋ฆฌํ๋ ์๋น์ค์ ํ ์คํธ๋ฅผ ์งํํ๋ค. ์ฒ์์ ๋จ์ํ๊ฒ ์๊ฐํ๋ค.PK์ ๋ ฌ -> ์ธ๋ฑ์ค ์กด์ฌ -> ์ธ๋ฑ์ค๋ก ์ ๋ ฌ ์์ด ์์ N๊ฐ๋ฅผ ๋จผ์ ์ฝ์ด์จ๋ค. ํ์ง๋ง ์ค์ ๊ฐ๋ฐ์๋ฒ์์ ์งํํ ์ค๋ผํด์ .. [ORACLE] ์์ฃผ ์ฌ์ฉ๋๋ ์ซ์ ์ ์ด ํจ์ ์ค๋ฌด์์ ์์ฃผ ์ฌ์ฉ๋๋ ORACLE SQL ์ซ์ํ ์ ์ด ํจ์ ์์๋ณด๊ธฐโ 1. FLOOR(number)์์์ ์ดํ ๋ฒ๋ฆผ (๋ด๋ฆผ)FLOOR(123.987) → 123โ 2. CEIL(number)์์์ ์ดํ ์ฌ๋ฆผ (์ฒ์ฅ ํจ์)CEIL(123.001) → 124โ 3. ROUND(number [, digits])๋ฐ์ฌ๋ฆผROUND(123.456) → 123ROUND(123.456, 1) → 123.5ROUND(123.456, -1) → 120 ← ์๋ฆฟ์ ๋ด๋ฆผโ 4. TRUNC(๊ฐ, ์๋ฆฟ์)์์์ ์ดํ ์ ์ญ (๋ฒ๋ฆผ) — FLOOR์ ๋น์ทํ์ง๋ง ๋ค๋ฆTRUNC(123.987) → 123TRUNC(123.987, 1) → 123.9TRUNC(123.987, -1) → 120 ๐น TRUNC๋ ์๋ฆฟ์๋ฅผ ์ง์ ํด ์ ์ญ ๊ฐ๋ฅํ.. [์ฟผ๋ฆฌ ํ๋] Oracle DB ์ฟผ๋ฆฌ ํ๋ ํ๊ณ (ft. LPAD) ์ฌ๋ด ์ ๋ฌด ์ค ์ด์์์ timeout์ด ๋๊ณ ์๋ ์๋น์ค๋ฅผ ๋ฐ๊ฒฌํ๋ค.(๋ด๋ถ ์๋น์ค์ด๊ณ ์์ฃผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ์ ๋ฐ๊ฒฌ์ด ๋ฆ์๋ค.)(์๋น์ค์ ์คํ ์๊ฐ์ด 60์ด ์ด์์ด๋ผ๋ฉด, timeout error๋ฅผ ๋ฑ๊ฒ ๋์ด์๋ค.) ๋ก๊ทธ๋ฅผ ํ์ธํด๋ณด๋ ์กฐํ ์ฟผ๋ฆฌ์์ 60์ด ์ด์ ๊ฑธ๋ฆฌ๋ ๊ฒ์ ํ์ธํ๋ค. ํด๋น ์ ๋ฌด์ ํน์ฑ์, ๊ณ ๊ฐ ์ด๋ ฅ ํ ์ด๋ธ์ ์กฐํํ๋๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ์์ plan์ ํ์ธํ๋ ํ ์ด๋ธ์ full scanํ๊ณ ์์๋ค.์ด์ ํ๊ฒฝ ๊ฒฝ์ฐ, ๋ ๋ง์ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒ์ด๋ฏ๋ก ๊ฐ์ ์ด ํ์ํ๋ค. ์ฟผ๋ฆฌ ์ฑ๋ฅ ์ ํ์ ์ฃผ๋ ์์ธ์ "LAPD์ ์ฌ์ฉ"ํ๊ฒ ํ ์ด๋ธ์ ๊ณ ๊ฐ ์ด๋ ฅ์ ๊ด๋ฆฌํ๋ ํ ์ด๋ธ์ด์๊ธฐ์ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ LPAD๋ฅผ ์ฌ์ฉํ์ฌ ์ข๋ณ์ ๋ชจ๋ ๊ฐ๊ณตํ๋ฏ๋ก์จ, ์ธ๋ฑ์ค ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค. ํน์ ๊ธฐ๊ฐ์ ์กฐ๊ฑด์ผ๋ก ๊ฑธ๊ณ ์์๋.. [MySQL] JOIN ๋ฌธ๋ฒ, left join, left outer join, inner join ์ ์ฌ์ง์ ์ถ์ฒ: https://yoo-hyeok.tistory.com/98 SQL join ๋ฌธ์ด ๊ฐ์ฅ ์ ์ ๋ฆฌ ๋์ด ์๋ ๊ทธ๋ฆผ์ธ ๊ฒ ๊ฐ์ต๋๋ค. join: ๋์ผํ column์ ๊ธฐ์ค์ผ๋ก ํ ์ด๋ธ์ ํ๋๋ก ํฉ์นฉ๋๋ค. left(right) join ๊ณผ left(right) outer join์ ์ฐจ์ด์ ์คํ ๊ฒฐ๊ณผ๋ ๋์ผ ํฉ๋๋ค. left join์ ๊ฒฝ์ฐ ๋์ผํ column์ผ๋ก ํ๋๋ก ํฉ์ณ์ง๊ณ left ์ชฝ(A)์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๊ณ B์ ๋ฐ์ดํฐ๋ null๋ก ํ์ ๋ฉ๋๋ค. A ํ ์ด๋ธ id name 1 1 aaa 2 2 AAA B ํ ์ด๋ธ id name 1 2 AAA 2 3 bbb left join ๊ฒฐ๊ณผ A left join B id name id name 1 1 aaa null null 2 2 AAA 2 AAA .. postgresql Homebrew๋ก ์ค์น๋ถํฐ DBeaver ์ฐ๊ฒฐ๊น์ง ํจํค์ง ์ค์น ๋๊ตฌ์ธ homebrew๋ฅผ ์ด์ฉํด์ postgresql์ ์ค์นํ๊ณ DBMS ๋๊ตฌ์ธ DBeaver์ ์ฐ๊ฒฐํ๋ ๊ฒ๊น์ง ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค. Homebrew๋ DBeaver๋ฅผ ์ค์นํ๋ ๋ถ๋ถ์ ์๋ตํฉ๋๋ค. โ๏ธhomebrew๋ก postgresql ์ค์นํ๊ธฐ 1. ํฐ๋ฏธ๋์ ์ ์ํฉ๋๋ค. 2. ๋ฒ์ ํ์ธํ๊ธฐ brew search postgresql ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด homebrew์์ ์ค์น ๊ฐ๋ฅํ postgresql์ ๋ฒ์ ผ์ ํ์ธํ ์ ์์ต๋๋ค. @ ๋ค์ ์๋ ์ซ์๊ฐ ๋ฒ์ ์ ์๋ฏธํฉ๋๋ค. 3. ์ค์นํ๊ธฐ brew install postgresql ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ์ต์ ๋ฒ์ ์ posrgresql์ ์ค์นํ ์ ์์ต๋๋ค. ๋ง์ฝ, ํน์ ๋ฒ์ ์ ์ค์นํ๊ณ ์ถ๋ค๋ฉด, @๊น์ง ํฌํจํ ์ ์ฒด ์ด๋ฆ์ ์ ์ด์ฃผ๋ฉด ๋ฉ๋๋ค. ex).. [DBeaver / MySQL] ๋ฌดํ ๋ก๋ฉ(dead lock) ํด๊ฒฐ DBeaver / MySQL ๋ฌดํ ๋ก๋ฉ ํด๊ฒฐ๋ฒ์ต๊ทผ ํ์๋ค๊ณผ ์งํํ๋ ๊ฐ์ธ ํ๋ก์ ํธ์์ DB์กฐ์์ ํ๋๊ฒฝ์ฐ๊ฐ ๋ง๋ค๋ณด๋ DBeaver๊ฐ ๋ฌดํ๋ก๋ฉ์ด ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ๋ฅผ ์ข ์ข ๋ชฉ๊ฒฉํ๊ฒ ๋์ต๋๋ค. ๋ณดํต ์ฟผ๋ฆฌ๋ฌธ์ ์๋ฅ๋ ์ธ๋ถ์์ธ์ ์ํด์ ์ ์ ์ข ๋ฃ๋์ง ์์ ์ํ์์ ๋ค๋ฅธ ๊ณณ์์ SQL๋ช ๋ น์ ์คํํ๊ธฐ์ DBeaver๊ฐ ์ด๋ฅผ ์ธ์ํ์ง ๋ชปํ๊ณ ๊ณ์ ์คํ์ ์์ฒญํ๋ค๊ฐ ๋ฌดํ ๋ก๋ฉ(dead lock)์ด ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ ์์ต๋๋ค. ์์Java ์ ํ๋ฆฌ์ผ์ด์ ์ ํตํด query ์คํ -> ์ค๋ฅ -> "DB ๋๊ธฐ ์ค"DBeaver๋ฅผ ํตํด query ์คํ -> "DB ๋๊ธฐ ์ค"์ด ๋๋ ๋ ๊น์ง ๊ธฐ๋ค๋ฆผ... -> ๋ฌดํ ๋ก๋ฉ์ด๋ฐ ๋ชจ์ต ํน์ ๋ฐ๋์ ๊ฒฝ์ฐ์ ๋๋ค. ๊ฐ์ฅ ๊ฐ๋จํ ํด๊ฒฐ๋ฒ์ ์ฌ์ฉํ๋ DB ์ ์ ๊ฒฝ์ฐ MySQL ์๋น์ค๋ฅผ ์ฌ์์ํ๋ ๊ฒ (๊ฐ์ธ .. ์ด์ 1 ๋ค์