์ง๊ธ์ 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 ROLLUP
ROLLUP
์ 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์ ์ฌ์ฉํด๋ณผ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง (๊ณผ์ฐ?) ์์ผ๋ก ์ฌ์ฉํ ๋ ์ด ์จ๋ค๋ฉด ๋ํ ์ฌ๋ฏธ์๊ฒ ์ผํ ์ ์์ ๊ฒ ๊ฐ๋ค.