SQL(Structured Query Language)
- ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๊ณตํต์ ์ธ ํ์ค ์ธ์ด.
- ์ฟผ๋ฆฌ(Query)๋ DBMS์๊ฒ ์์ฒญํ๋ค๋ ๋ป์ด๋ฉฐ ํ๊ตญ๋ง๋ก๋ "์ง์"๋ก ๋ฒ์ญ.
- SQL์ ๋ํ์ ์ธ์ด์ด๋ค. ๋ฒ์ฉ ์ธ์ด๋ ๋ช ๋ น์ ์งํฉ์ ์์ฑํด ๋๊ณ ์ผ๊ด ์คํํ๋๋ฐ ๋นํด SQL์ ๋ช ๋ น์ ๋ด๋ฆฌ๋ ์ฆ์ ์คํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋๋ ค์ค๋ค.
- SQL์ ์ ์ธ์ ์ธ ์ธ์ด์ด๋ค. ์ผ๋ฐ ์ธ์ด๋ ์์ ์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์ ์ฐจ๋ฅผ ์ผ์ผ์ด ๋ช ๋ น์ผ๋ก ๊ธฐ์ ํ ํ ์คํํ๋ค. ๋ฌธ์ ๋ฅผ ํธ๋ ๊ณผ์ ์ ์๋ตํ๊ณ ๋ฌด์์ ์ํ๋ค๋ ๊ฒ๋ง ๋ฐํ๋ค.
SQL ์ฟผ๋ฆฌ(Query)๋ฌธ์ ๋ถ๋ฅ
DDL(Data Definition Language) | DB ์ค๋ธ์ ํธ๋ฅผ ์์ฑ, ์ญ์ , ๋ณ๊ฒฝํ๋ค. CREATE, DROP, ALTER ๋ฑ์ ๋ช ๋ น์ด ์๋ค. DB๋ฅผ ๋์์ธํ๋ ๊ด๋ฆฌ์๊ฐ ์ด ๋ถ๋ฅ์ ๋ช ๋ น์ ์ฃผ๋ก ์ฌ์ฉํ๋ค. |
DML(Data Manipulation Language) | DB๋ฅผ ์กฐํ, ์ฝ์ , ์ญ์ , ๋ณ๊ฒฝํ๋ค. SELECT, INSERT, DELETE, UPDATE ๋ช ๋ น ๋ฑ์ด ์๋ค. ์์ฉ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์๊ฐ ์ฃผ๋ก ์ฌ์ฉํ๋ค. |
DCL(Data Control Language) | ์ฌ์ฉ์์ ๊ถํ์ ๊ด๋ฆฌํ๋ GRANT, DENY, REVOKE ๋ฑ์ ๋ช ๋ น์ด ์๋ค. DBA๊ฐ ์ฃผ๋ก ์ฌ์ฉํ๋ฉฐ ์ผ๋ฐ ๊ฐ๋ฐ์๋ ์ฌ์ฉํ ์ผ์ด ๋๋ฌผ๋ค. |
SQL ๊ฒ์ ์ง์
- SQL์์ ํ๋์ ์ง์๋ 6๊ฐ์ ์ ๋ก ๊ตฌ์ฑ
- SQL SELECT ๋ฌธ์ ๊ธฐ๋ณธ ํ์์ ์ฌ์(mapping) ๋๋ SELECT-FROM-WHERE๋ธ๋ก์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ํ์์ ์ผ๋ก ์ง์์ ๋ํ๋ด์ผ ํ๋ ๋๊ฐ์ ์ ์ SELECT์ FROM ์ ์
-
SELECT ์ ์ ๊ฒฐ๊ณผ์ ํฌํจ๋ ์ ํธ๋ฆฌ๋ทฐํธ๋ค์ด๋ ํจ์๋ฅผ ๋์ดํจ
-
FROM ์ ์ ์ง์์์ ํ์ํ ๋ชจ๋ ๋ฆด๋ ์ด์ (๋ณ๋ช )๋ค์ ๋ช ์ํจ–์ค์ฒฉ ์ง์๋ค์ ์ฌ์ฉ๋๋ ๋ฆด๋ ์ด์ ๋ค์ ๋ช ์ํ์ง ์์
- WHERE ์ ์ ์กฐ์ธ์กฐ๊ฑด์ ํฌํจํ์ฌ FROM ์ ์ ๋ช ์๋ ๋ฆด๋ ์ด์ ๋ค๋ก๋ถํฐ ํํ๋ค์ ์ ํํ๊ธฐ ์ํ ์กฐ๊ฑด๋ค์
- GROUP BY์ ์ ๊ทธ๋ฃนํ ์ ํธ๋ฆฌ๋ทฐํธ๋ฅผ ๋ช ์
- HAVING ์ ์ ์ ํ๋ ํํ๋ค์ ๊ทธ๋ฃน๋ค์ ๋ํ ์กฐ๊ฑด์ ๋ช ์
- ORDER BY์ ์ ์ง์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ์์๋ฅผ ๋ช ์
- ์ง์๋ WHERE์ , GROUP BY์ ๊ณผ HAVING์ ์ ์์๋ก ์ ์ฉํจ์ผ๋ก์จ ํ๊ฐ๋จ
๊ฒ์ ์ง์ 1: < SELECT ... FROM >
SELECT ํ๋๋ชฉ๋ก FORM ํ
์ด๋ธ; ---- ๊ธฐ๋ณธ SELECT๋ฌธ
SELECT * FROM EMP; ---- ๋ณ์นจ
SELECT ์์ FORM dual; ---- ๊ฐ๋จํ ๊ณ์ฐ๊ธฐ
- ๋ณ์นจ( * )๊ธฐํธ๋ฅผ ์ฐ๋ฉด ํ ์ด๋ธ์ ๋ชจ๋ ํ๋๋ฅผ ์ถ๋ ฅํ๋ค. (ALL ๋๋ ๋ชฝ๋ ์ด๋ผ๊ณ ์ฝ๋๋ค.)
- SELECT ๋ช ๋ น์ด ์ถ๋ ฅํ๋ ๋ด์ฉ์ ๊ฒฐ๊ณผ์ (Result Set) or ๋ก์ฐ์ (Row Set)์ด๋ผ๊ณ ํ๋๋ฐ ํํ๊ฐ ํ ์ด๋ธ๊ณผ ๋๊ฐ๋ค.
- ๊ผญ ํ ์ด๋ธ์ ์๋ ํ๋๋ง ์ถ๋ ฅํ ์ ์๋ ๊ฒ๋ ์๋๋ค. ๋จ์ํ ๊ณ์ฐ์๋ ์ถ๋ ฅ์ด ๊ฐ๋ฅํ๋ค.
- FORM๋ฌธ์ ๋นผ๊ณ SELECT ๋ฌธ๋ง ์ ์ผ๋ฉด ํ์ ๊ตฌ๋ฌธ์ด ๋น ์ก๋ค๋ ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ์ถ๋ ฅํ๋ค. (But, SQL Server๋ FROM์ ์ ์๋ต์ ํ์ฉํ์ฌ ์์๋ง ์ ์ ์ ์๋ค.)
๊ฒ์ ์ง์ 2: < WHERE >
- WHERE ์ ์ด ์์ผ๋ฉด ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ๋ค ์กฐํํ๋ค.
- DELETE, UPDATE ๋ฑ์ ๋ช ๋ น๊ณผ ํจ๊ป ์ญ์ ๋ฐ ๋ณ๊ฒฝํ ๋ ์ฝ๋๋ฅผ ์ ํํ ๋๋ ์ฌ์ฉํ๋ค.
๊ฒ์์ง์ 3: < ORDER BY >
ORDER BY ํ๋ [ ASC : DESC ]
๋ฒ์ ๋ณ์ ์ ๋ ฌ ํค์๋(ascending, descending)
- ๋ฐ์ดํฐ์ ์ ๋ ฌ์ ์ํํ๋ฉฐ, ๊ธฐ๋ณธ ์ ๋ ฌ์ ์ค๋ฆ์ฐจ์ ์ ๋๋ค. orderby์ ์ ์คํํ์ง ์์ผ๋ฉด ์ ๋ ฌ ๋์ง ์๊ณ ์ถ๋ ฅ ๋ฉ๋๋ค.
- ๋๊ฐ์ ์ค๋ฆ์ฐจ์์์๋ ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ํ๋๊ณ , ๋ด๋ฆผ์ฐจ์์์๋ ๊ฐ์ฅ ์์ ๋ํ๋จ.
๊ฒ์์ง์ 4: < GROUP BY >
๊ทธ๋ฃนํ - GROUP BY ์ ํธ๋ฆฌ๋ทฐํธ(๊ทธ๋ฃนํ ์ ํธ๋ฆฌ๋ทฐํธ)์ ๋์ผํ ๊ฐ์ ๊ฐ๋ ํฌํ๋ค์ด ๊ฐ๊ฐ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์.
- ๊ฐ ๊ทธ๋ฃน์ ๋ํ์ฌ ๊ฒฐ๊ณผ ๋ฆด๋ ์ด์ ์ ํ๋์ ํฌํ์ด ์์ฑ๋จ
- SELECT์ ์๋ ๊ฐ ๊ทธ๋ฃน๋ง๋ค ํ๋์ ๊ฐ์ ๊ฐ๋ ์ ํธ๋ฆฌ๋ทฐํธ, ์ง๋จ ํจ์, ๊ทธ๋ฃนํ์ ์ฌ์ฉ๋ ์ ํธ๋ฆฌ๋ทฐํธ๋ค๋ง ๋ํ๋ ์ ์์
๊ฒ์์ง์ 5: < HAVING >
HAVING ์ด๋ค ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ทธ๋ฃน๋ค์ ๋ํด์๋ง ์ง๋จ ํจ์๋ฅผ ์ ์ฉํ ์ ์์.
- ๊ฐ ๊ทธ๋ฃน๋ง๋ค ํ๋์ ๊ฐ์ ๊ฐ๋ ์ ํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๊ทธ๋ฃน์ด ๋ง์กฑํด์ผ ํ๋ ์กฐ๊ฑด์ ๋ช ์ํจ
- HAVING์ ์ ๊ทธ๋ฃนํ ์ ํธ๋ฆฌ๋ทฐํธ์ ๊ฐ์ ๊ฐ์ ๊ฐ๋ ํฌํ๋ค์ ๊ทธ๋ฃน์ ๋ํ ์กฐ๊ฑด์ ๋ํ๋ด๊ณ , ์ด ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ทธ๋ฃน๋ค๋ง ์ง์ ๊ฒฐ๊ณผ์ ๋ํ๋จ
- HAVING์ ์ ๋ํ๋๋ ์ ํธ๋ฆฌ๋ทฐํธ๋ ๋ฐ๋์ GROUP BY์ ์ ๋ํ๋๊ฑฐ๋ ์ง๋จ ํจ์์ ํฌํจ๋์ด์ผ ํจ
# Q. ๋ชจ๋ ์ฌ์๋ค์ ๋ํด์ ์ฌ์๋ค์ด ์ํ ๋ถ์๋ฒํธ๋ณ๋ก ๊ทธ๋ฃนํํ๊ณ , ํ๊ท ๊ธ์ฌ๊ฐ 2500000์์ด์์ธ ๋ถ์์ ๋ํด์ ๋ถ์๋ฒํธ, ํ๊ท ๊ธ์ฌ, ์ต๋ ๊ธ์ฌ๋ฅผ ๊ฒ์ํด๋ผ.
SELECT DNO, AVG(SALARY), MAX(SALARY)
FROM EMPLOYEE
GROUP BY DNO
HAVING AVG(SALARY) <= 2500000;
ํ ์ด๋ธ ์์ฑ ๋ฐ ์ญ์ 1: CREATE TABLE ๋ฌธ
ํ ์ด๋ธ์ ์์ฑํ๋ ๋ช ๋ น์ด์ด๋ค.
CREATE TABLE ํ
์ด๋ธ์ด๋ฆ
(
ํ๋ ์ ๋ณด(ํ๋์ด๋ฆ ํ์
[์ ์ฝ]),
ํ๋ ์ ๋ณด(ํ๋์ด๋ฆ ํ์
[์ ์ฝ]),
....
);
ํ ์ด๋ธ ์์ฑ ๋ฐ ์ญ์ 2: DROP TABLE ๋ฌธ
DROP์ ํ ์ด๋ธ์ ์ญ์ ํ๋ ๋ช ๋ น์ด์ด๋ค. ์ ๋ง ์ญ์ ํ ๊ฒ์ธ์ง ํ์ธ๋ ํ์ง ์๊ณ ๊ตฐ๋ง์์ด ์ง์ฐ๊ธฐ ๋๋ฌธ์ ํ์ธ ํ ํ ์ด๋ธ์ ์ง์ฐ๋๋ก ํ์!
DROP TABLE ํ
์ด๋ธ ์ด๋ฆ;
๋ฐ์ดํฐ ์ ์ 1: INSERT๋ฌธ
- ๊ธฐ์กด์ ๋ฆด๋ ์ด์ ์ ํฌํ์ ์ฝ์
- ์ฐธ์กฐํ๋ ๋ฆด๋ ์ด์ ์ ํฌํ์ด ์ฝ์ ๋๋ ๊ฒฝ์ฐ์๋ ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด์ ์๋ฐฐํ ์ ์์
- ๋ฆด๋ ์ด์ ์ ํ ๋ฒ์ ํ ํฌํ์ฉ ์ฝ์ ํ๋ ๊ฒ๊ณผ ํ ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ํฌํ๋ค์ ์ฝ์ ํ ์ ์๋ ๊ฒ์ผ๋ก ๊ตฌ๋ถ
- ๋ฆด๋ ์ด์ ์ ํ ๋ฒ์ ํ ํฌํ์ฉ ์ฝ์ ํ๋ INSERT๋ฌธ
INSERT
INTO ๋ฆด๋ ์ด์
(์ ํธ๋ฆฌ๋ทฐํธ1, ..., ์ ํธ๋ฆฌ๋ทฐํธn)
VALUES (๊ฐ1, ..., ๊ฐn);
----------------------------------------------
INSERT
INTO ๋ฆด๋ ์ด์
(์ ํธ๋ฆฌ๋ทฐํธ1, ..., ์ ํธ๋ฆฌ๋ทฐํธn)
SELECT ... FROM ... WHERE ...;
๋ฐ์ดํฐ ์ ์ 2: DELETE๋ฌธ
- ์ญ์ ์ฐ์ฐ์ ํ ๋ฆด๋ ์ด์ ์ผ๋ก๋ถํฐ ํ ๊ฐ ์ด์์ ํฌํ๋ค์ ์ญ์ ํจ
- ์ฐธ์กฐ๋๋ ๋ฆด๋ ์ด์ ์ ์ญ์ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ก ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด์ด ์๋ฐฐ๋ ์ ์์
- DELETE๋ฌธ์ ๊ตฌ๋ฌธ
DELETE
FROM ๋ฆด๋ ์ด์
WHERE ์กฐ๊ฑด;
๋ฐ์ดํฐ ์ ์ 3: UPDATE๋ฌธ
- ํ ๋ฆด๋ ์ด์ ์ ๋ค์ด ์๋ ํฌํ๋ค์ ์ ํธ๋ฆฌ๋ทฐํธ ๊ฐ๋ค์ ์์
- ๊ธฐ๋ณธ ํค๋ ์ธ๋ ํค์ ์ํ๋ ์ ํธ๋ฆฌ๋ทฐํธ์ ๊ฐ์ด ์์ ๋๋ฉด ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด์ ์๋ฐฐํ ์ ์์
- UPDATE๋ฌธ์ ๊ตฌ๋ฌธ
UPDATE ๋ฆด๋ ์ด์
SET ์ ํธ๋ฆฌ๋ทฐํธ = ๊ฐ ๋๋ ์[, …]
WHERE ์กฐ๊ฑด;
SQL ๋ณ์นญ(alias) - AS
์๋ก ๋ค๋ฅธ ๋ฆด๋ ์ด์ ์ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง ์ ํธ๋ฆฌ๋ทฐํธ๊ฐ ์ํด ์์ ๋ ์ ํธ๋ฆฌ๋ทฐํธ์ ์ด๋ฆ์ ๊ตฌ๋ถํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ณ๋ช ์ ์ด๋๊น์ง๋ ๋ฌธ์์ด์ผ ๋ฟ์ด๋ฏ๋ก ๋ช ์นญ ๊ท์น์ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
๊ณ์ฐ ํ๋์ฒ๋ผ ํ ์ด๋ธ์ ์กด์ฌํ์ง ์๋ ๊ฐ์ ๊ฐ๊ณตํ์ฌ ์ถ๋ ฅํ ๋๋ ๋ณ๋ช ์ด ๊ผญ ํ์ํ๋ค.
- ์ค๋ผํด: ๋ณ๋ช ์ ํฐ ๋ฐ์ํ๋ง ์ธ ์ ์๋ค.
- SQL Server: ์์ ๋ฐ์ดํ, ํฐ ๋ฐ์ดํ, [ ] ๊ธฐํธ๋ก ๋ณ๋ช ์ ๊ฐ์ผ๋ค. ๋ณ๋ช = ํ๋ ํ์๋ ์ง์ํ๋ค.
- MariaDB: ์์ ๋ฐ์ดํ, ํฐ ๋ฐ์ดํ๋ก ๋ณ๋ช ์ ๊ฐ์ผ๋ค.
ํ๋๋ช
[AS] "๋ณ๋ช
"
๋ฒ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ - BETWEEN AND
# Q. ๊ตฝ์ฌ๊ฐ 300000์ ์ด์์ด๊ฑฐ, 4500000์ดํ์ธ ์ฌ์๋ค์ ์ด๋ฆ, ์ง๊ธ, ๊ธ์ฌ๋ฅผ ๊ฒ์ํ๋ผ.
SELECT EMPNAME, TITLE, SALARY
FROM EMPLOYEE
WHERE SALARY BETWEEN 300000 AND 4500000;
WHERE SALARY >= 300000 AND SALARY <= 4500000 ;
๋๊ฐ - NULL
- NULL์ ๊ฐ์ด ์๋๋ผ ์ํ์ด๋ค. ๋๋ฌธ์ = ์ฐ์ฐ์๋ก ๋น๊ตํ ์ ์๋ค.
- ๋๊ฐ์ ํฌํจํ ๋ค๋ฅธ ๊ฐ๊ณผ ๋๊ฐ์ +, - ๋ฑ์ ์ฌ์ฉํ์ฌ ์ฐ์ฐํ๋ฉด ๊ฒฐ๊ณผ๋ ๋์ด ๋จ
- COUNT(*)๋ฅผ ์ ์ธํ ์ง๋จ ํจ์๋ค์ ๋๊ฐ์ ๋ฌด์ํจ
- ์ด๋ค ์ ํธ๋ฆฌ๋ทฐํธ์ ์๋ ๊ฐ์ด ๋์ธ๊ฐ ๋น๊ตํ๊ธฐ ์ํด์ "EMP = NULL" ์ฒ๋ผ ๋ํ๋ด๋ฉด ์๋จ "EMP IS NULL"์ด ์ณ๋ฐ๋ฅธ ํํ์ด๋ค.
- ์ด๋ ํ ๋น๊ต ๊ฒฐ๊ณผ๋ ๋ชจ๋ ๊ฑฐ์ง์ด๋ค.
- ์ ์ธ๋ฌธ ๋ค์ NULL์ด ์์ผ๋ฉด ์ด ํ๋๋ ๊ฐ์ ์ ๋ ฅํ์ง ์์๋ ๋๋ค๋ ๋ป์ด๋ค. (NULL, NOT NULL)
LIKE
= ๋น๊ต ์ฐ์ฐ์๋ ์์ ํ ์ผ์นํ๋ ์กฐ๊ฑด์์ ํํํ๋๋ฐ ๋นํด LIKE ์ฐ์ฐ์๋ ํจํด์ผ๋ก ๋ถ๋ถ ๋ฌธ์์ด์ ๊ฒ์ํ๋ค.
๋ฐ๋ ์ฐ์ฐ์๋ NOT LIKE
IN
BETWEEN ์ฐ์ฐ์๋ ์ฐ์๋ ๋ฒ์๋ง ๊ฒ์ํ ์ ์์ผ๋ฉฐ ๋ถ์ฐ์์ ์ด๊ณ ์์์ ์ธ ๊ฐ ์ฌ๋ฌ ๊ฐ๋ฅผ ์กฐ์ฌํ๊ธฐ๋ ์ด๋ ต๋ค. ๊ทธ๋์ ์ฃผ๋ก ์์น๊ฐ ๊ฒ์์ ์ฌ์ฉํ๋ค. ์ด์ ๋นํด IN์ฐ์ฐ์๋ ๋ถ์ฐ์์ ์ธ ๊ฐ ์ฌ๋ฌ ๊ฐ์ ๋ชฉ๋ก์ ์ ๊ณตํ์ฌ ์ด ๋ชฉ๋ก๊ณผ ์ผ์นํ๋ ๋ ์ฝ๋๋ฅผ ๊ฒ์ํ๋ค.
IN์ฐ์ฐ์ ๋ค์ ๊ดํธ ์์ ์ฝค๋ง๋ก ๊ตฌ๋ถ๋ ๊ฐ ๋ชฉ๋ก์ ๋์ดํ์ฌ ์ด ์ค ํ๋์ ํด๋นํ๋์ง ์ ๊ฒํ๋ค. ๊ฐ ๊ฐ์์๋ ์ ํ์ด ์์ด ์ผ๋ง๋ ์ง ๋ง์ ๊ฐ์ ๋ฃ์ ์ ์๋ค.
DISTINCT
์ค๋ณต๋ ๊ฐ์ ์ ๊ฑฐํ ๋์ ํค์๋์ด๋ค. DISTINCT ํค์๋๊ฐ ์๋ ํ๋๋ ์ค๋ณต๊ฐ์ ํฉ์ณ ํ ๋ฒ๋ง ์ถ๋ ฅํ๋ค.
SQL ์ฃผ์
- ํ ์ค ์ฃผ์: --
- ๋ธ๋ก ์ฃผ์: /* */
Reference.
๋์ 1. ๊น์ํ์ SQL ์ ๋ณต: ์๋ฌธ๋ ๋ช ๊ฐ์ (๋ฌด๋ฃํน๋ณํ) | ํ๋น๋ฏธ๋์ด
๋์ 2. ๋ฉด์ ์ ์ํ CS ์ ๊ณต์ง์ ๋ ธํธ | ๊ธธ๋ฒ
์ ํ๋ ๊ฒ ๋ณด๋ค ๋ซ๊ฒ ์ง
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!