์ง๊ธ์ Frontend developer ๋ผ๋ role์ ๊ฐ์ง๊ณ ์ผ์ ํ๊ณ ์์ง๋ง, ๋๋ ์ ์ง์ฅ์์ ๊ทผ๋ฌดํ ์์ full stack ์ผ๋ก ๊ฐ๋ฐ์ ํ์๋ค. frontend๋ ์ฃผ๋ก jquery๋ฅผ ์ฌ์ฉํ๋๊ฒ ๊ฐ๊ณ (๋ฌผ๋ก ๋์ค์๋ react๋ฅผ ์ฌ์ฉํ๋ค), backend๋ java๋ฅผ ์ด์ฉํ๊ณ oracle๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ์๋ค.
๊ทธ๋๋ ๋๋ฆ ์ฌ๋ฏธ์๊ณ ๊ด์ฌ์๊ฒ ํ๋๊ฒ์ด database ์๊ธฐ ๋๋ฌธ์ ๋ด๊ฐ ์ดํดํ๊ธฐ ์ด๋ ค์ ๋ ๋ช๊ฐ์ง ๊ฐ๋
๊ณผ sql ๊ฐ๋
๋ค์ ์ ๋ฆฌํด๋ณธ๋ค. (oracle ๊ธฐ์ค)
GROUP BY์ DISTINCT
distinct๋ ์ฃผ๋ก uniqueํ column์ด๋ record๋ฅผ ์กฐํํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ฉฐ, group by๋ ๋ฐ์ดํฐ๋ฅผ groupingํด์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ ์ฌ์ฉ๋๋ ์ฟผ๋ฆฌ ํํ์ด๋ค.
์ฌ์ค ๋๊ฐ query์ ๊ฒฐ๊ณผ๋ ๋ค๋ฅด์ง ์๋ค. ํ์ง๋ง distinct๋ ์ ๋ ฌํ์ง ์๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํด, group by๋ณด๋ค ์ฑ๋ฅ์ด ๋น ๋ฅด๋ค. ์ฌ์ค distinct๋ ๋ด๋ถ์ ์ผ๋ก group by์ ๋์ผํ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ค. group by์๋ ๊ธฐ๋ณธ์ ์ผ๋ก **์ ๋ ฌ(sort)**์ ๊ฐ๋
์ด ๋ค์ด์์ด ๊ฒฐ๊ณผ์ ๋ฐ์๋์ ์ถ๋ ฅ๋๋ค.
๊ทธ๋์ ์ ๋ ฌ์ด ๊ตณ์ด ํ์ํ์ง ์์ ์์
์ด๋ผ๋ฉด distinct๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฑ๋ฅ์ ์ด๋์ด๋ค.
OUTER JOIN
outer join์ join ์กฐ๊ฑด์์ ๋์ผํ ๊ฐ์ด ์๋ ํ๋ ๋ฐํ์ ํ ๋์ ์ฌ์ฉํ๋ค. ์ฆ A, B Table์ ์๋ก join ํ ๋์ ์กฐ๊ฑด์ด ๋ง์ง ์๋ ๋ฐ์ดํฐ๋ ํ์ํ๊ณ ์ถ์๋ outer join์ ์ฌ์ฉํ๋ค.
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ inner join์ ์กฐ๊ฑด์ด ๋ง๋ ๊ฒฝ์ฐ๋ง ์ถ๋ ฅํ์ง๋ง, outer join์ ๊ฒฝ์ฐ ์กฐ๊ฑด์ด ๋ง์ง ์์ ๊ฒฝ์ฐ null๊ฐ์ผ๋ก ์ถ๋ ฅํ๋ค.
- Left Outer Join
LEFT OUTER JOIN ์ํ์ ๋จผ์ ํ๊ธฐ๋ ์ข์ธก ํ
์ด๋ธ์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋์ดํ๊ณ , ์ฐ์ธก ํ
์ด๋ธ์์ ์กฐ๊ฑด์ ๋ง๋ join ๋์์ ์ฝ์ด์์ ์กฐ๊ฑด์ด ๋ง๋ ๊ฒฝ์ฐ ๋ง๊ฒ ๋ฐฐ์นํ๋ฉฐ, ์กฐ๊ฑด์ด ๋ง์ง ์๋ ๊ฒฝ์ฐ๋ null ๊ฐ์ผ๋ก ์ฑ์ด๋ค.
A LEFT OUTER JOIN B
ON A.ID == B.ID
// A๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ์ฒด๋ฅผ ๋ณด์ฌ์ฃผ๊ณ , ON ์กฐ๊ฑด์ ๋ง๋๊ฒฝ์ฐ B๋ฅผ ๋ณด์ฌ์ค๋ค. ์กฐ๊ฑด์ ๋ง์ง ์๋๊ฒฝ์ฐ์๋ null.- Right Outer Join
RIGHT OUTER JOIN LEFT OUTER JOIN๊ณผ ๋ฐ๋. ์ํ์ ๋จผ์ ํ๊ธฐ๋ ์ฐ์ธก ํ
์ด๋ธ์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋์ดํ๊ณ , ์ฐ์ธก ํ
์ด๋ธ์์ ์กฐ๊ฑด์ ๋ง๋ join ๋์์ ์ฝ์ด์์ ์กฐ๊ฑด์ด ๋ง๋ ๊ฒฝ์ฐ ๋ง๊ฒ ๋ฐฐ์นํ๋ฉฐ, ์กฐ๊ฑด์ด ๋ง์ง ์๋ ๊ฒฝ์ฐ๋ null ๊ฐ์ผ๋ก ์ฑ์ด๋ค.
ROLLUP
SELECT [์กฐํํ๊ณ ์ ํ๋ ์ปฌ๋ผ]
FRON [Table]
WHERE [์กฐํํ๊ณ ์ ํ๋ ์กฐ๊ฑด๋ค]
GROUP BY ROLLUP (๋ฌถ๋ ๊ธฐ์ค)
HAVING [GROUP BY ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค ์กฐ๊ฑด]
// ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง ์ด๋ฉฐ ๋์ผํ ๊ฒฐ๊ณผ์ด๋ค.
// ๋ฐฉ๋ฒ1 : GROUP BY ROLLUP(๊ทธ๋ฃน์ปฌ๋ผ) ** ์ฌ์ฉ
// ๋ฐฉ๋ฒ2 : GROUP BY ๊ทธ๋ฃน์ปฌ๋ผ WITH ROLLUPROLLUP์ GROUP BY์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ์ง๋ง, ๊ฐ group์ ๋ง๋ ์๊ณ ๋ฐ ํฉ๊ณ๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ๋ณด์ฌ์ค๋ค.
ex) ROLLUP์ ์ฌ์ฉํด์ ์ง์
๋ณ๋ก ๊ธ์ฌ ํฉ๊ณ์ ์ด๊ณ๋ฅผ ๊ตฌํ๋ ์์ ์ด๋ค.
// SQL>>
SELECT job, SUM(sal)
FROM employee
GROUP BY ROLLUP(job);
// ๊ฒฐ๊ณผ>>
JOB SUM(SAL)
---------- ----------
AA 1000
BB 2000
CC 3000
DD 5000
EE 4000
15000 --> ๊ธ์ฌ ํฉ๊ณ์ ๋ํ ์ด๊ณ๊ฐ ์ถ๊ฐ ๋์๋ค. (GROUP BY ์ฌ์ฉ์ ๋ณด์ฌ์ง์ง ์์)์์ ์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ค๊ณ๊ฐ ์๋ชป๋ DB์์ OUTER JOIN์ ์ฌ์ฉํ๋๋ผ 2์ฃผ์ ๋ ์ฟผ๋ฆฌ๋ง ์งฐ๋ ๊ธฐ์ต์ด๋๋ค. ์์ง ๊ฐ๋ฐ ์คํฌ์ด ๊ทธ๋ ๊ฒ ๋์ง ์์๋ ๋๋ผ ์ผ๊ทผ์ ์์ฒญํ๋ฉด์ ์ผํ์์ง๋ง, ๊ทธ๋ ์ฌ๋ฌ๊ฐ์ง ๊ฐ๋
์ ์ตํ๊ณ , ๊ทธ ์ดํ๋ก๋ ํ์ธต(?) ์ฟผ๋ฆฌ๋ฅผ ์์ํ๊ฒ ์งฐ๋๊ฒ ๊ฐ๋ค.
RDB์ ๊ฒฝ์ฐ ๋๋ถ๋ถ ์ฌ์ฉํ๋๊ฒ์ด oracle๋ฟ์ด์์ง๋ง, ๊ทธ๋๋ full stack ๊ฐ๋ฐ์ RDB๋ฅผ ๊ทธ๋๋ง ์ฌ๋ฏธ์๊ฒ ํ์๋ ๊ฒ ๊ฐ๋ค. ์์ผ๋ก ์ธ์ ๋ SQL์ ์ฌ์ฉํด๋ณผ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง (๊ณผ์ฐ?) ์์ผ๋ก ์ฌ์ฉํ ๋ ์ด ์จ๋ค๋ฉด ๋ํ ์ฌ๋ฏธ์๊ฒ ์ผํ ์ ์์ ๊ฒ ๊ฐ๋ค.