SQL (Structured Query Language)
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํํ๊ธฐ ์ํ ํ์ค ์ธ์ด, SQL์ ํต์ฌ ์๋ฆฌ๋ฅผ ๋ค๋ฃน๋๋ค.
1. ๋ ผ๋ฆฌ์ ์คํ ์์ (Logical Order of Execution)
SQL์ ์์ฑํ๋ ์์(SELECT -> FROMโฆ)์ ์ค์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์คํํ๋ ์์๋ ๋ค๋ฆ
๋๋ค. ์ด๋ฅผ ๋ชจ๋ฅด๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
- FROM / JOIN: ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ํ ์ด๋ธ์ ๋จผ์ ์ฐพ์ต๋๋ค.
- WHERE: ์กฐ๊ฑด์ ๋ง์ง ์๋ ํ(Row)์ ๋ฏธ๋ฆฌ ๊ฑธ๋ฌ๋ ๋๋ค. (์ฑ๋ฅ ํต์ฌ)
- GROUP BY: ๋จ์ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ต๋๋ค.
- HAVING: ๊ทธ๋ฃนํ๋ ๋ฐ์ดํฐ ์ค ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ทธ๋ฃน๋ง ๋จ๊น๋๋ค.
- SELECT: ์ถ๋ ฅํ ์ปฌ๋ผ์ ์ ํํ๊ณ ๊ณ์ฐํฉ๋๋ค. (Window Function๋ ์ด๋!)
- ORDER BY: ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํฉ๋๋ค.
- LIMIT: ๊ฐ์๋ฅผ ์ ํํฉ๋๋ค.
Why?:
SELECT์์ ๋ง๋ ๋ณ์นญ(Alias)์WHERE์ ์์ ๋ชป ์ฐ๋ ์ด์ ๊ฐ ๋ฐ๋ก ์ด๊ฒ์ ๋๋ค.WHERE๊ฐSELECT๋ณด๋ค ๋จผ์ ์คํ๋๊ธฐ ๋๋ฌธ์ ๋๋ค!
2. ์งํฉ ์ด๋ก (Set Theory)
JOIN์ **์งํฉ(Set)**์ ๊ฐ๋ ์ ๋๋ค.
- INNER JOIN: ๊ต์งํฉ () - ๋ ํ ์ด๋ธ ๋ชจ๋์ ์๋ ๋ฐ์ดํฐ.
- LEFT JOIN: ์ ์ฒด + () - ์ผ์ชฝ์ ๋ค ์ด๋ฆฌ๊ณ , ์ค๋ฅธ์ชฝ์ ์์ผ๋ฉด ๋ถ์.
- FULL OUTER JOIN: ํฉ์งํฉ () - ์์ชฝ ๋ชจ๋ ๋ค ์ด๋ฆผ.
- CROSS JOIN: ๊ณฑ์งํฉ () - ๋ชจ๋ ๊ฐ๋ฅํ ์กฐํฉ (ํ ๊ฐ์ ๊ณฑํ๊ธฐ).
์ปค๋ฆฌํ๋ผ (Curriculum)
1. JOIN (ํ ์ด๋ธ ๊ฒฐํฉ)
์ฌ๋ฌ ํ ์ด๋ธ์ ๊ฒฐํฉํ์ฌ ์๋ฏธ์๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค.
INNER JOIN,LEFT JOIN,FULL OUTER JOIN,CROSS JOIN- JOIN ์์ํ๊ธฐ โ
2. ๋(NULL) ์ฒ๋ฆฌ
๋ฐ์ดํฐ ๋ถ์์ ๊ฐ์ฅ ํฐ ์ , NULL ๊ฐ์ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค.
IFNULL(),COALESCE(),SAFE_DIVIDE()- ๋(NULL) ์ฒ๋ฆฌ ์์ํ๊ธฐ โ
3. ๋ฌธ์์ด ํจ์
ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์๋ฅด๊ณ , ๋ถ์ด๊ณ , ๋ณํํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค.
SUBSTR(),CONCAT(),REGEXP_EXTRACT()- ๋ฌธ์์ด ํจ์ ์์ํ๊ธฐ โ
4. ๋ ์ง/์๊ฐ ํจ์
์๊ณ์ด ๋ถ์์ ๊ธฐ์ด์ธ DATE, TIMESTAMP ์ฒ๋ฆฌ๋ฒ์ ๋ฐฐ์๋๋ค.
DATE_TRUNC(),DATE_DIFF(),FORMAT_DATE()- ๋ ์ง/์๊ฐ ํจ์ ์์ํ๊ธฐ โ
5. ์ง๊ณ์ ๊ทธ๋ฃนํ
๋ฐ์ดํฐ๋ฅผ ์์ฝํ์ฌ ํต์ฐฐ์ ์ป๋ GROUP BY ๊ธฐ์ ์ ๋ฐฐ์๋๋ค.
COUNT(),SUM(),AVG(),COUNTIF()- ์ง๊ณ์ ๊ทธ๋ฃนํ ์์ํ๊ธฐ โ
6. ์๋์ฐ ํจ์ (๊ณ ๊ธ)
ํ๊ณผ ํ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๊ณ์ฐํ๋ SQL์ ๊ฝ, ์๋์ฐ ํจ์๋ฅผ ๋ฐฐ์๋๋ค.
RANK(),LEAD(),LAG(),SUM() OVER()- ์๋์ฐ ํจ์ ์์ํ๊ธฐ โ
7. CTE (Common Table Expression)
๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ๋ ๊ณ ๋ธ๋ก์ฒ๋ผ ๋๋์ด ์์ฑํ๋ ๊ฐ๋ ์ฑ ํฅ์ ๊ธฐ์ ์ ๋๋ค.
WITH๋ฌธ๋ฒ ํ์ฉ- CTE ์์ํ๊ธฐ โ