ํธ๋์ญ์
์์์ฑ(atomicity) : ํธ๋์ญ์
์์ ์ ์๋ ์ฐ์ฐ๋ค์ ๋ชจ๋ ์ฑ๊ณต์ ์ผ๋ก ์คํ๋๋์ง
์๋๋ฉด ์ ํ ์คํ๋์ง ์์ ์ํ๋ก ๋จ์ ์์ด์ผ ํ๋ค. (All or Nothing)
์ผ๊ด์ฑ(consistency) : ํธ๋์ญ์
์ด ์คํ ๋๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ฉ์ด ์๋ชป ๋์ด ์์ง ์๋ค๋ฉด
ํธ๋์ญ์
์ด ์คํ๋ ์ดํ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ด์ฉ์ ์๋ชป์ด ์์ผ๋ฉด ์๋๋ค.
๊ณ ๋ฆฝ์ฑ(isolation) : ํธ๋์ญ์
์ด ์คํ๋๋ ๋์ค์ ๋ค๋ฅธ ํธ๋์ญ์
์ ์ํฅ์ ๋ฐ์ ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด์๋ ์๋๋ค.
์ง์์ฑ(durability) : ํธ๋์ญ์
์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ๋๋ฉด ๊ทธ ํธ๋์ญ์
์ด ๊ฐฑ์ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ด์ฉ์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋๋ค.
๊ฒฉ๋ฆฌ์ฑ(isolation)์ผ๋ก ์ธํด ๋ํ๋ ์ ์๋ ๋ฌธ์ ์
Dirty Read
๋ค๋ฅธ ํธ๋์ญ์
์ ์ํด ์์ ๋์ง๋ง ์์ง ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ฒ์ ๋งํฉ๋๋ค.
Non-Repeatable Read
ํ ํธ๋์ญ์
๋ด์์ ๊ฐ์ Key๋ฅผ ๊ฐ์ง Row๋ฅผ ๋ ๋ฒ ์ฝ์๋๋ฐ ๊ทธ ์ฌ์ด์ ๊ฐ์ด ๋ณ๊ฒฝ๋๊ฑฐ๋ ์ญ์ ๋์ด ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅด๊ฒ ๋ํ๋๋ ํ์์ ๋งํฉ๋๋ค.
Phantom Read
ํ ํธ๋์ญ์
๋ด์์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฒ ์ํํ๋๋ฐ, ์ฒซ ๋ฒ์งธ ์ฟผ๋ฆฌ์์ ์๋ ์ ๋ น(Phantom) ๋ ์ฝ๋๊ฐ ๋ ๋ฒ์งธ ์ฟผ๋ฆฌ์์ ๋ํ๋๋ ํ์์ ๋งํฉ๋๋ค.
ํธ๋์ญ์ ์ ์ด ๋ช ๋ น์ด(COMMIT , ROLLBACK )
ํธ๋์ญ์
์ ์ด ๋ช
๋ น์ด
|
๊ธฐ๋ฅ
|
COMMIT
|
๋ณด๋ฅ์ค์ธ ๋ชจ๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ฌํญ์ ์๊ตฌ์ ์ผ๋ก ์ ์ฉ. ํ์ฌ ํธ๋์ญ์
์ข
๋ฃ
|
ROLLBACK
|
๋ณด๋ฅ์ค์ธ ๋ชจ๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ฌํญ์ ํ๊ธฐ. ํ์ฌ ํธ๋์ญ์
์ข
๋ฃ, ์ง์ ์ปค๋ฐ ์งํ์ ๋จ๊ณ๋ก ํ๊ท(๋๋์๊ฐ๊ธฐ)
์ ์ฒด ํธ๋์ญ์
์ ๋กค๋ฐฑํจ
|
[ORACLE]
DDL ๋ฌธ์ฅ ์ํ ํ ์๋์ผ๋ก COMMIT ์ ์ํํ๋ค.
ex) ORACLE ์์๋ CREATE TABLE ๋ฌธ์ฅ์ ์ํํ ํ , ๋ฌต์์ ์ผ๋ก COMMIT ์ด ์ํ
[SQL Server]
DDL ๋ฌธ์ฅ ์ํ ํ ์๋์ผ๋ก COMMIT ์ ์ํํ์ง ์๋๋ค
ex) SQL Server ์์๋ ROLLBACK ๋ฌธ์ฅ์ ์ํด UPDATE๊ฐ ์ทจ์๋๋ค.
BEGIN TRANSACTION (ํธ๋์ญ์ ์์)
ROLLBACK ๋ช
๋ น์ด๋ฅผ ๋ง๋๋ฉด ์ต์ด์ ์์ ๊น์ง ๋ชจ๋ ๋กค๋ฐฑ๋๋ค.
ROLLBACK ๊ตฌ๋ฌธ์ COMMIT ๋์ง ์์ ์์์ ๋ชจ๋ ํธ๋์ญ์
์ ๋ชจ๋ ๋กค๋ฐฑํ๋ค.
SAVE TRANSACTION ( ํธ๋์ญ์ ์ ์ฅ์ )
SAVE TRANSACTION SP1;
...
ROLLBACK TRANSACTION SP1;
๋กค๋ฐฑํ ๋ ํธ๋์ญ์
์ ํฌํจ๋ ์ ์ฒด ์์
์ ๋กค๋ฐฑํ๋ ๊ฒ์ด ์๋๋ผ
ํ ์์ ์์ ์ ์ฅ์ ๊น์ง ํธ๋์ญ์
์ ์ผ๋ถ๋ง ๋กค๋ฐฑํ ์ ์๋ค.
์กฐ๊ฑด์(WHERE ์ )
์ํ๋ ๋ฐ์ดํฐ๋ง์ ๊ฒ์ํ๊ธฐ ์ํด ์ ํํ๋ ๊ฒ
๋ฐ์ดํฐ์ ์กฐ๊ฑด์ ์ค์ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ํ
FROM ๋ค์์ ์์น
SELECT ์ปฌ๋ผ๋ช
FROM ํ
์ด๋ธ๋ช
WHERE ์กฐ๊ฑด์
์ฐ์ฐ์์ ์ฐ์ ์์
NULL์ ์ฐ์ฐ
NULL ์ 0 ๊ณผ ๊ณต๋ฐฑ์ด๋์ ๋ค๋ฅด๋ค.
NULL์ ํน์ ๊ฐ๋ณด๋ค ํฌ๋ค,์ ๋ค๋ผ๊ณ ํํํ ์ ์๋ค.
NULL๊ฐ ๊ณผ์ ์ฐ์ฐ์ NULL๊ฐ์ ๋ฆฌํดํ๋ค. ( ๋น๊ต์ฐ์ฐ์ FALSE ๋ฆฌํด )
NULL + 40 = NULL
NULL ๊ฐ์ ์กฐ๊ฑด์ ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ IS NULL , IS NOT NULL ์ด๋ ํค์๋ ์ฌ์ฉ
ISNULL/NVL ํจ์
ํํ์1์ ๊ฒฐ๊ณผ๊ฐ์ด NULL์ด๋ฉด ํํ์2์ ๊ฐ์ ์ถ๋ ฅํ๋ค.
NVL(ํํ์1, ํํ์2)
ISNULL(ํํ์1, ํํ์2)
--์์--
ISNULL(Colum,0)
NULLIF ํจ์
ํํ์1์ด ํํ์2์ ๊ฐ์ผ๋ฉด NULL์ , ๊ฐ์ง ์์ผ๋ฉด ํํ์1์ ๋ฆฌํดํ๋ค.
NULLIF(ํํ์1, ํํ์2)
COALESCE ํจ์
์์์ ๊ฐ์ ํํ์์์ NULL ์ด ์๋ ์ต์ด์ ํํ์์ ๋ํ๋ธ๋ค.
๋ชจ๋ ํํ์์ด NULL์ด๋ผ๋ฉด NULL ์ ๋ฆฌํดํ๋ค.
COALESCE(ํํ์1, ํํ์2, … )
COUNT ํจ์
COUNT(*) : NULL ๊ฐ์ ํฌํจํ ํ์ ์ ์ถ๋ ฅ
COUNT(ํํ์) : ํํ์์ ๊ฐ์ด NULL ๊ฐ์ธ ๊ฒ์ ์ ์ธํ ํ์ ์ ์ถ๋ ฅ
NULL๊ฐ๊ณผ ๊ณต๋ฐฑ ๋น๊ต
Oracle์์๋ Empty string('')์ Null๋ก ์ฒ๋ฆฌ ํ๋ค.
์ค๋ผํด์ NULL๊ฐ๊ณผ ๊ณต๋ฐฑ('')๊ฐ์ ๋๊ฐ์ด NULL๋ก ์ฒ๋ฆฌํ๋ค
์๋น์ค๋ช
values('')
SELECT * FROM ์๋น์ค WHERE ์๋น์ค๋ช
IS NULL;
BETWEEN a AND b
a ์ b ์ ๊ฐ ์ฌ์ด ( a์b ๊ฐ์ด ํฌํจ )
๋ด์ฅํจ์(Built-in Function)
ํจ์์ ์
๋ ฅ ํ์์ ๋ฐ๋ผ ๋จ์ผํ,๋ค์คํ์ผ๋ก ๊ตฌ๋ถ
๋จ์ผํ ํจ์ : ๋จ์ผํ ๊ฐ์ด ์
๋ ฅ๋๋ ํจ์[๋ฌธ์ํ, ์ซ์ํ, ๋ ์งํ, ๋ณํํ, NULL๊ด๋ จ ํจ์ ๋ฑ]
๋ค์คํ ํจ์ : ๋ค์คํ ๊ฐ์ด ์
๋ ฅ๋๋ ํจ์[์ง๊ณ ํจ์, ๊ทธ๋ฃนํจ์, ์๋์ฐ ํจ์ ๋ฑ]
๋ค์คํ ํจ์๋ ๋จ์ผํ ํจ์์ ๋์ผํ๊ฒ ๋จ์ผ ๊ฐ๋ง์ ๋ฐํํ๋ค.
๋ฌธ์์ด ํจ์
CONCAT(๋ฌธ์์ด1, ๋ฌธ์์ด2) | ๋ฌธ์์ด1๊ณผ ๋ฌธ์์ด2๋ฅผ ๊ฒฐํฉ → Oracle, My SQL์์ ์ ํจํ ํจ์ → "| |"(Oracle)๋ "+"(SQL Server)๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ํจ |
LENGTH/LEN(๋ฌธ์์ด) | ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์ซ์๊ฐ์ผ๋ก ๋ณํ → ๊ณต๋ฐฑ์ด๋ ์ค๋ฐ๊ฟ๋ count!!! → REPLACE(์นผ๋ผ๋ช , CHR(๊ธธ์ด))๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋ฐ๊ฟ์ด ์ ๊ฑฐ๋จ |
EXTRACT('YEAR' | 'MONTH' | 'DAY' from d)/ DATEPART('YEAR' | 'MONTH' | 'DAY' ,d) |
๋ ์ง ๋ฐ์ดํฐ์์ ๋
/์/์ผ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ (์๊ฐ/๋ถ/์ด๋ ๊ฐ๋ฅ) ex1> EXTRACT(MONTH FROM DATE '2020-12-20') → 12์ด ์ถ๋ ฅ ex2> EXTRACT(MONTH FROM DATE '2020-01-01') → 01์ด ์๋ 1์ด ์ถ๋ ฅ |
๋ ์งํ ํจ์
EXTRACT('YEAR' | 'MONTH' | 'DAY' from d)/ DATEPART('YEAR' | 'MONTH' | 'DAY' ,d) |
๋ ์ง ๋ฐ์ดํฐ์์ ๋
/์/์ผ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ (์๊ฐ/๋ถ/์ด๋ ๊ฐ๋ฅ) ex1> EXTRACT(MONTH FROM DATE '2020-12-20') → 12์ด ์ถ๋ ฅ ex2> EXTRACT(MONTH FROM DATE '2020-01-01') → 01์ด ์๋ 1์ด ์ถ๋ ฅ |
1/24/60์ 24์๊ฐ์ผ๋ก ๋๋๊ณ 60๋ถ์ผ๋ก ๋๋ด์ผ๋ฏ๋ก 1๋ถ์ ์๋ฏธ
1/24/(60/10)์ ๊ดํธ์ฐ์ฐ๋ถํฐ ๋จผ์ ํ๋ฉด 1/24/6๊ณผ ๋์ผํ๋ฏ๋ก 10๋ถ์ ์๋ฏธ
์กฐ๊ฑด์ ๋ฐ๋ผ์ ๊ฐ์ ์ง์ (CASE)
[SEARCHED_CASE]
SELECT LOC, CASE WHEN LOC = 'NEW YORK' THEN 'EAST' ELSE 'ETC' END as AREA
[SIMPLE_CASE]
SELECT LOC, CASE LOC WHEN 'NEW YORK' THEN 'EAST'
CASE ๋ฌธ์ ํ์์
CASE ์ปฌ๋ผ
WHEN ์กฐ๊ฑด1 THEN ๊ฐ1
WHEN ์กฐ๊ฑด2 THEN ๊ฐ2
ELSE ๊ฐ3
END
์ปฌ๋ผ์ด ์กฐ๊ฑด1 ์ผ๋๋ ๊ฐ1 , ์กฐ๊ฑด2 ์ผ๋๋ ๊ฐ2 ๋ฐํ
์กฐ๊ฑด์ ๋ง์ง ์๋ ๊ฒฝ์ฐ ๊ฐ3 ๋ฐํ
๋ฐ์ดํฐ ๊ทธ๋ฃนํ/์ง๊ณ (GROUP BY)
๊ฐ์ ๊ฐ์ ๊ฐ์ง ํ๋ผ๋ฆฌ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ญ์นจ
SELECT ์ง๊ณํจ์(์ปฌ๋ผ1), ์ง๊ณํจ์(์ปฌ๋ผ2) ..
FROM ํ
์ด๋ธ
GROUP BY ์ปฌ๋ผ
HAVING
๊ทธ๋ฃน์ ๋ํ ์กฐ๊ฑด์ , ๊ทธ๋ฃน ์ค ์กฐ๊ฑด์ ๋ง๋ ๊ทธ๋ฃน๋ง ๋จ๊น๋๋ค.
ํ
์ด๋ธ ์กฐํ ์ ๋ ฌ ( ORDER BY )
ํ ์ด๋ธ์์ SELECT๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋, ORDER BY๋ฅผ ์ถ๊ฐํ์ฌ ์ง์ ๋ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ ํ ์ ์์ต๋๋ค.
์ค๋ฆ์ฐจ์(ASC) ๋๋ ๋ด๋ฆผ์ฐจ์(DESC) ๋ ๊ฐ์ง ์ ๋ ฌ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ค๋ฆ์ฐจ์(ASC)์ ๋๋ค
SELECT ๋ฌธ์ฅ ์คํ ์์
FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY
1. ๋ฐ์ท ๋์ ํ ์ด๋ธ์ ์ฐธ์กฐ (FROM)
2. ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒ์ ์ ๊ฑฐ (WHERE)
3. ๊ทธ๋ฃนํ (GROUP BY)
4. ๊ทธ๋ฃนํ ์กฐ๊ฑด (HAVING)
5. ์ถ๋ ฅ (SELECT)
6. ์ ๋ ฌ (ORDER BY)
์์ N๊ฐ์ ๋ฐ์ดํฐ ์ถ๋ ฅ(TOP)
SELECT TOP(3) ํ๋ช , ์น๋ฆฌ๊ฑด์
FROM ํ๋ณ์ฑ์
TOP WITH TIES
TOP ๊ณผ ๋์ผํ๊ฒ ์์ N๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ค.
๋์ผํ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ ํจ๊ป ์ถ๋ ฅ ํ๋ค.
TOP WITH TIES๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ORDER BY ์ ์ด ๋ฐ๋์ ํจ๊ป ์์ผ ํ๋ค. (TOP์ ๊ฒฝ์ฐ ์์ด๋ ๊ฐ๋ฅ)
๋์ผํ ๋ฐ์ดํฐ๋ ORDER BY์ ๋ค์ ์ค๋ ์ปฌ๋ผ์ด ๊ธฐ์ค์ด ๋๋ค.
EQUI JOIN
๋ ๊ฐ ์ด์์ ํ ์ด๋ธ ๋ค์ ์ฐ๊ฒฐ ๋๋ ๊ฒฐํฉํ๋ ๊ฒ
SELECT ํ ์ด๋ธ1.์ปฌ๋ผ๋ช , ํ ์ด๋ธ2.์ปฌ๋ผ๋ช
FROM ํ ์ด๋ธ1, ํ ์ด๋ธ2
WHERE ํ ์ด๋ธ1.์ปฌ๋ผ = ํ ์ด๋ธ2.์ปฌ๋ผ
LIKE ์ฐ์ฐ์
๋ฌธ์์ด์์ ์์ผ๋์นด๋(%)๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ ๋ฌธ์๊ฐ ํฌํจ๋ ์๋ฃ๋ฅผ ์ฝ๊ฒ ๊ฒ์ํ ์ ์๋ค.
'์๊ฒฉ์ฆ > SQLD' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SQLD] ์ต์ข ์ ๋ฆฌ (0) | 2023.03.18 |
---|---|
[SQLD] 5. SQL ํ์ฉ - 1 (0) | 2023.03.16 |
[SQLD] 3. SQL ๊ธฐ๋ณธ - 1 (0) | 2023.03.14 |
[SQLD] 2. ๋ฐ์ดํฐ ๋ชจ๋ธ๊ณผ ์ฑ๋ฅ (0) | 2023.03.13 |
[SQLD] 1. ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ์ดํด (0) | 2023.03.06 |