๐พ [CS] SQL์ด๋?
SQL(Structured Query Language) ๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ์กฐ์ํ๊ธฐ ์ํ ํ์ค ์ธ์ด์ ๋๋ค.
SQL์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์, ์ฝ์ , ์์ ์ญ์ ํ๋ ์์ ์ ์ง์ํ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋๋ก ๋ค์ํ ๋ช ๋ น์ด๋ฅผ ์ ๊ณตํฉ๋๋ค.
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ (RDBMS, Relational Database Management System)์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ ๋ด์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ ์ธ์ด์ ๋๋ค.
1๏ธโฃ SQL์ ์ฃผ์ ํน์ง.
1. ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ.
- SQL์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ ์ด๋ธ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- ํ ์ด๋ธ์ ํ(row), ์ด(column)๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ฐ ํ ์ด๋ธ์ ๊ณ ์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
2. ํ์ค ์ธ์ด.
- SQL์ ๊ตญ์ ํ์คํ ๊ธฐ๊ตฌ(ISO) ์ ๋ฏธ๊ตญ ํ์คํํ(ANSI) ์์ ์ ์ํ ํ์ค ์ธ์ด๋ก, ์ฌ๋ฌ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ (์: MySQL, PostgreSQL, Oracle, Microsoft SQL Server)์์ ์ฌ์ฉ๋ฉ๋๋ค.
3. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐ์ ๋ฐ ๊ด๋ฆฌ.
- SQL์ ์ฌ์ฉํ์ฌ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ , ์์ , ์ญ์ ํ ์ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ฑฐ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์(ํ ์ด๋ธ ์์ฑ, ๋ณ๊ฒฝ)ํ ์๋ ์์ต๋๋ค.
4. ๋ฐ์ดํฐ ์ฟผ๋ฆฌ
- SQL์ ๋ฐ์ดํฐ๋ฅผ ์ง์(Query, ์ฟผ๋ฆฌ) ํ๊ธฐ ์ํ ์ธ์ด์ ๋๋ค.
- ์ฌ์ฉ์๋ SQL ์ฟผ๋ฆฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํน์ ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ฑฐ๋, ์ง๊ณํ ์ ์์ต๋๋ค.
2๏ธโฃ SQL์ ์ฃผ์ ๊ธฐ๋ฅ ๋ฐ ๋ถ๋ฅ.
SQL์ ํฌ๊ฒ ๋ค ๊ฐ์ง ์ ํ์ ๋ช ๋ น์ด๋ก ๋ถ๋ฅ๋ฉ๋๋ค.
1. ๋ฐ์ดํฐ ์ ์ ์ธ์ด(DDL, Data Definition Language)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ํ ์ด๋ธ, ์ธ๋ฑ์ค, ์คํค๋ง ๋ฑ์ ์์ฑ๊ณผ ์ญ์ ๋ฅผ ํฌํจํฉ๋๋ค.
- ์ฃผ์ ๋ช
๋ น์ด
-
CREATE
: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด(ํ ์ด๋ธ, ์ธ๋ฑ์ค ๋ฑ)๋ฅผ ์์ฑํฉ๋๋ค. -
ALTER
: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด๋ฅผ ์์ ํฉ๋๋ค. -
DROP
: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด๋ฅผ ์ญ์ ํฉ๋๋ค.
-
์์.
CREATE TABLE Users (
id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
2. ๋ฐ์ดํฐ ์กฐ์ ์ธ์ด(DML, Data Manipulation Language)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ , ์์ , ์ญ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ฃผ์ ๋ช
๋ น์ด
-
INSERT
: ๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ์ ์ฝ์ ํฉ๋๋ค. -
UPDATE
: ํ ์ด๋ธ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํฉ๋๋ค. -
DELETE
: ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํฉ๋๋ค.
-
์์.
INSERT INTO Users (id, name, email) VALUES (1, 'Kobe', 'kobe@example.com');
3. ๋ฐ์ดํฐ ์ฟผ๋ฆฌ ์ธ์ด(DQL, Data Query Language)
- ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ฑฐ๋ ์กฐํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ช
๋ น์ด๋
SELECT
์ ๋๋ค. - ์ฃผ์ ๋ช
๋ น์ด
-
SELECT
: ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํฉ๋๋ค. ๋ค์ํ ์กฐ๊ฑด์ ํตํด ํน์ ๋ฐ์ดํฐ๋ง์ ์ ํ์ ์ผ๋ก ์กฐํํ ์ ์์ต๋๋ค.
-
์์
SELECT * FROM Users WHERE name = 'Kobe';
4. ๋ฐ์ดํฐ ์ ์ด ์ธ์ด(DCL, Data Control Language)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ์ ๊ถํ์ ๊ด๋ฆฌํ๊ณ ์ ์ดํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ฃผ์ ๋ช
๋ น์ด
-
GRANT
: ์ฌ์ฉ์์๊ฒ ๊ถํ์ ๋ถ์ฌํฉ๋๋ค. -
REVOKE
: ์ฌ์ฉ์๋ก๋ถํฐ ๊ถํ์ ํ์ํฉ๋๋ค.
-
์์
GRANT SELECT ON Users TO some_user;
5. ํธ๋์ญ์ ์ ์ด ์ธ์ด(TCL, Transaction Control Language)
- ํธ๋์ญ์
์ ๊ด๋ฆฌํ๊ณ ์ ์ดํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ํธ๋์ญ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ผ๋ จ์ ์์ ์ ํ๋์ ์์ ๋จ์๋ก ์ฒ๋ฆฌํ๋ ๊ฐ๋ ์ ๋๋ค.
- ์ฃผ์ ๋ช
๋ น์ด
-
COMMIT
: ํธ๋์ญ์ ์ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํ๊ณ , ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํฉ๋๋ค. -
ROLLBACK
: ํธ๋์ญ์ ์์ ๋ฐ์ํ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ทจ์ํฉ๋๋ค. -
SAVEPOINT
: ํธ๋์ญ์ ๋ด์์ ๋ณต๊ตฌํ ์ ์๋ ํน์ ์ง์ ์ ์ค์ ํฉ๋๋ค.
-
์์.
BEGIN TRANSACTION;
UPDATE Users SET email = 'kobe@example.com' WHERE id = 1;
COMMIT;
3๏ธโฃ SQL์ ์ฃผ์ ๋ช ๋ น์ด ์์
1. ๋ฐ์ดํฐ ์กฐํ(SELECT
)
SELECT name, email FROM Users WHERE id = 1;
- ์ด ์ฟผ๋ฆฌ๋
Users
ํ ์ด๋ธ์์id
๊ฐ 1์ธ ์ฌ์ฉ์์ ์ด๋ฆ๊ณผ ์ด๋ฉ์ผ์ ์กฐํํฉ๋๋ค.
2. ๋ฐ์ดํฐ ์ฝ์
(INSERT
)
INSERT INTO Users (name, email) VALUES ('Kobe', 'kobe@example.com');
- ์ด ์ฟผ๋ฆฌ๋
Users
ํ ์ด๋ธ์ ์๋ก์ด ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
3. ๋ฐ์ดํฐ ์์ (UPDATE
)
UPDATE Users SET email = 'kobe@example.com' WHERE id = 2;
- ์ด ์ฟผ๋ฆฌ๋
id
๊ฐ 2์ธ ์ฌ์ฉ์์ ์ด๋ฉ์ผ์ ์์ ํฉ๋๋ค.
4. ๋ฐ์ดํฐ ์ญ์ (DELETE
)
DELETE FROM Users WHERE id = 3;
- ์ด ์ฟผ๋ฆฌ๋
id
๊ฐ 3์ธ ์ฌ์ฉ์๋ฅผUsers
ํ ์ด๋ธ์์ ์ญ์ ํฉ๋๋ค.
4๏ธโฃ SQL์ ์ฅ์ .
1. ๋ฐ์ดํฐ ๊ด๋ฆฌ์ ํ์คํ.
- SQL์ ๋๋ถ๋ถ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ๋๋ ํ์คํ๋ ์ธ์ด์ ๋๋ค.
- SQL์ ํ์ตํ๋ฉด ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
2. ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ฒ์.
- SQL์ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์์ ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ์ ์์ต๋๋ค.
- ๋ณต์กํ ์กฐ๊ฑด์ ์ฌ์ฉํ์ฌ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์กฐํํ ์ ์์ต๋๋ค.
3. ๊ฐ๋ ฅํ ๋ฐ์ดํฐ ์กฐ์.
- SQL์ ๋ฐ์ดํฐ์ ์ฝ์ , ์์ , ์ญ์ ์ ๊ฐ์ ๊ธฐ๋ณธ์ ์ธ ์์ ์ธ์๋, ๋ฐ์ดํฐ์ ์ง๊ณ, ์ ๋ ฌ, ๊ทธ๋ฃนํ ๋ฑ ๊ฐ๋ ฅํ ๋ฐ์ดํฐ ์กฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
4. ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ.
- SQL์ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ ๋ค์ํ ์ ์ฝ ์กฐ๊ฑด(Primary Key, Foreign Key, Unique, Not Null ๋ฑ)์ ์ ์ํ ์ ์์ต๋๋ค.
5. ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ.
- SQL์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ณ , ๋ณต์กํ ์ฟผ๋ฆฌ์ ์ฐ์ฐ์ ์ํํ ์ ์์ด ๋ฐ์ดํฐ ๋ถ์๊ณผ ๋น์ฆ๋์ค ์ธํ ๋ฆฌ์ ์ค ์์ ์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
5๏ธโฃ SQL์ ๋จ์ .
1. ๋น์ ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ํ๊ณ.
- SQL์ ์ ํํ๋ ํ
์ด๋ธ ํ์์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ ํ์ํ์ง๋ง, ๋น์ ํ ๋ฐ์ดํฐ๋ ์ ์ฐํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ๋ ํ๊ณ๊ฐ ์์ต๋๋ค.
- ์ด๋ฌํ ๊ฒฝ์ฐ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ ์ ํฉํ ์ ์์ต๋๋ค.
2. ๋ณต์กํ ์ฟผ๋ฆฌ ์์ฑ.
- ๋ณต์กํ ๋ฐ์ดํฐ ๋ถ์์ด๋ ๋๊ท๋ชจ ์ฐ์ฐ์ ์ํํ๋ ค๋ฉด, SQL ์ฟผ๋ฆฌ๊ฐ ๋งค์ฐ ๋ณต์กํด์ง ์ ์์ต๋๋ค.
- ์ฟผ๋ฆฌ์ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ์๋นํ ์ ๋ฌธ ์ง์์ด ํ์ํ ์ ์์ต๋๋ค.
6๏ธโฃ SQL์ ์ฌ์ฉ ์ฌ๋ก.
1. ์น ์ ํ๋ฆฌ์ผ์ด์
- ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ SQL์ ์ฌ์ฉํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, ์ ์์๊ฑฐ๋ ์ฌ์ดํธ์์ ์ฌ์ฉ์ ๊ณ์ , ์ฃผ๋ฌธ ์ ๋ณด, ์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์กฐํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
2. ๋ฐ์ดํฐ ๋ถ์.
- ๋น์ฆ๋์ค ์ธํ ๋ฆฌ์ ์ค(BI) ๋๊ตฌ์ ํจ๊ผ ์ฌ์ฉํ์ฌ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ณ ๋ณด๊ณ ์๋ฅผ ์์ฑํฉ๋๋ค.
- SQL์ ๋ฐ์ดํฐ ๋ถ์๊ฐ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ถ์ถํ๋ ๋ฐ ํ์์ ์ธ ๋๊ตฌ์ ๋๋ค.
3. ํธ๋์ญ์ ์์คํ .
- ์ํ ์์คํ , ์ฌ๊ณ ๊ด๋ฆฌ ์์คํ ๋ฑ์์๋ SQL์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ณ , ์ฌ๋ฌ ์์ ์ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๋ ํธ๋์ญ์ ์์คํ ์ ๊ตฌ์ถํฉ๋๋ค.
7๏ธโฃ ์์ฝ.
- SQL(Structured Query Language) ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ์กฐ์ํ๊ธฐ ์ํ ํ์ค ์ธ์ด์ ๋๋ค.
- SQL์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ(
SELECT
), ์ฝ์ (INSERT
), ์์ (UPDATE
), ์ญ์ (DELETE
)ํ ์ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๊ณ ์ฌ์ฉ์ ๊ถํ์ ๊ด๋ฆฌํ๋ ๋ฑ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด์์ ํ์ํ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. - SQL์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์์ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ฉฐ, ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ์ํ ํต์ฌ ๊ธฐ์ ์ค ํ๋์ ๋๋ค.