[SQLD] Chapter3 SQL ๊ธฐ๋ณธ(SQLD, D-12)
Categories: Database
๐ ๊ฐ์ธ์ ์ธ ๊ณต๊ฐ์ผ๋ก ๊ณต๋ถ๋ฅผ ๊ธฐ๋กํ๊ณ ๋ณต์ตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ธ๋ก๊ทธ์
๋๋ค.
์ ํํ์ง ์์ ์ ๋ณด๊ฐ ์์ ์ ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋๋ค :๐ธ
[ํ๋ฆฐ ๋ด์ฉ์ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๋ณต๋ฐ์ผ์ค๊ฑฐ์์]
Chapter3 SQL ๊ธฐ๋ณธ
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๋ฐ์ดํฐ๋ฅผ ์ผ์ ํ ์ณฌ๊ณ์ ๋ฐ๋ผ ํตํฉํ์ฌ ๋์คํฌ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ ๊ฒ์ผ๋ก ์์ฉํ๋ก๊ทธ๋จ์ ์ข ์์ ์ด์ง ์๋๋ก ์ผ์ข ์ ๋ฏธ๋ค์จ์ด ํํ๋ก ๋ง๋ ๊ฒ์ ๋งํ๋ค.
- DBMS : ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ตฌ์ถํ๊ณ ๊ด๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์์คํ ์ํํธ์จ์ด
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- 1970๋ E.F.Codd ๋ฐ์ฌ๊ฐ ๋ฐํํ ์ ๊ทํ ์ด๋ก ์ ๋ฐ๋ผ ๋ฐ์ดํฐ ์ผ๊ด์ฑ ๋ฌธ์ ๋ฅผ ๊ทผ๋ณธ์ ์ผ๋ก ํด๊ฒฐํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์์คํ
- 2์ฐจ์ ๊ตฌ์กฐ์ ํ๊ณผ ์ด๋ก ๊ตฌ์ฑ๋ ํ ์ด๋ธ ํํ๋ก ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ค๋ฃจ๋ฉฐ ์ํ์ ์ด๋ก ์ ๋ฐํ์ผ๋ก ํ๊ณ ์์ด ์ฐ์ฐ ์์ฒด๋ฅผ ์ํ์ ์ผ๋ก ์ต์ ํ ํ ์ ์๋ค.
- SQL ์ด๋ผ๋ ๊ณตํต์ ์ง์ ์ธ์ด๋ฅผ ์ ์ํ์ฌ ๋ฐ์ดํฐ๋ก๋ถํฐ ์ํ๋ ์ ๋ณด๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ์กฐํ, ๊ฐ๊ณต, ์ถ์ถํ๋ ๊ฒ์ด ๊ฐ๋ฅ
- Oracle, PostgresSQL, MariaDB, MySQL, SQL Server ๋ฑ ์ด ์๋ค.
- Table
- table = entity = Relation
- ํ: ์ธ์คํด์ค = ๋ ์ฝ๋ = ํํ
- ์ด: ํ๋ = ์์ฑ
-
SQL (Structed Query Langauge)
๋ช ๋ น๋ฌธ์ ์ ๊ณตํ๋ ์ธ์ด, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ดํ ์ ์๋ ์ ์ฐจ์ +๋น์ ์ฐจ์ ์ธ์ด์ด๋ค.
- DDL: Data Definition Langauge
- ๋ฐ์ดํฐ์ ๊ตฌ์กฐ, ์ฆ ์คํค๋ง๋ฅผ ์ ์ํ๋ ๋ช ๋ น์ด
- ex) CREATE, ALTER, DROP, RENAME, TRUNCATE
- DML: Data Manipulation Langauge
- ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ, ์ ๋ ฅ, ์์ , ์ญ์ ํ๋ ๋ช ๋ น์ด
- ์ปค๋ฐ ์ ์ ๋กค๋ฐฑ์ด ๊ฐ๋ฅํ๋ค.
- ex) SELECT, INSERT, UPDATE, DELETE, MERGE
- DCL: Data Control Language
- ์ฌ์ฉ์ ์ ๊ทผ๊ถํ๊ณผ ๊ฐ์ด ๋ณด์๊ณผ ์ ์ด๋ฅผ ๋ค๋ฃจ๋ ๋ช ๋ น์ด
- ex) GRANT, REVOKE
- TCL: Transaction Control Langauge
- ํธ๋์ญ์ ์ ๋ค๋ฃจ๋ ์ธ์ด, DCL์ ์ผ๋ถ๋ก ๋ณด๊ธฐ๋ ํจ
- ex) COMMIT, ROLLBACK, SAVEPOINT
- DDL: Data Definition Langauge
DROP, TRUNCATE, DELETE ์ ์ฐจ์ด
- DROP์ ์คํค๋ง ๊น์ง ์์ ํ ์ญ์
- TRUNCATE ๋ ๋ฐ์ดํฐ๋ง ์ญ์ , ์คํค๋ง๋ ๋จ๊ฒจ ํ ์ด๋ธ์ ์ด๊ธฐํํ๋ค
- DROP, TRUNCATE ๋ ๋ ๋ค ๋์คํฌ ์ ์ฅ๊ณต๊ฐ์ ๋ฆด๋ฆฌ์ฆํ์ฌ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ํ๋ฉฐ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ์ง ์๋๋ค.
- DELETE ๋ DELETE FROM <TABLE> ๋ช ๋ น์ ์ํด์ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ญ์ ํ์ง๋ง ์ ์ฅ๊ณต๊ฐ์ ๋ฆด๋ฆฌ์ฆ ํ์ง๋ ์๋๋ค. DELETE ๋ DDL์ด ์๋๋ฏ๋ก ๋กค๋ฐฑ์ด ๊ฐ๋ฅํ๊ณ ๋ก๊ทธ๋ฅผ ๋จ๊ธด๋ค.
- ๋์ผ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ๋ TRUNCATE๋ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ์ง ์๋ ๋ฑ ์์ ์ทจ์๋ฅผ ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ์ง ์์ผ๋ฏ๋ก DELETE ๋ณด๋ค ์ฒ๋ฆฌ์๋๊ฐ ๋น ๋ฅด๋ค.
ํจ์
๋จ์ผํ ํจ์, ๋ค์คํ ํจ์
- ๋จ์ผํ ํจ์: ํ ํ์ ์ ๋ ฅ์ ๋ํด ํ๋์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํ๋ ํจ์. ์ฃผ๋ก ๊ฐ ํ๋ณ ๋ฐ์ดํฐ ๊ฐ๊ณต์ด๋ ๋ณํ์ ์ฌ์ฉ.
- ๋ค์คํ ํจ์: ์ฌ๋ฌ ํ์ ๊ทธ๋ฃนํํด ํ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํ๋ ํจ์.
SUM
,AVG
๊ฐ์ ์ง๊ณ ํจ์๊ฐ ๋ค์คํ ํจ์์ ํด๋น.
๋ฌธ์ ํจ์
- CHR(n): ASCII ์ฝ๋ ๊ฐ์ ํด๋น ๋ฌธ์๋ก ๋ณํ.
CHR(65)
โ โAโ -
**TRIM([LEADING TRAILING BOTH] โ๋ฌธ์์ดโ FROM โ์๋ณธ ๋ฌธ์์ดโ)**: ํน์ ๋ฌธ์๋ฅผ ์๋ณธ ๋ฌธ์์ด์์ ์ ๊ฑฐ. TRIM('X' FROM 'XXXHELLOXXX')
โ โHELLOโ - LTRIM(๋ฌธ์์ด, ์ ๊ฑฐํ ๋ฌธ์): ๋ฌธ์์ด์ ์ผ์ชฝ์์ ์ง์ ๋ ๋ฌธ์๋ฅผ ์ ๊ฑฐ
LTRIM('XXHELLOXX', 'X')
โ โHELLOXXโ - RTRIM(๋ฌธ์์ด, ์ ๊ฑฐํ ๋ฌธ์): ๋ฌธ์์ด์ ์ค๋ฅธ์ชฝ์์ ์ง์ ๋ ๋ฌธ์๋ฅผ ์ ๊ฑฐ
RTRIM('XXHELLOXX', 'X')
โ โXXHELLOโ - SUBSTR(๋ฌธ์์ด, ์์ ์์น, [๊ธธ์ด]): ๋ฌธ์์ด์์ ํน์ ์์น๋ถํฐ ์ผ๋ถ๋ฅผ ์ถ์ถ.
SUBSTR('HELLO', 2, 3)
โ โELLโ - REPLACE(๋ฌธ์์ด, ๋์ ๋ฌธ์์ด, ๋ณ๊ฒฝ ๋ฌธ์์ด): ํน์ ๋ฌธ์์ด์ ๋ค๋ฅธ ๋ฌธ์์ด๋ก ๊ต์ฒด.
REPLACE('HELLO WORLD', 'WORLD', 'SQL')
โ โHELLO SQLโ
์ซ์ ํจ์
- MOD : ๋๋จธ์ง๋ฅผ ๋ฐํ
MOD(10, 3)
โ 1 - TRUNC(์ซ์, [์์ ์๋ฆฟ์]): ์ซ์๋ฅผ ์๋ฆฟ์์ ๋ง๊ฒ ์๋ฆ
TRUNC(123.456, 2)
โ 123.45 - SIGN(์ซ์): ์ซ์์ ๋ถํธ๋ฅผ ํ์ธํด
1
(์์),-1
(์์),0
(0)์ ๋ฐํ.SIGN(-10)
โ -1 - CEIL(์ซ์): ์์์ ์ด์์ ์ซ์๋ฅผ ์ฌ๋ฆผํ์ฌ ์ ์๋ก ๋ฐํ
CEIL(123.4)
โ 124 - FLOOR(์ซ์): ์์์ ์ดํ์ ์ซ์๋ฅผ ๋ด๋ฆผํ์ฌ ์ ์๋ก ๋ฐํ
FLOOR(123.4)
โ 123
๋ ์ง ํจ์
- SYSDATE: ํ์ฌ ์์คํ
์ ๋ ์ง์ ์๊ฐ์ ๋ฐํ
SELECT SYSDATE FROM DUAL
โ ํ์ฌ ๋ ์ง์ ์๊ฐ ๋ฐํ
NULL ๊ด๋ จ ํจ์
- NVL(ํํ์, ๋์ฒด ๊ฐ): ํํ์์ด NULL์ผ ๊ฒฝ์ฐ ๋์ฒด ๊ฐ์ ๋ฐํ
NVL(NULL, '๋์ฒด๊ฐ')
โ โ๋์ฒด๊ฐโ - NULLIF(ํํ์1, ํํ์2): ๋ ํํ์์ด ๊ฐ์ผ๋ฉด NULL, ๋ค๋ฅด๋ฉด ์ฒซ ๋ฒ์งธ ํํ์ ๋ฐํ
NULLIF(10, 10)
โ NULL - COALESCE(ํํ์1, ํํ์2, โฆ): ์ฌ๋ฌ ํํ์ ์ค NULL์ด ์๋ ์ฒซ ๋ฒ์งธ ๊ฐ์ ๋ฐํ
ํ์ค ์กฐ์ธ
ํ์ค ์กฐ์ธ์ ๊ธฐ์ค ์กฐ๊ฑด์ผ๋ก WHERE ์ ์ด ์๋๋ผ ON ์ ์ ์ฌ์ฉํ๋ฉฐ FROM ์ ์ ์กฐ์ธ์ ์ข ๋ฅ๋ฅผ ๋ช ์ํ๋ค.
where์ , groupby, orderby๋ ๊ธฐ์กด์ ์๊ณ ์๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํด์ ๋ฐ๋ก ์ ๋ฆฌ ํ์ง ์์๋ ๋ ๋ฏ.
์กฐ์ธ๋ ์ ํ ์๊ฐ์ด์๋๋ฐ ๋ชจ๋ฅด๋ ๋ถ๋ถ์ด ์์ด์ ์ ๋ฆฌํ๋ค.
NATURE JOIN
์กฐ์ธ์ ๋์์ด ๋๋ ๋ ํ ์ด๋ธ์์ ๊ฐ์ ์ด๋ฆ์ ์นผ๋ผ์ ๋ํด์๋ ๋์ผํ ์นผ๋ผ ๊ฐ์ ๊ฐ์ง๋ ํ๋ง ๋ณํฉ๋๋ ์กฐ์ธ
SORT MERGE JOIN
์กฐ์ธ์ ์กฐ๊ฑด์ด ๋๋ ์นผ๋ผ์ ์ธ๋ฑ์ค๊ฐ ์์ด์ ์ธ๋ฑ์ค ์ค์บ์ ํ ์ ์๊ฑฐ๋ ๋๋์ ์๋ฃ๋ฅผ ์กฐ์ธํ๊ฒ ๋์ด ๋๋ค ์์ธ์ค ๋ฐฉ์์ด ๋ถ๋ด ๋ ๊ฒฝ์ฐ ์ ์ฒด ํ ์ด๋ธ ์ค์บ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ์กฐ์ธ์ ์ํํ๋ค.
์กฐ์ธ ์ปฌ๋ผ์ ๋ํ์ฌ ๋จผ์ ์ ๋ ฌ์ ์ํํ ํ ์กฐ์ธ์ ์ํํ๋ค.
NESTED LOOP JOIN
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ค์ฒฉ ๋ฃจํ๋ฅผ ์ฌ์ฉํ ๋ฐ๋ณต๋ฌธ๊ณผ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ์ํ๋๋ ์กฐ์ธ์ด๋ค.
์ธ๋ฑ์ค ์ค์บ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋๋ค ์ก์ธ์ค ๋ฐฉ์์ผ๋ก ์ฝ์ด๋ค์ด๋ฏ๋ก ๋ฐ์ดํฐ ์์ด ๋๋ฌด ๋ง์ ๊ฒฝ์ฐ ๋์คํฌ I/O๊ฐ ๋ฐ์ํ์ฌ ์ฑ๋ฅ์ด ๋๋ ค์ง ์ ์๋ค.
HASH JOIN
NESTED LOOP JOIN์ ๋๋ค ์ก์ธ์ค๋ก ์ธํ ๋ถํ ๋ฌธ์ ์ SORT MERGE JOIN์ ์ ๋ ฌ ์์ ์ ๋ํ ๋ถ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์ผ๋ก ๋ ๋ฐฉ์์ ๋จ์ ์ ๊ฐ์ ํ ์กฐ์ธ์ด๋ค. ์กฐ์ธ ์ปฌ๋ผ์ ๋ํด ํด์ํจ์๋ฅผ ์ ์ฉํ์ฌ ์ธ๋ฑ์ค๊ฐ ์์ ๋ ๋ณ๋๋ก ์ ๋ ฌ์ ์ํํ์ง ์๊ณ ๋ ๋น ๋ฅด๊ฒ ์กฐ์ธ ๋์์ ์ฐพ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ ํด์ํจ์ ํน์ฑ์ ๋ฐ๋ผ EQUI JOIN ์์๋ง ์ฌ์ฉํ ์ ์๋ค๋ ํน์ง์ด ์๋ค. ํด์ ํจ์๋ฅผ ์ฌ์ฉํ๋ฏ๋ก CPU ์ฐ์ฐ ๋ถํ๊ฐ ๋๋ค.
์ด๋ฒ ์ฑํฐ๋ ์๊ณ ์๋ ๋ด์ฉ์ด์ง๋ง ๋ถ๋์ด ๋ง์์ ๊ณํ์ด ์ดํ๋ก ์กํ์์๋ค.
์ฌ๊ธฐ ์ง๋๋ฉด 4๋ถํฐ๋ ์๋ ๋ด์ฉ์ด ๋๋ถ๋ถ์ด ์๋๋ผ ๋ ์ค๋ ๊ฑธ๋ฆฌ๊ฒ ์งโฆ? ใ .ใ
Leave a comment