SQLD
[SQLD] 2-1. SQL ๊ธฐ๋ณธ
์ด์์ง
2023. 6. 7. 16:34
๐SQL ๋ฌธ์ฅ ์ข ๋ฅ
DML | SELECT, INSERT, UPDATE, DELETE | ๋ฐ์ดํฐ ์กฐํ, ๊ฒ์์ ํ๊ธฐ ์ํ ๋ช
๋ น์ด ๋ฐ์ดํฐ์ ๋ณํ์ ๊ฐํ๋ ๋ช ๋ น์ด aka ๋ฐ์ดํฐ ๋ถ์์ด(Data Sub Language), ๋น์ ์ฐจ์ ๋ฐ์ดํฐ ์กฐ์์ด |
DDL | CREATE, ALTER, DROP, RENAME | ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ ์, ๊ตฌ์กฐ ์์ฑ, ๋ณ๊ฒฝ, ์ญ์ ๋ฑ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ด๋ จ๋ ๋ช ๋ น์ด |
DCL | GRANT, REVOKE | DB์ ์ ๊ทผํ๊ณ ๊ฐ์ฒด๋ค์ ์ฌ์ฉํ๋๋ก ๊ถํ์ ์ฃผ๊ณ ํ์ํ๋ ๋ช ๋ น์ด |
TCL | COMMIT, ROLLBACK | DML์ ์ํด ์กฐ์๋ ๊ฒฐ๊ณผ๋ฅผ ํธ๋์ญ์ ๋ณ๋ก ์ ์ดํ๋ ๋ช ๋ น์ด |
๐๋น์ ์ฐจ์ ๋ฐ์ดํฐ ์กฐ์์ด vs ์ ์ฐจ์ ๋ฐ์ดํฐ ์กฐ์์ด
- ๋น์ ์ฐจ์ : ์ฌ์ฉ์๊ฐ ๋ฌด์จ ๋ฐ์ดํฐ๋ฅผ ์ํ๋์ง
- ์ ์ฐจ์ : ์ฌ์ฉ์๊ฐ ๋ฌด์จ ๋ฐ์ดํฐ๋ฅผ ์ํ๋์ง, ์ด๋ป๊ฒ ์ ๊ทผํด์ผ ๋๋์ง ๋ช ์ธ(PL/SQL, T-SQL)
๐PK ์ง์ ๋ฐฉ๋ฒ
<!-- ์ ์ธ๋ฌธ ๋ด๋ถ -->
CREATE TABLE A
( AA VARCHAR2(10) NOT NULL, ...
, CONSTRAINT A_PK PRIMARY KEY (AA) );
<!-- ์ ์ธ๋ฌธ ์ธ๋ถ -->
ALTER TABLE A ADD CONSTRAINT A_PK PRIMARY KEY(AA);
โ๏ธ์ปฌ๋ผ์ ๋ํ ์ ์ ๋ณ๊ฒฝ
<!-- ORACLE -->
ALTER TABLE A MODIFY (AA VARCHAR2(30) NOT NULL);
<!-- SQL SERVER -->
ALTER TABLE A ALTER COLUMN AA VARCHAR(30) NOT NULL;
๐์ ์ฝ์กฐ๊ฑด(Constraints) ์ข ๋ฅ
- PRIMARY KEY = UNIQUE + NOT NULL
- UNIQUE KEY : ํ ์ด๋ธ ๋ด ์ค๋ณต๋๋ ๊ฐ์ด ์์, NULL ๊ฐ๋ฅ
- NOT NULL
- CHECK
- FOREIGN KEY
- ์ด๊ธฐ ์ ์ธ์ PRIMARY KEY๋ผ๊ณ ์ ์ธํ๋ฉด NOT NULL ์๊ฑธ์ด๋ ๋จ
- ์ด๋ฏธ PK ์ง์ ํ์ผ๋ฉด ALTER TABLE์์ PK ์ฌ์ง์ X
โ๏ธSQL๊ตฌ๋ถ
<!-- ANSI ํ
์ด๋ธ ๋ช
์์ -->
RENAME A TO AA;
<!-- ํ
์ด๋ธ์ ๋ถํ์ ์ปฌ๋ผ ์ญ์ -->
ALTER TABLE A DROP COLUMN AA;
๐์ฐธ์กฐ ๋์
- DELETE(/MODIFY)
- CASCADE : MASTER ์ญ์ ์ CHILD ๊ฐ์ด ์ญ์
- SET NULL : MASTER ์ญ์ ์ CHILD ํด๋น ํ๋ NULL
- SET DEFAULT : MASTER ์ญ์ ์ CHILD ํด๋น ํ๋ DEFAULT ๊ฐ์ผ๋ก ์ค์
- RESTRICT : CHILD ํ ์ด๋ธ์ PK ๊ฐ์ด ์๋ ๊ฒฝ์ฐ๋ง MASTER ์ญ์ ํ์ฉ
- NO ACTION : ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ์๋ฐํ๋ ์ญ์ /์์ ์ก์ ์ ์ทจํ์ง ์์
- INSERT ACTION
- AUTOMATIC : MASTER ํ ์ด๋ธ์ PK๊ฐ ์๋ ๊ฒฝ์ฐ MASTER PK๋ฅผ ์์ฑ ํ CHILD ์ ๋ ฅ
- SET NULL : MASTER ํ ์ด๋ธ์ PK๊ฐ ์๋ ๊ฒฝ์ฐ CHILD ์ธ๋ถํค๋ฅผ NULL ๊ฐ์ผ๋ก ์ฒ๋ฆฌ
- SET DEFAULT : MASTER ํ ์ด๋ธ์ PK๊ฐ ์๋ ๊ฒฝ์ฐ CHILD ์ธ๋ถํค๋ฅผ ์ง์ ๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ ๋ ฅ
- DEPENDENT : MASTER ํ ์ด๋ธ์ PK๊ฐ ์กด์ฌํ ๋๋ง CHILD ์ ๋ ฅ ํ์ฉ
- NO ACTION : ์ฐธ์กฐ๋ฌด๊ฒฐ์ฑ์ ์๋ฐํ๋ ์ ๋ ฅ ์ก์ ์ ์ทจํ์ง ์์
๐DROP / TRUNCATE / DELETE ์ฐจ์ด ์ ๋ฆฌ
DROP | TRUNCATE | DELETE |
DDL | DDL (์ผ๋ถ DML) | DML |
ROLLBACK ๋ถ๊ฐ๋ฅ | ROLLBACK ๋ถ๊ฐ๋ฅ | COMMIT ์ด์ ROLLBACK |
AUTO COMMIT | AUTO COMMIT | ์ฌ์ฉ์ COMMIT |
STORAGE ์ ๋ถ RELEASE | ํ์ด STORAGE๋ง ๋จ๊น | ๋ฐ์ดํฐ๋ง DELETE, STORAGE ์จ์ |
ํ ์ด๋ธ ์ ์ ์์ฒด ์ญ์ | ํ ์ด๋ธ์ ํ์ด ํํ๋ก ๋ง๋ฌ | ๋ฐ์ดํฐ๋ง ์ญ์ |
๐ํธ๋์ญ์ (DB ๋ ผ๋ฆฌ์ ์ฐ์ฐ๋จ์) ํน์ฑ
- ์์์ฑ : ํธ๋์ญ์ ์์ ์ ์๋ ์ฐ์ฐ๋ค์ ๋ชจ๋ ์ฑ๊ณต์ด๋์ง ์ ํ ์คํ ์๋ ์ํ๋์ง
- ์ผ๊ด์ฑ : ํธ๋์ญ์ ์คํ ์ DB ๋ด์ฉ์ ์๋ชป์ด ์๋ค๋ฉด ์คํ ํ์๋ ์์ด์ผํจ
- ๊ณ ๋ฆฝ์ฑ(๊ฒฉ๋ฆฌ์ฑ) : ํธ๋์ญ์ ์ด ์คํ๋๋ ์ค ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ํฅ์ ๋ฐ์ผ๋ฉด ์๋จ
- ์ง์์ฑ : ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ๋๋ฉด ๊ทธ ํธ๋์ญ์ ์ด ๊ฐฑ์ ํ DB์ ๋ด์ฉ์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ
- ๊ฒฉ๋ฆฌ์ฑ์ด ๋ฎ์ ๊ฒฝ์ฐ
- DIRTY READ : ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ํด ์์ ๋์์ง๋ง ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ
- NON-REPEATABLE READ : ํ ํธ๋์ญ์ ์ด ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฒ ์ํํ๋๋ฐ, ๊ทธ ์ฌ์ด ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์์ ์ด๋ ์ญ์
- PHANTOM-READ : ๋๋ฒ ์คํํ๋๋ฐ ์ฒซ๋ฒ์งธ์์ ์๋ ์ ๋ น ๋ ์ฝ๋๊ฐ ๋ํ๋จ
ORACLE = ์๋ COMMIT
SQL SERVER = ์๋ COMMIT
โ๏ธํธ๋์ญ์ ์ฉ์ด ์ ๋ฆฌ
- BEGIN TRANSACTION : ํธ๋์ญ์ ์์
- COMMIT / ROLLBACK์ผ๋ก ์ข ๋ฃ
- ROLLBACK : ์ต์กฐ์ BEGIN TRANSACTION ๊น์ง ROLLBACK ์ํ
- SAVEPOINT ์ ์ํ๋ฉด ROLLBACK์ ์ผ๋ถ๋ง ๊ฐ๋ฅ
โ๏ธ์ฐ์ฐ ์ฉ์ด ์ ๋ฆฌ
- WHERE์ ์ FROM์ ๋ค์
- NULL๊ณผ์ ์ฐ์ฐ์ NULL
- NULL ๋น๊ต์ฐ์ฐ ๋ถ๊ฐ
- !=, ^=, <> ๋ชจ๋ ๊ฐ์ง ์๋ค
- IN : ๋ฆฌ์คํธ ์๋ ๊ฐ ์ค ์ด๋ ํ๋๋ผ๋ ์ผ์นํ๋ฉด ๋๋ค.
- BETWEEN : ์ฌ์ด๊ฐ์ด ํฌํจ๋จ, ์ง์ ํ ์ซ์๊น์ง ํฌํจ
๐๋ด์ฅํจ์
- ํจ์์ ์ ๋ ฅ ํ์์ ๋ฐ๋ผ ๋จ์ผํ/๋ค์คํ
- ๋จ์ผํ : SELECT, WHERE, ORDER BY, UPDATE์ SET์ ์ ์ฌ์ฉ
- 1:M ๊ด๊ณ์์ ๋ ํ ์ด๋ธ ์กฐ์ธ = M์ชฝ์ ์ถ๋ ฅ ๋จ์ผํ = ๋จ์ผํ ํจ์ ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ค์คํ ํจ์๋ ๋จ์ผํ ํจ์์ ๋์ผํ๊ฒ ๋จ์ผ ๊ฐ ๋ฐํ
- ๋ค์คํ ํจ์ : ์ง๊ณ ํจ์, ๊ทธ๋ฃน ํจ์, ์๋์ฐ ํจ์
โ๏ธ๋จ์ผํ ํจ์ ์ข ๋ฅ ๋จ์ผํ
์ข ๋ฅ | ํจ์ |
๋ฌธ์ํ | LOWER, UPPER, SUBSTR/SUBSTRING, LENTH/LEN, LTRIM, RTRIM, TRIM, ASCII |
์ซ์ํ | ABS, MOD, ROUND, TRUNC, SIGN, CHR/CHAR, CEIL/CEILING, FLOOR, EXP, LOG, LN, POWER, SIN, COS, TAN |
๋ ์งํ | SYSDATE/GETDATE, EXTRACT/DATEPART, TO_NUMBER~ |
๋ณํํ | TO_NUMBER, TO_CHAR, TO_DATE/CAST, CONVERT |
NULL | NVL/ISNULL, NULLIF, COALSCE |
โ๏ธ๋ฌธ์ํ ํจ์ ์ข ๋ฅ
๋ฌธ์ํ ํจ์ | ํจ์ ์ค๋ช |
LOWER | ๋ฌธ์์ด์ ์ํ๋ฒณ ๋ฌธ์๋ฅผ ์๋ฌธ์๋ก ๋ฐ๊พธ์ด ์ค๋ค |
UPPER | ๋ฌธ์์ด์ ์ํ๋ฒณ ๋ฌธ์๋ฅผ ๋๋ฌธ์๋ก ๋ฐ๊พธ์ด ์ค๋ค |
ASCII | ๋ฌธ์๋ ์ซ์๋ฅผ ์์คํค ์ฝ๋ ๋ฒํธ๋ก ๋ฐ๊พธ์ด ์ค๋ค |
CHR/CHAR | ์์คํค ์ฝ๋ ๋ฒํธ๋ฅผ ๋ฌธ์๋ ์ซ์๋ก ๋ฐ๊พธ์ด ์ค๋ค |
CONCAT | ORACLE, MY SQL๋ง ๊ฐ๋ฅ ๋ฌธ์์ด ์ฐ๊ฒฐ, ํฉ์ฑ ์ฐ์ฐ์ ORACLE'||' / MYSQL '+'๋ฅผ ์ฌ์ฉ |
SUBSTR/SUBSTRING | ๋ฌธ์์ด ์ค M์ ์์น์์ N๊ฐ์ ๋ฌธ์ ๊ธธ์ด์ ํด๋นํ๋ ๋ฌธ์๋ฅผ ๋๋ ค์ค๋ค. N์ด ์์ ์ ๋ง์ง๋ง ๋ฌธ์๊น์ง |
LENGTH/LEN | ๋ฌธ์์ด์ ๊ฐ์๋ฅผ ์ซ์๊ฐ์ผ๋ก ๋๋ ค์ค๋ค |
LTRIM | ๋ฌธ์์ด ์ฒซ ๋ฌธ์๋ถํฐ ์ง์ ๋ฌธ์๊ฐ ๋ํ๋๋ฉด ํด๋น ๋ฌธ์ ์ ๊ฑฐ *SQL SERVER์ LTRIM ์ง์ ๋ฌธ์ ์ฌ์ฉ ๋ชปํจ = ๊ณต๋ฐฑ๋ง ์ ๊ฑฐ ๊ฐ๋ฅ |
RTRIM | ๋ฌธ์์ด ๋ง์ง๋ง ๋ฌธ์๋ถํฐ ์ง์ ๋ฌธ์๊ฐ ๋ํ๋๋ฉด ํด๋น ๋ฌธ์ ์ ๊ฑฐ *SQL SERVER์ RTRIM ์ง์ ๋ฌธ์ ์ฌ์ฉ ๋ชปํจ = ๊ณต๋ฐฑ๋ง ์ ๊ฑฐ ๊ฐ๋ฅ |
TRIM | ๋ฌธ์์ด์์ ์์ชฝ์ ์๋ ์ง์ ๋ฌธ์ ์ ๊ฑฐ *SQL SERVER์ TRIM ์ง์ ๋ฌธ์ ์ฌ์ฉ ๋ชปํจ = ๊ณต๋ฐฑ๋ง ์ ๊ฑฐ ๊ฐ๋ฅ |
REPLACE | ๋ฌธ์์ด์ ์นํํ๋ ํจ์, CHR(10)์ผ๋ก ๋ฐ๊พธ๋ฉด ์ค๋ฐ๊ฟ ์ ๊ฑฐ |
โ๏ธNULL ํจ์ ์ข ๋ฅ
ํจ์ | ์ค๋ช |
NVL(1,2)/ISNULL(1,2) | 1์ ๊ฐ์ด NULL์ด๋ฉด 2์ ๊ฐ ์ถ๋ ฅ |
NULLIF(1,2) | 1๊ณผ 2๊ฐ ๊ฐ์ผ๋ฉด NULL, ๊ฐ์ง ์์ผ๋ฉด 1 ๋ฆฌํด |
COALSCE(1,2) | NULL์ด ์๋ ์ต์ด์ ํํ์ ๋ฆฌํด |
โ๏ธNOTE
- CASE WHEN A ='AA' THEN 'B' == CASE A WHEN 'AA' THEN 'B'
- ORACLE์์ NULL์ ๊ฐ์ฅ ํฐ ๊ฐ
- SQL SERVER์์ NULL์ ๊ฐ์ฅ ์์ ๊ฐ
- EQUI JOIN = FROM์ ์ , ๋ก ํ ์ด๋ธ ๊ฐ์ ธ์ค๊ณ WHERE์์ = ๋ฃ์ด์ฃผ๊ธฐ / FROM์์ JOIN ๊ฑธ๊ณ ON ์ฐ๊ธฐ
๐GROUP BY์ HAVING ํน์ฑ
- GROUP BY์ ์ ํตํด ์๊ทธ๋ฃน๋ณ ๊ธฐ์ค์ ์ ํ ํ, SELECT ์ ์ ์ง๊ณ ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
- ์ง๊ณ ํจ์์ ํต๊ณ ์ ๋ณด๋ NULL ๊ฐ์ ์ ์ธํ๊ณ ์ํํ๋ค.
- GROUP BY ์ ์์ SELECT ์ ๊ณผ๋ ๋ฌ๋ฆฌ ALIAS ๋ช ์ ์ฌ์ฉํ ์ ์๋ค.
- ์ง๊ณ ํจ์๋ WHERE์ ์ ์ฌ ์ ์๋ค
- WHERE ์ ์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ GROUP์ผ๋ก ๋๋๊ธฐ ์ ์ ํ์ ๋ฏธ๋ฆฌ ์ ๊ฑฐํ๋ค.
- HAVING ์ ์ GROUP BY ์ ์ ๊ธฐ์ค ํญ๋ชฉ์ด๋ ์๊ทธ๋ฃน์ ์ง๊ณ ํจ์๋ฅผ ์ด์ฉํ ์กฐ๊ฑด์ ํ์ํ ์ ์๋ค.
- GROUP BY ์ ์ ์ํ ์๊ทธ๋ฃน๋ณ๋ก ๋ง๋ค์ด์ง ์ง๊ณ ๋ฐ์ดํฐ ์ค, HAVING ์ ์์ ์ ํ ์กฐ๊ฑด์ ๋์ด ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ด์ฉ๋ง ์ถ๋ ฅํ๋ค.
- HAVING ์ ์ ์ผ๋ฐ์ ์ผ๋ก GROUP BY ์ ๋ค์ ์์นํ๋ค.
- GROUP BY๋ฅผ ์ฌ์ฉํ๋ฉด GROUP BY ํํ์์ด ์๋ ๊ฐ์ ๊ธฐ์ ๋ ์ ์๋ค.
๐SELECT ์คํ ์์
FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY
โ๏ธJOIN ์ค๋ช
- ์ผ๋ฐ์ ์ผ๋ก JOIN์ PK์ FK์ ๊ฐ ์ฐ๊ด์ฑ์ ์ํด ์ฑ๋ฆฝ๋๋ค.
- DBMS ์ตํฐ๋ง์ด์ ๋ FROM์ ์ ๋์ด๋ ํ ์ด๋ธ๋ค์ ์์๋ก 2๊ฐ์ฉ ๋ฌถ์ด์ JOIN ์ฒ๋ฆฌ
- EQUI JOIN์ JOIN์ ๊ด์ฌํ๋ ํ ์ด๋ธ ๊ฐ์ ์ปฌ๋ผ ๊ฐ๋ค์ด ์ ํํ๊ฒ ์ผ์นํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์ด๋ค.
- EQUI JOIN์ =์ ์ํด์๋ง ์ํ๋๋ฉฐ, ๊ทธ ์ธ๋ ๋ชจ๋ NON EQUI JOIN์ด๋ค
- ๋๋ถ๋ถ NON EQUI JOIN์ ์ํํ ์ ์์ง๋ง, ๋๋ก๋ ์ค๊ณ์์ ์ด์ ๋ก ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ ์๋ค.