SQL์ ๊ธฐ๋ณธ
1. ๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๊ฐ์
1) ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋?
๋ฐ์ดํฐ: ์, ๋ฌธ์๋ก ์ด๋ฃจ์ด์ง ๋จ์, ๊ฐ๊ด์ ์ธ ์ฌ์ค
์ ๋ณด: ์๋ฃ๋ฅผ ๊ฐ๊ณตํด์ ์๋ฏธ๋ฅผ ์ป๋ ๊ฒ (ํต๊ณ, ํฉ๊ณ, ๊ทธ๋ฃนํ ๋ฑ์ ํตํด ์ธ์ฌ์ดํธ๋ฅผ ์ป๋ ๊ฒ)
๋์ ์๋ฏธ: ์ผ์์ ์ธ ์ ๋ณด๋ฅผ ๋ชจ์๋์ ๊ฒ ์์ฒด
์ข์ ์๋ฏธ: ํน์ ๊ธฐ์ ์ด๋ ์กฐ์ง, ๊ฐ์ธ์ด ํ์(๋ถ๊ฐ๊ฐ์น๊ฐ ๋ฐ์ํ๋)์ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ผ์ ํ ํํ๋ก ์ ์ฅํด ๋์ ๊ฒ
DMBS(Database Management System): ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ด๋ฆฌ, ์๊ธฐ์น ๋ชปํ ์ฌ๊ฑด์ผ๋ก ์ธํ ๋ฐ์ดํฐ ์์ค์ ๋ง๊ณ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ํํธ์จ์ด
์ข ๋ฅ: ์ค๋ผํด, ๋ง๋ฆฌ์๋๋น, ๋ง์ดํฌ๋ก์ํํธ SQL Server, MySQL, PostgreSQL
2) ๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค(RDB) - ์ ํ ๋ฐ์ดํฐ
๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค: ์ ๊ทํ๋ฅผ ํตํ ํฉ๋ฆฌ์ ์ธ ํ ์ด๋ธ ๋ชจ๋ธ๋ง, ์ด์ ํ์์ ์ ๊ฑฐ, ์ค๋ณต์ ํผํ๊ณ ๋์์ฑ ๊ด๋ฆฌ ๋ณํ ์ ์ด
> ๊ตฌ์กฐ, ๊ท์น์ด ์ ํด์ง - ์ ํ ๋ฐ์ดํฐ
> ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์ด๊ด ๊ด๋ฆฌ, ๋ฐ์ดํฐ์ ์ฑ๊ฒฉ, ์์ฑ ๋๋ ๋ฐฉ๋ฒ ๋ฑ์ ์ฒด๊ณํ, ๊ตฌ์กฐ์ ๊ท์น์ด ์ ํด์ ธ์์ผ๋ฉฐ, ์ฒด๊ณํ ๋์ด์์
> ๋ฐ์ดํฐ ํ์คํ๋ฅผ ํตํ ๋ฐ์ดํฐ ํ์ง ํ๋ณด
> ๋ณด์ ๊ธฐ๋ฅ
> ์กฐ๊ฑด์ ์๋ฐฐ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๊ฑฐ๋, ๊ด๊ณ๋ฅผ ์ฐ๊ฒฐํ๋ ์ค์ ๋ฐ์ดํฐ ์ญ์ ์, ์ด๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ
> ๊ฐ์์ค๋ฌ์ด ์ฅ์ ์๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅ, ์์ , ์ญ์ ํ๋ ๋ฐ์ดํฐ๊ฐ ๋ฐ์๋๋๋ก ๋ณด์ฅ, ๋ฐ์ดํฐ ํ๋ณต, ๋ณต๊ตฌ ๊ธฐ๋ฅ ์ ๊ณต
3) NoSQL(Not Only SQL) - ๋น์ ํ ๋ฐ์ดํฐ
> ๋น์ ํ๋ฐ์ดํฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ท์น์ด ์ ํด์ ธ์์ง ์์
> ๋น ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋น์ ํ๋ฐ์ดํฐ: ํ ์คํธ, ์ด๋ฏธ์ง, ๋์์ ๋ฑ
๋ชจ๋ RDB๋ฅผ NoSQL๋ก ๋์ฒดํ๋ ๊ฒ์ด ์๋ RDB๊ฐ ํ ์ ์๋ ์์ญ์ NoSQL์ด ํจ๊ป ๊ณต์กดํ๋ฉด์ ํ์ฉ (ํ์
๊ด๊ณ)
NoSQL์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ํํ ํํ๋ก ๊ฐ๊ณตํ ๋ค์ RDB๋ก ์ฐ๊ฒฐ
4) SQL๋ฌธ ์ข ๋ฅ
Table: ํน์ ํ ์ข
๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐ์ ๋ชฉ๋ก์ผ๋ก ๋ฌถ์ ๊ฒ, ๋ฐ์ดํฐ๋ฅผ ์ข
๋ฅ๋ณ๋ก ๊ตฌ๋ถํ๋ ๋จ์
(ํ์ํ
์ด๋ธ, ์ํํ
์ด๋ธ, ์ฃผ๋ฌธํ
์ด๋ธ)
์ด: ์ปฌ๋ผ, ํผ์ณ
ํ: ๋ก์ฐ, ๋ ์ฝ๋
ํ๋์ ์ด์๋ ๊ฐ์ ์์ฑ์ ์ ๋ณด๊ฐ ๋ค์ด๊ฐ์๋ค.
RDB๋ ๋๋ถ๋ถ 2์ฐจ์์ ํ๋ ฌ๋ก ์ด๋ฃจ์ด์ง
๋นจ๊ฐ์์ด ๊ณ ์ ๊ฐ(Primary key : PK) ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ์ ์ผํ ๊ฐ ์ ๋ ์ค๋ณต ๋ถ๊ฐ, ๋จ ํ๋๋ง ์์ด์ผํจ
PK๋ฅผ ๋ฌด์์ผ๋ก ํ ์ง ๊ฒฐ์ - ๋ฌด์กฐ๊ฑด ๋ฐ๋์ ํ๋์ PK๊ฐ ํ์ํ๋ค.
2. ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ ์
ํตํฉ๋ ๋ฐ์ดํฐ (integrated data) | ๋์ผํ ๋ด์ฉ์ ๋ฐ์ดํฐ๊ฐ ์ค๋ณต๋์ง ์์ DB ๊ด๋ฆฌ ์, ๋ฐ์ดํฐ๊ฐ ๋๋ ์ ธ์์ผ๋ฉด ๊ด๋ฆฌ๊ฐ ์ด๋ ค์ ๊ทธ๋์ ๋ถ๋ฆฌํด์ ๊ด๋ฆฌํ์ง ์๊ณ ํตํฉํด์ ๊ด๋ฆฌํ๋ค๋ ๋ป ๋๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ๊ฐ ๋ง๋ค ํ์ ์์ |
์ ์ฅ๋ ๋ฐ์ดํฐ (stored data) | ๋์คํฌ ๋ฑ ์ ์ฅ ๋งค์ฒด์ ์ ์ฅ ์ ์ฅ์ด ๋์ด์์ด์ผํจ, ๋๋ถ๋ถ ํ๋๋์คํฌ๊ฒ ์ง๋ง ๋ค์ํ ์ ์ฅ ๋งค์ฒด์ ์ ์ฅํ ์ ์์ |
๋ณํ๋๋ ๋ฐ์ดํฐ (changeable data) | ๋ฐ์ดํฐ์ ์ฝ์
, ์ญ์ , ์์ ์ ํตํ ์ต์ ๋ฐ์ดํฐ ์ ์ง ์ ์ ๋ค์ด ํ์๊ฐ์ ์ ํ๋๋ฐ, ์ฐ๋ฝ์ฒ๊ฐ ์ ๋ฐ์ดํธ ๋๊ฑฐ๋ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋๊ฑฐ๋, ํํด๋ก ์ญ์ ํ ์ ์์ ์ด๋ฅผ ํตํด ์ต์ ์ ๋ณด๋ฅผ ์ ์งํ ์ ์๊ฒํจ |
๊ณต์ฉ ๋ฐ์ดํฐ (shared data) | ์ฌ๋ฌ ์ด์ฉ์๊ฐ ๋์์ ๊ณต์ ๊ฐ๋ฅ ์ฌ๋ฌ ๋ด๋น์, ์ดํ๋ฆฌ์ผ์ด์ (์น, ERP, Shopping mall)๋ค์ด ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ณ ๋ฐ์ดํฐ ์ฝ์ , ์์ , ์ญ์ ๋ฅผ ํจ๊ป ํ๊ณ ์๋ ๊ฒ |
์ค๋ผํด์ ์ค์นํ์ง ์์๋ ์ ์ ์ ๋ณด๋ง ์์ผ๋ฉด ์ ์์ด ๊ฐ๋ฅ
SQL developer ๋ ๊ฐ ํด๋ผ์ด์ธํธ ์ญํ ์ ํ๋ ๊ฒ ๋๋น๋ฒ, ํ ๋ ๋ฑ๋ฑ๊ณผ ๊ฐ๋ค
3. structured query language
๊ตฌ์กฐ์ ์ง์ ์ธ์ด
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํต์ ์ธ์ด
๋ฐ์ดํฐ ์กฐํ ์ ์ ์กฐ์์ ์ํ ์ธ์ด
์ข ๋ฅ | ๋ช ๋ น์ด |
๋ฐ์ดํฐ ์กฐ์์ด DML (Date Manipulation Language) |
๋ฐ์ดํฐ ์กฐ์ ์ธ์ด, ๋ฐ์ดํฐ ์กฐํ, ๊ฒ์, ์์ , ์ญ์ SELECT, SELECT DISTINCT, INSERT, UPDATE, DELETE |
๋ฐ์ดํฐ ์ ์์ด DDL (Data Definition Language) |
๋ฐ์ดํฐ ์ ์ ์ธ์ด, ํ
์ด๋ธ ์์ฑ, ์์ , ๋ณ๊ฒฝ, ์ญ์ CREATE, ALTER, DROP, RENAME |
๋ฐ์ดํฐ ์ ์ด์ด DCL (Data Control Language ) |
๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ ๊ทผ ๊ถํ ์ ์ด ์ธ์ด GRANT, REVOKE |
ํธ๋์ญ์
์ ์ด์ด TCL (Transaction control language) |
ํธ๋์ญ์
(๋
ผ๋ฆฌ์ ์์
๋จ์) ์ ์ด๋ฅผ ์ํ ์ธ์ด COMMIT, ROLLBACK > Transaction? ๊ณ์ข์ด์ฒด๋ฅผ ์ฐ๋ฆฌ๊ฐ ํด์ค ๊ทธ๋ฌ๋ ์ค์ ์ํ์์๋ ์ฌ๋ฌ ๊ธฐํ ์์ ์ด ๊ฐ์ด ์ด๋ฃจ์ด์ง ์ฐ๋ฆฌ๋ ํ๋์ ์์ ์ผ๋ก ๋ฌถ์ด๋์ ๊ทธ๊ฒ์ ํธ๋์ญ์ ์ด๋ผ๊ณ ํ๊ณ ์ด๊ฒ์ ์ ์ดํ๋ ์ธ์ด |
4. SQL ํน์ง
- ๋์๋ฌธ์ ๊ตฌ๋ถ์์
- ๋์ด์ฐ๊ธฐ, ์ค๋ฐ๊ฟ ์ ํ ์์: ๊ธฐ๋ณธ์ ์ธ ํค์๋ ๊ตฌ๋ถ๋ง ๋๋ค๋ฉด?
- ๋ค์ฌ์ฐ๊ธฐ๋ ์ ๋ฌด์ ์ค์, ๋ณดํต ํค์๋๋ ๋๋ฌธ์ ์ปฌ๋ผ๋ช ์ ์๋ฌธ์๋ก ์ฐ๋ ๊ฒ์ ์ ํธํจ
- ํ๋์ ๋ฌธ์ฅ์ ๋ง์ง๋ง์ ;๋ก ๊ตฌ๋ถ
- ํน์ ๊ฐ ์ ๋ ฅ ์ ๋ฌธ์์ด์ธ ๊ฒฝ์ฐ '๋ก ๊ฐ์ธ์ ์ ๋ ฅ
- ๋ด๊ฐ ์ปค์๊ฐ ์๋ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ์ธ๋ฏธ์ฝ๋ก ์ด ๋ง์นจํ ์ญํ / ctrl+enter๋ฅผ ๋๋ฅด๋ฉด ๋๋ฌ๋ค๋ ์๋ฏธ
- ๋๋๊ทธํ๋ฉด ๋๋๊ทธํ ๋ถ๋ถ๋ง ์คํ๋จ (์ธ๋ฏธ์ฝ๋ก ์ด ์์ ๋)
๋ฐ์ดํฐ ์กฐ์์ด DML
1) INSERT (์ฝ์ )
2) UPDATE (์์ )
3) DELETE (์ญ์ )
4) SELECT (์กฐํ)
5) SELECT DISTINCT
ํธ๋์ญ์ ์ ์ด์ด TCL
: INSERT, UPDATE, DELETE ์์ ์ ์ ์ฅํ๊ฑฐ๋ ๋๋๋ฆฌ๋ ์ญํ
1) COMMIT
2) ROLLBACK
3) SAVEPOINT
DML (๋ฐ์ดํฐ ์กฐ์์ด)
1) INSERT ๋ฌธ: ํ ์ด๋ธ์ VALUES๋ฅผ ๋ฃ๋ ๊ฒ
INSERT INTO ํ
์ด๋ธ๋ช
(์ด์ด๋ฆ, ์ด์ด๋ฆ2, ...) -- ์ด ์ด๋ฆ ์๋ต ๊ฐ๋ฅ
VALUES (๊ฐ1, ๊ฐ2, ...);
check point ID, NAME์ ์์
check point ์ปฌ๋ผ๋ช ์ ์๋ตํ๋ ๊ฒฝ์ฐ
TIP! ์ด ์ด๋ฆ ์๋ตํ๋ ๊ฒ๋ณด๋ค ์์ฑํ๋ ๊ฒ์ด ์ข๋ค.
๊ทธ ์ด์ ๋ ์ปฌ๋ผ์ด ์ถ๊ฐ๋์์ ๊ฒฝ์ฐ, ์๋ตํ์ผ๋ฉด ์ค๊ฐ์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๋ฅผ ์๋ฆฌ ์ฐพ์์ ๊ทธ ์๋ฆฌ์ ๋ฃ์ด์ผํจ.
์ฒ์์ ๊ท์ฐฎ๋๋ผ๋ VALUE๋ฅผ ๋ค ์ ์์ผ๋ฉด ์๋ก์ด VALUE๋ฅผ ๊ทธ๋ฅ ๋งจ ๋ค์ ์์ฑํ๊ธฐ๋ง ํ๋ฉด๋๋๋ก ์ฌ๋งํ๋ฉด ์
๋ ฅํ ๊ฒ
-- ์ปฌ๋ผ๋ช ์ ์๋ตํ๋ ๊ฒฝ์ฐ (์ฃผ์)
์ฃผ์์ด๋? SQL ์คํ์ด ๋์ง ์๋ ์ญํ
> ํ ์ค ์ฃผ์: -- ๋์ฌ ๋๊ฐ
> ์ฌ๋ฌ ์ค ์ฃผ์:
/*
์ฃผ์
*/
2) UPDATE ๋ฌธ: ์์
UPDATE ํ
์ด๋ธ๋ช
SET
์ด์ด๋ฆ1=๊ฐ1, ์ด์ด๋ฆ2 = ๊ฐ2...
WHERE ์กฐ๊ฑด์; -- WHERE ์กฐ๊ฑด์ ํ์ ์ ์ฝ์
3) DELETE ๋ฌธ: ์ญ์
UPDATE ํ
์ด๋ธ๋ช
SET
์ด์ด๋ฆ1=๊ฐ1, ์ด์ด๋ฆ2 = ๊ฐ2...
[WHERE ์กฐ๊ฑด์];
DELETE FROM ํ
์ด๋ธ๋ช
[WHERE ์กฐ๊ฑด์]; -- WHERE ์กฐ๊ฑด์ ํ์ ์ ์ฝ์
ํธ๋์ญ์ ์ ์ด์ด TCL
1) COMMIT: ์ ์ฅ
์์ (NSERT, UPDATE, DELETE)๋ฅผ ์ ์ฅ
2) ROLLBACK: ์์ ์ํ๋ก ๋์๊ฐ
์์ (NSERT, UPDATE, DELETE)๋ฅผ ๋ฏธ์ ์ฅํ๋ ๊ฒ์
์์ ์ค ๋ฌธ์ ๋ฐ์ ์ ํธ๋์ญ์ ์ ๋ณ๊ฒฝ ๋ด์ญ์ ์ทจ์ํ๊ณ , ์ข ๋ฃ ํธ๋์ญ์ ๋ฐ์ ์ด์ ์์ ์ผ๋ก ๋๋๋ฆผ
์ฆ, INSERT, UPDATE, DELETE๋ ๋ฐ๋ก ์ ์ฅ๋๋ ๊ฒ์ด ์๋ ์์ ์ ์ฅ๋์๋ค๊ฐ commitํ๋ฉด ๋ฐ์๋๋ ๊ฒ!
์ค์๋ก ๋ฐ์ดํฐ ์ญ์
DELETE FROM emp_ex;
๋ฐ์ดํฐ ํ์ธ
SELECT * FROM emp_ex;
ROLLBACK ์ ์ฉ
ROLLBACK;
๋ฐ์ดํฐ ์ฌํ์ธ
SELECT * FROM emp_ex;
๋จ, CREATE๋ ํธ๋์ญ์ ์ ์ ์ฉํ ์ ์๊ณ , ๋ฐ๋ก ์ ์ฉ์ด ๋๋ค.
ex)
A๊ฐ B์๊ฒ 100์์ ์ด์ฒด → A๊ณ์ข์์ 100์ ์ถ๊ธํ๊ณ B๊ณ์ข์ 100์ ์ ๊ธํ๋ ๊ณผ์
BUT, ๊ทธ ๊ณผ์ ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ์ค๊ฐ์ ๋กค๋ฐฑํ์ฌ A๊ณ์ข์ 100์์ด ๋ค์ ๋์๊ฐ๋ ๊ฒ!
3) SAVEPOINT: ์์ ์ํ๋ก ๋์๊ฐ
INSERT INTO emp_ex VALUES (4, 'ํ๊ธธ๋', 600);
SAVEPOINT sp1;
INSERT INTO emp_ex VALUES (5, '๊น๊ธธ๋', 700);
SAVEPOINT sp2;
INSERT INTO emp_ex VALUES (6, '์ต๊ธธ๋', 800);
ROLLBACK TO sp2;
COMMIT;
-> ๊น๊ธธ๋๊น์ง COMMIT
๋ฐ์ดํฐ ํ์ธ
SELECT * FROM emp_ex;
SQL๊ฐ๋ฐ์: DML(์กฐํ) - SELECT, SELECT DISTINCT๊ฐ ๊ถ๊ธํ๋ค๋ฉด?
https://hibeginner.tistory.com/19?category=983643
'Deep knowledge > โ ๋ง์ผํฐ์ ๋ฐ์ดํฐ ๋ถ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SQL๊ฐ๋ฐ์-3: ORDER BY(์ ๋ ฌ), WHERE(์กฐ๊ฑด์ ) (0) | 2021.12.23 |
---|---|
SQL๊ฐ๋ฐ์-2: DML(์กฐํ) - SELECT, SELECT DISTINCT (0) | 2021.12.22 |