๋ฐ์ํ
๋๋ณด๊ธฐ
๋๋ณด๊ธฐ
์ฑ
์์ฒด์์ A, B ์ด๋ฐ ์์ผ๋ก ์ถ์ ์ ๋๋ฅผ ํ์ํ๊ณ , ์ถ์ ๋ ๋
๋ ์๋ ๋์จ๋ค. ํ์๋ ๋๋ก ํ ๋ฒ ์ด์ ์ถ์ ๋ ํ์ ๋ฐฐ๊ฒฝ, ๋ ๋ฒ์ด์ ๋ฐ ์ง์ ์ถ์ ๋ฅผ ํ์ธํ ๊ฒฝ์ฐ, ๋
ธ๋ ๋ฐฐ๊ฒฝ์ผ๋ก ํ์ํ ์์ ์ด๋ค. ๋ํ ํค์๋ ์์ฃผ๋ก ์ต๋ํ ๊ธฐ์ตํ๊ธฐ ์ฝ๊ฒ ๊ธฐ๋กํ ์์ ์ด๋ค.
์ฑ
์์ฒด์์ A, B ์ด๋ฐ ์์ผ๋ก ์ถ์ ์ ๋๋ฅผ ํ์ํ๊ณ , ์ถ์ ๋ ๋
๋ ์๋ ๋์จ๋ค. ํ์๋ ๋๋ก ํ ๋ฒ ์ด์ ์ถ์ ๋ ํ์ ๋ฐฐ๊ฒฝ, ๋ ๋ฒ์ด์ ๋ฐ ์ง์ ์ถ์ ๋ฅผ ํ์ธํ ๊ฒฝ์ฐ, ๋
ธ๋ ๋ฐฐ๊ฒฝ์ผ๋ก ํ์ํ ์์ ์ด๋ค. ๋ํ ํค์๋ ์์ฃผ๋ก ์ต๋ํ ๊ธฐ์ตํ๊ธฐ ์ฝ๊ฒ ๊ธฐ๋กํ ์์ ์ด๋ค. ๊ทธ๋์ ์ดํดํ๊ธฐ ํ๋ค ์๋์์ง๋ง ์ต๋ํ ์ฝ๊ฒ ์จ๋ณผ ์์ ์ด๋ค...
DDL ; Data Define Language
DB๋ฅผ ๊ตฌ์ถํ๊ฑฐ๋ ์์ ํ ๋ชฉ์
- CREATE ; SCHEMA, DOMAIN, TABLE, VIEW, INDEX ์ ์
CREATE [UNIQUE] INDEX ์ธ๋ฑ์ค๋ช
ON ํ ์ด๋ธ๋ช (์์ฑ๋ช [ASC | DESC]); - ALTER ; TABLE์ ๋ํ ์ ์ ๋ณ๊ฒฝ
ALTER TABLE ํ ์ด๋ธ๋ช ADD | DROP COLUMN ์์ฑ๋ช ๋ฐ์ดํฐํ์ [DEFAULT ' ๊ธฐ๋ณธ๊ฐ']; - DROP ; SCHEMA, DOMAIN, TABLE, VIEW, INDEX ์ญ์
DROP ์ข ๋ฅ ์ข ๋ฅ๋ช [CASCADE | RESTRICT];
# CREATE --------
CREATE [UNIQUE] INDEX ์ธ๋ฑ์ค๋ช
# UNIQUE ์ฌ์ฉ - ์ค๋ณต ์. (์๋ต : ์ค๋ณตํ์ฉ)
ON ํ
์ด๋ธ๋ช
(์์ฑ๋ช
[ASC|DESC][,์์ฑ๋ช
[ASC|DESC]])
# ASC | DESC ์ค๋ฆ์ฐจ์ | ๋ด๋ฆผ์ฐจ์ (์๋ต : ์ค๋ฆ)
[CLUSTER];
# CLUSTER ์ฌ์ฉํ๋ฉด ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค ์ค์
# <๊ณ ๊ฐ> ํ
์ด๋ธ, UNIQUE ํน์ฑ ๊ฐ๋ '๊ณ ๊ฐ๋ฒํธ' ์์ฑ์ ๋ํด ๋ด๋ฆผ์ฐจ์, '๊ณ ๊ฐ๋ฒํธ_idx'์ด๋ฆ์ผ๋ก ์ธ๋ฑ์ค ์ ์
CREATE UNIQUE INDEX ๊ณ ๊ฐ๋ฒํธ_idx
ON ๊ณ ๊ฐ(๊ณ ๊ฐ๋ฒํธ DESC);
#ALTER --------
ALTER TABLE ํ
์ด๋ธ๋ช
ADD ์์ฑ๋ช
๋ฐ์ดํฐ_ํ์
[DEFAULT '๊ธฐ๋ณธ๊ฐ'];
# ADD ์ด ์ถ๊ฐ
ALTER TABLE ํ
์ด๋ธ๋ช
ADD ์์ฑ๋ช
[SET DEFAULT '๊ธฐ๋ณธ๊ฐ'];
# ALTER ํน์ ์์ฑ ๊ธฐ๋ณธ๊ฐ ๋ณ๊ฒฝ
ALTER TABLE ํ
์ด๋ธ๋ช
DROP COLUMN ์์ฑ๋ช
[CASCADE];
# DROP COLUMN ํน์ ์์ฑ ์ญ์
# <ํ์> ํ
์ด๋ธ. ์ต๋ 3๋ฌธ์๋ก ๊ตฌ์ฑ๋๋ 'ํ๋
'์์ฑ ์ถ๊ฐ,
# 'ํ๋ฒ'ํ๋์ ๋ฐ์ดํฐ ํ์
๊ณผ ํฌ๊ธฐ VARCHAR(10)์ผ๋ก ํ๊ณ NULL ์
๋ ฅ๋์ง ์๋๋ก.
ALTER TABLE ํ์ ADD ํ๋
VARCHAR(3);
ALTER TABLE ํ์ ALTER ํ๋ฒ VARCHAR(10) NOT NULL;
#DROP --------
DROP SCHEMA ์คํค๋ง๋ช
[CASCADE | RESTRICT];
DROP DOMAIN, TABLE, VIEW, INDEX ๊ฐ๋ช
[CASCADE | RESTRICT];
DROP CONSTRAINT ์ ์ฝ์กฐ๊ฑด๋ช
;
# CASCADE ์ฐธ์กฐํ๋ ๋ชจ๋ ~~~ ๋ค
# RESTRICT ์ฐธ์กฐ์ค์ด๋ฉด ์ ๊ฑฐ ์ทจ์
# <ํ์> ํ
์ด๋ธ ์ ๊ฑฐ, ์ฐธ์กฐํ๋ ๋ชจ๋ ๋ฐ์ดํฐ ์ ๊ฑฐ
DROP TABLE ํ์ CASCADE;
DCL ; Data Control Language
Data์ ๋ณด์, ๋ฌด๊ฒฐ์ฑ, ํ๋ณต, ๋ณํ ์ ์ด ๋ฑ์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉํ๋ ์ธ์ด. ๊ด๋ฆฌ์๊ฐ ์ฌ์ฉ
- COMMIT ; ์๋ฃ, ์๋ฆผ
- ROLLBACK ; ๋น์ ์ ์ข
๋ฃ, ์๋ ๋ณต๊ตฌ. ๋ณ๊ฒฝ๋์์ผ๋ COMMIT ๋์ง ์์ ๋ชจ๋ ๋ด์ฉ ์ทจ์, ๋๋๋ฆฌ๋.
Inconsistency ์ํ๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์ผ๋ถ ์๋ฃ๋ ํธ๋์ญ์ ์ ๋กค๋ฐฑ ๋์ด์ผ ํจ. - GRANT / REVOKE ; ๊ถํ ๋ถ์ฌ, ์ทจ์
GRANT (ALL) ON ํ ์ด๋ธ๋ช TO ์ฌ์ฉ์๋ช WITH GRANT OPTION
REVOKE ๊ถํ(GRANT OPTION) FOR ๋ญํ๋๊ถํ? (UPDATE) ON ํ ์ด๋ธ๋ช FROM ์ฌ์ฉ์๋ช
# GRANT / REVOKE --------
GRANT ๊ถํ๋ฆฌ์คํธ ON ๊ฐ์ฒด TO ์ฌ์ฉ์ [WITH GRANT OPTION];
REVOKE [GRANT OPTION FOR] ๊ถํ๋ฆฌ์คํธ ON ๊ฐ์ฒด
FROM ์ฌ์ฉ์ [CASCADE];
# ์ฌ์ฉ์ ID 'NABI'์๊ฒ <๊ณ ๊ฐ> ํ
์ด๋ธ์ ๋ํ ๋ชจ๋ ๊ถํ, ๋ค๋ฅธ ์ฌ๋์๊ฒ ๊ถํ ๋ถ์ฌํ ์ ์๋ ๊ถํ
GRANT ALL ON ๊ณ ๊ฐ TO NABI WITH GRANT OPTION;
# ์ฌ์ฉ์ ID 'STAR'์๊ฒ ๋ถ์ฌํ <๊ณ ๊ฐ> ํ
์ด๋ธ ๊ถํ ์ค, UPDATE ๊ถํ์ ๋ค๋ฅธ์ฌ๋์๊ฒ ๋ถ์ฌํ๋ ๊ถํ๋ง ์ทจ์
REVOKE GRANT OPTION FOR UPDATE ON ๊ณ ๊ฐ FROM STAR;
DML ; Data Manipulation Language
์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ค์ง์ ์ผ๋ก ๊ด๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ ์ธ์ด
- SELECT
SELECT FROM ํ ์ด๋ธ๋ช WHERE ์กฐ๊ฑด GROUP BY ์์ฑ๋ช HAVING ORDER BY - INSERT
- DELETE
DELETE FROM ํ ์ด๋ธ๋ช WHERE ์กฐ๊ฑด - UPDATE
UPDATE SET ์์ ์์ฑ๋ช = ์์ ๋ฐ์ดํฐ WHERE ์กฐ๊ฑด
# SELECT -----
SELECT
[PREDICATE] [ํ
์ด๋ธ๋ช
] ์์ฑ๋ช
[AS ๋ณ์นญ(๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ํ์)] ....
# ๊ฒ์ํ ํํ ์๋ฅผ ์ ํํ๋, DISTINCT - ์ค๋ณต์์ผ๋ฉด ์ฒซ ๋ฒ์งธ๋ง ํ์
FROM ํ
์ด๋ธ๋ช
[WHERE] ์กฐ๊ฑด
[GROUP BY] ์์ฑ๋ช
# ํน์ ์์ฑ์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํ ๊ฒ์
[HAVING] ์กฐ๊ฑด
# GROUP BY ์ ๊ฐ์ด. ๊ทธ๋ฃน์ ๋ํ ์กฐ๊ฑด
[ORDER BY] ์์ฑ๋ช
[ASC | DESC];
# ์ ๋ ฌ
# <์ฌ์> ๋ชจ๋ ํํ
# <์ฌ์> ํ
์ด๋ธ '์ฃผ์'๊ฒ์, ๊ฐ์ '์ฃผ์'ํ๋ฒ๋ง
SELECT *FROM ์ฌ์;
SELECT DISTINCT ์ฃผ์ FROM ์ฌ์;
# DELETE -----
DELETE FROM ํ
์ด๋ธ๋ช
[WHERE ์กฐ๊ฑด];
# ๋ชจ๋ ๋ ์ฝ๋ ์ญ์ ๋ WHERE ์์ด
# <์ฌ์> ํ
์ด๋ธ '์๊บฝ์ ' ํํ ์ญ์
# <์ฌ์> ํ
์ด๋ธ '์ธํฐ๋ท' ๋ถ์ ๋ชจ๋ ํํ ์ญ์
# <์ฌ์> ํ
์ด๋ธ ๋ชจ๋ ๋ ์ฝ๋ ์ญ์
DELETE FROM ์ฌ์ WHERE ์ด๋ฆ='์๊บฝ์ ';
DELETE FROM ์ฌ์ WHERE ๋ถ์='์ธํฐ๋ท';
DELETE FROM ์ฌ์;
# UPDATE -----
UPDATE ํ
์ด๋ธ๋ช
SET ์์ฑ๋ช
= ๋ฐ์ดํฐ[, ์์ฑ๋ช
= ๋ฐ์ดํฐ, ...]
[WHERE ์กฐ๊ฑด];
# <์ฌ์> ํ
์ด๋ธ, "ํ๊ธธ๋" '์ฃผ์'๋ฅผ "์์๋" ์์
# <์ฌ์> ํ
์ด๋ธ, "ํฉ์ง์ด" '๋ถ์'๋ฅผ "๊ธฐํ๋ถ" ๋ณ๊ฒฝ, '๊ธฐ๋ณธ๊ธ' 5๋ง์ ์ธ์
UPDATE ์ฌ์ SET ์ฃผ์='์์๋' WHERE ์ด๋ฆ='ํ๊ธธ๋';
UPDATE ์ฌ์
SET ๋ถ์='๊ธฐํ๋ถ', ๊ธฐ๋ณธ๊ธ=๊ธฐ๋ณธ๊ธ+5
WHERE ์ด๋ฆ='ํฉ์ง์ด';
์กฐ๊ฑด ์ง์ ๊ฒ์
- ๋น๊ต ์ฐ์ฐ์
=, <>(๊ฐ์ง์๋ค), >, <, >=, <= - ๋
ผ๋ฆฌ ์ฐ์ฐ์
NOT, AND, OR - LIKE ์ฐ์ฐ์
%(๋ชจ๋ ๋ฌธ์ ๋ํ), _(๋ฌธ์ ํ๋ ๋ํ), #(์ซ์ ํ๋ ๋ํ) - IN ์ฐ์ฐ์
# 1) <์ฌ์> ํ
์ด๋ธ์์ '๊ธฐํ'๋ถ ๋ชจ๋ ํํ ๊ฒ์
SELECT *
FROM ์ฌ์
WHERE ๋ถ์ = '๊ธฐํ';
# 2) <์ฌ์> ํ
์ด๋ธ์์ '๊ธฐํ'๊ทผ๋ฌด, '๋ํฅ๋'์ฌ๋ ์ฌ๋
SELECT *
FROM ์ฌ์
WHERE ๋ถ์ = '๊ธฐํ' AND ์ฃผ์ = '๋ํฅ๋';
# 3) <์ฌ์> ํ
์ด๋ธ์์ ์ฑ์ด '๊น'์ฌ๋
SELECT *
FROM ์ฌ์
WHERE ์ด๋ฆ LIKE "๊น%";
# %๋ชจ๋ ๋ฌธ์
# 4) <์ฌ์> ํ
์ด๋ธ์์ '์์ผ'์ด '01/01/69'์์ '12/31/73' ์ฌ์ด์ธ ํํ
SELECT *
FROM ์ฌ์
WHERE ์์ผ BETWEEN #01/01/69# AND #12/31/73#;
# #์ ์ซ์
# 5) <์ฌ์> ํ
์ด๋ธ์์ '์ฃผ์'๊ฐ NULL ์ธ ํํ
SELECT *
FROM ์ฌ์
WHERE ์ฃผ์ IS NULL;
์ ๋ ฌ ๊ฒ์
ORDER BY ํน์ ์์ฑ ์ง์
# <์ฌ์> ํ
์ด๋ธ '๋ถ์' ๊ธฐ์ค, ์ค๋ฆ์ฐจ์. ๊ฐ์ '๋ถ์'์ ๋ํด์ '์ด๋ฆ' ๊ธฐ์ค ๋ด๋ฆผ์ฐจ์
SELECT *
FROM ์ฌ์
ORDER BY ๋ถ์ ASC, ์ด๋ฆ DESC;
ํ์ ์ง์
์กฐ๊ฑด์ ์ ์ฃผ์ด์ง ์ง์ ์ํํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์กฐ๊ฑด์ ์ ํผ์ฐ์ฐ์๋ก ์ฌ์ฉ
# '์ทจ๋ฏธ'๊ฐ '๋์ดํธ๋์ค'์ธ ์ฌ์์ '์ด๋ฆ'๊ณผ '์ฃผ์'๋ฅผ ๊ฒ์
SELECT ์ด๋ฆ, ์ฃผ์
FROM ์ฌ์
WHERE ์ด๋ฆ = (
SELECT ์ด๋ฆ FROM ์ฌ๊ฐํ๋ WHERE ์ทจ๋ฏธ = '๋์ดํธ๋์ค'
);
# ์ทจ๋ฏธํ๋ ํ์ง ์๋ ์ฌ์๋ค์ ๊ฒ์
SELECT *
FROM ์ฌ์
WHERE ์ด๋ฆ NOT IN (SELECT ์ด๋ฆ FROM ์ฌ๊ฐํ๋);
# '๋ง์๋'์ ๊ฑฐ์ฃผํ๋ ์ฌ์๋ค์ '๊ธฐ๋ณธ๊ธ'๋ณด๋ค ์ ์ '๊ธฐ๋ณธ๊ธ'์ ๋ฐ๋ ์ฌ์์ ์ ๋ณด๋ฅผ ๊ฒ์
SELECT ์ด๋ฆ, ๊ธฐ๋ณธ๊ธ, ์ฃผ์
FROM ์ฌ์
WHERE ๊ธฐ๋ณธ๊ธ < ALL (SELECT ๊ธฐ๋ณธ๊ธ FROM ์ฌ์ WHERE ์ฃผ์ = '๋ง์๋');
๊ทธ๋ฃน ์ง์ ๊ฒ์
GROUP BY ์ง์ ์์ฑ ๊ธฐ์ค(์ด๊ธฐ์ค)์ผ๋ก ๊ฒ์
# <์์ฌ๊ธ> ํ
์ด๋ธ์์ '๋ถ์'๋ณ '์์ฌ๊ธ'์ ํ๊ท
SELECT ๋ถ์, AVG(์์ฌ๊ธ) AS ํ๊ท
FROM ์์ฌ๊ธ
GROUP BY ๋ถ์; # ์ด ์ง์
# <์์ฌ๊ธ> ํ
์ด๋ธ์์ /'์์ฌ๊ธ'์ด 100 ์ด์์ธ /์ฌ์์ด 2๋ช
์ด์์ธ /'๋ถ์'์ ํํ ์
SELECT ๋ถ์, COUNT(*) AS ์ฌ์์
FROM ์์ฌ๊ธ
WHERE ์์ฌ๊ธ >= 100
GROUP BY ๋ถ์
HAVING COUNT(*) >= 2;
# ์ง์ ์ด์์ ์กฐ๊ฑด
์งํฉ ์ฐ์ฐ์๋ฅผ ์ด์ฉํ ํตํฉ ์ง์
2๊ฐ ์ด์์ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ํ๋๋ก ํตํฉ
# ์งํฉ ์ฐ์ฐ์ --------
SELECT ์์ฑ๋ช
1, ์์ฑ๋ช
2...
FROM ํ
์ด๋ธ๋ช
UNION | UNION ALL | INTERSECT | EXCEPT
# UNION ํฉ์งํฉ, ์ค๋ณต ํ ํ ๋ฒ๋ง
# UNION ALL ํฉ์งํฉ, ์ค๋ณต ํ ๋ค
# INTERSECT ๊ต์งํฉ. ๊ณตํต ํ ์ถ๋ ฅ
# EXCEPT ์ฐจ์งํฉ. ์ฒซ - ๋๋ฒ์งธ ํ ์ ์ธ ์ถ๋ ฅ
SELECT ์์ฑ๋ช
1, ์์ฑ๋ช
2...
FROM ํ
์ด๋ธ๋ช
[ORDER BY ์์ฑ๋ช
[ASC | DESC]];
# LEFT OUTER JOIN -------
# INNER JOIN ๊ฒฐ๊ณผ ๊ตฌํด ์ฐ์ธก ํญ ๋ฆด๋ ์ด์
์ข์ธก์ NULL ๋ถ์ฌ ์ถ๊ฐ
SELECT [ํ
์ด๋ธ๋ช
1]์์ฑ๋ช
, [ํ
์ด๋ธ๋ช
2]์์ฑ๋ช
..
FROM ํ
์ด๋ธ๋ช
1 LEFT OUTER JOIN ํ
์ด๋ธ๋ช
2
ON ํ
์ด๋ธ๋ช
1.์์ฑ๋ช
= ํ
์ด๋ธ๋ช
2.์์ฑ๋ช
;
# RIGHT OUTER JOIN -------
# INNER JOIN ๊ฒฐ๊ณผ ๊ตฌํด ์ข์ธก ํญ ๋ฆด๋ ์ด์
์ข์ธก์ NULL ๋ถ์ฌ ์ถ๊ฐ
SELECT [ํ
์ด๋ธ๋ช
1]์์ฑ๋ช
, [ํ
์ด๋ธ๋ช
2]์์ฑ๋ช
..
FROM ํ
์ด๋ธ๋ช
1 RIGHT OUTER JOIN ํ
์ด๋ธ๋ช
2
ON ํ
์ด๋ธ๋ช
1.์์ฑ๋ช
= ํ
์ด๋ธ๋ช
2.์์ฑ๋ช
;
# <ํ์> ํ
์ด๋ธ, <ํ๊ณผ> ํ
์ด๋ธ ์์ 'ํ๊ณผ์ฝ๋' ๊ฐ์ด ๊ฐ์ ํํ JOIN, 'ํ๋ฒ', '์ด๋ฆ', 'ํ๊ณผ์ฝ๋', 'ํ๊ณผ๋ช
' ์ถ๋ ฅ.
# ์ด๋ 'ํ๊ณผ์ฝ๋'์
๋ ฅ๋์ง ์์ ํ์๋ ์ถ๋ ฅ
SELECT ํ๋ฒ, ์ด๋ฆ, ํ์.ํ๊ณผ์ฝ๋, ํ๊ณผ๋ช
FROM ํ์ LEFT OUTER JOIN ํ๊ณผ
ON ํ์.ํ๊ณผ์ฝ๋ = ํ๊ณผ.ํ๊ณผ์ฝ๋;
ํธ๋ฆฌ๊ฑฐ Trigger
Event๊ฐ ๋ฐ์ํ ๋ ๊ด๋ จ ์์ ์ด ์๋์ผ๋ก ์ํ๋๊ฒ ํ๋ ์ ์ฐจํ SQL์ด๋ค.
๋ฐ๋ฒ ์ ์ฅ, ๋ณ๊ฒฝ ๋ฐ ๋ฌด๊ฒฐ์ฑ ์ ์ง, ๋ก๊ทธ ์ถ๋ ฅ ๋ฑ์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ.
์ค์ ํค์๋ ์ ์ฌ์ ๋ฆฌ
์ค์ํ๋๊น ๋ค ๋ณด๊ณ ์ดํดํ์............
๋ฐ์ํ
'์๊ฒฉ์ฆ ์์ผ๋ฉด ์ข์ง > ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ค๊ธฐ] ์ด์ด์ด์์ฝ - 11์ฅ ์์ฉ SW ๊ธฐ์ด ๊ธฐ์ ํ์ฉ (2) | 2024.10.20 |
---|---|
[์ค๊ธฐ] ์ด์ด์ด์์ฝ - 9์ฅ ์ํํธ์จ์ด ๊ฐ๋ฐ ๋ณด์ ๊ตฌ์ถ (3) | 2024.10.18 |
[์ค๊ธฐ] ์ด์ด์ด์์ฝ - 7์ฅ ์ ํ๋ฆฌ์ผ์ด์ ํ ์คํธ ๊ด๋ฆฌ (4) | 2024.10.16 |
[์ค๊ธฐ] ์ด์ด์ด์์ฝ - 6์ฅ ํ๋ฉด ์ค๊ณ (1) | 2024.10.16 |
[์ค๊ธฐ] ์ด์ด์ด์์ฝ - 5์ฅ ์ธํฐํ์ด์ค ๊ตฌํ (0) | 2024.10.15 |