101. SQL์ ๊ฐ๋
SQL (Structured Query Language)
• SQL์ ๋ถ๋ฅ
1. DDL(๋ฐ์ดํฐ ์ ์์ด)
๋ช ๋ น์ด |
๊ธฐ๋ฅ |
CREATE |
SCHEMA, DOMAIN, TABLE, VIEW, INDEX ์ ์ |
ALTER |
TABLE์ ๋ํ ์ ์ ๋ณ๊ฒฝ |
DROP |
SCHEMA, DOMAIN, TABLE, VIEW, INDEX ์ญ์ |
2. DML(๋ฐ์ดํฐ ์กฐ์์ด)
๋ช ๋ น์ด |
๊ธฐ๋ฅ |
SELECT |
ํ ์ด๋ธ์์ ์กฐ๊ฑด์ ๋ง๋ ํํ ๊ฒ์ |
INSERT |
ํ ์ด๋ธ์ ์๋ก์ด ํํ ์ฝ์ |
DELETE |
ํ ์ด๋ธ์์ ์กฐ๊ฑด์ ๋ง๋ ํํ ์ญ์ |
UPDATE |
๋ฐ์ด๋ธ์์ ์กฐ๊ฑด์ ๋ง๋ ํํ์ ๋ด์ฉ ๋ณ๊ฒฝ |
3. DCL (๋ฐ์ดํฐ ์ ์ด์ด)
๋ช ๋ น์ด |
๊ธฐ๋ฅ |
COMMIT |
๋ช ๋ น์ ์ํด ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ค์ ๋ฌผ๋ฆฌ์ ๋์คํฌ๋ก ์ ์ฅ, ์์ ์ด ์ ์์ ์ผ๋ก ์๋ฃ๋์์์ ์๋ฆผ |
ROLLBACK |
๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐ์ ์์ ์ด ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋์์ ๋ ์๋์ ์ํ๋ก ๋ณต๊ตฌ |
GRANT |
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์์๊ฒ ์ฌ์ฉ์ ๊ถํ ๋ถ์ฌ |
REVOKE |
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์์ ์ฌ์ฉ๊ถํ ์ทจ์ |
102. DDL
DDL (Data Define Language, ๋ฐ์ดํฐ ์ ์์ด)
๊ตฌ์กฐ, ๋ฐ์ดํฐ ํ์, ์ ๊ทผ ๋ฐฉ์ ๋ฑ DB๋ฅผ ๊ตฌ์ถํ๊ฑฐ๋ ์์ ํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ ์ธ์ด
1. CREATE SCHEMA
CREATE SCHEMA ์คํค๋ง_์ด๋ฆ AUTHORIZATION ์ฌ์ฉ์_id;
ex) ์์ ๊ถ์์ ์ฌ์ฉ์ ID๊ฐ ์ฒ ์์ธ ์คํค๋ง '๋ํ๊ต'์ ์ ์
CREATE SCHEMA ๋ํ๊ต AUTHORIZATION ์ฒ ์;
2. CREATE DOMAIN
CREATE DOMAIN ๋๋ฉ์ธ๋ช
[AS] data_type
[DEFAULT ๊ธฐ๋ณธ๊ฐ]
[CONSTRAINT ์ ์ฝ์กฐ๊ฑด๋ช
CHECK(๋ฒ์๊ฐ)];
ex) '์ฑ๋ณ'์ '๋จ'๋๋ '์ฌ'์ ๊ฐ์ด ์ ํด์ง 1๊ฐ์ ๋ฌธ์๋ก ํํ๋๋ ๋๋ฉ์ธ SEX๋ฅผ ์ ์
#์ ์๋ ๋๋ฉ์ธ ์ด๋ฆ์ 'SEX', ๋ฌธ์ํ์ด๊ณ ํฌ๊ธฐ๋ 1์
CREATE DOMAIN SEX CHAR(1)
#๋๋ฉ์ธ SEX๋ฅผ ์ง์ ํ ์์ฑ์ ๊ธฐ๋ณธ๊ฐ์ '๋จ'
DEFAULT '๋จ'
#SEX๋ฅผ ์ง์ ํ ์์ฑ์๋ '๋จ', '์ฌ' ์ค ํ๋์ ๊ฐ๋ง ์ง์ ํ ์ ์์
CONSTRAINT VALID-SEX CHECK (VALUE IN ('๋จ', '์ฌ'));
SQL์์ ์ง์ํ๋ ๊ธฐ๋ณธ data_type
- ์ ์(Integer): INT(4Byte ์ ์), SMALLINT(2Byte ์ ์)
- ์ค์(Float): FLOAT, REAL, DOUBLE PRECISION
- ํ์ํ๋ ์ซ์: DEC(i, j) ๋จ, i: ์ ์ฒด ์๋ฆฟ์, j: ์์๋ถ ์๋ฆฟ์
- ๊ณ ์ ๊ธธ์ด ๋ฌธ์: CHAR(n) ๋จ, n: ๋ฌธ์ ์
- ๊ฐ๋ณ ๊ธธ์ด ๋ฌธ์: VARCHAR(n) ๋จ, n: ์ต๋ ๋ฌธ์ ์
- ๊ณ ์ ๊ธธ์ด ๋นํธ ์ด(Bit String): BIT(n), ๋จ, n: ๋นํธ ์
- ๊ฐ๋ณ ๊ธธ์ด ๋นํธ ์ด: VARBIT(n), ๋จ, n: ์ต๋ ๋นํธ ์
- ๋ ์ง: DATE
- ์๊ฐ: TIME
3. CREATE TABLE
CREATE TABLE ํ
์ด๋ธ๋ช
(
์์ฑ๋ช
data_type [DEFAULT ๊ธฐ๋ณธ๊ฐ] [NOT NULL], ...,
[PRIMARY KEY (๊ธฐ๋ณธํค_์์ฑ๋ช
)],
[UNIQUE (๋์ฒดํค_์์ฑ๋ช
)],
[FOREIGN KEY (์ธ๋ํค_์์ฑ๋ช
) REFERENCES ์ฐธ์กฐํ
์ด๋ธ(๊ธฐ๋ณธํค_์์ฑ๋ช
)]
[ON DELETE ์ต์
]
[ON UPDATE ์ต์
],
[CONSTRAINT ์ ์ฝ์กฐ๊ฑด๋ช
] [CHECK (์กฐ๊ฑด์)]
);
CASCADE : ์ฐธ์กฐ ํ ์ด๋ธ์ ํํ์ด ์ญ์ ๋๋ฉด ๊ธฐ๋ณธ ํ ์ด๋ธ์ ๊ด๋ จ ํํ๋ ๋ชจ๋ ์ญ์ ๋๊ณ , ์์ฑ์ด ๋ณ๊ฒฝ๋๋ฉด ๊ด๋ จ ํํ์ ์์ฑ ๊ฐ๋ ๋ชจ๋ ๋ณ๊ฒฝ
4. CREATE INDEX
CREATE [UNIQUE] INDEX ์ธ๋ฑ์ค๋ช
ON ํ
์ด๋ธ๋ช
(์์ฑ๋ช
[ASC | DESC]);
[CLUSTER];
• ์ ๋ ฌ ์ฌ๋ถ ์ง์
- ASC : ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
- DESC : ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
- ์๋ต(Default)ํ๋ฉด ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
ex) <๊ณ ๊ฐ> ํ ์ด๋ธ์์ '๊ณ ๊ฐ๋ฒํธ' ์์ฑ์ ๋ํด ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํด '๊ณ ๊ฐ๋ฒํธ_INX'๋ผ๋ ์ด๋ฆ์ผ๋ก ์ธ๋ฑ์ค ์ ์
CREATE INDEX ๊ณ ๊ฐ๋ฒํธ_INX
ON ๊ณ ๊ฐ(๊ณ ๊ฐ๋ฒํธ DESC);
5. ALTER TABLE
ํ ์ด๋ธ์ ๋ํ ์ ์ ๋ณ๊ฒฝํ๋ ๋ช ๋ น๋ฌธ
ALTER TABLE ํ
์ด๋ธ๋ช
ADD ์์ฑ๋ช
data_type [DEFAULT '๊ธฐ๋ณธ๊ฐ'];
ALTER TABLE ํ
์ด๋ธ๋ช
ALTER ์์ฑ๋ช
[SET DEFAULT '๊ธฐ๋ณธ๊ฐ'];
ALTER TABLE ํ
์ด๋ธ๋ช
DROP COLUMN ์์ฑ๋ช
[CASCADE];
- ADD : ์๋ก์ด ์์ฑ(์ด) ์ถ๊ฐ
- ALTER : ์์ฑ์ ๊ธฐ๋ณธ๊ฐ(Default) ๋ณ๊ฒฝ
- DROP : ์์ฑ ์ญ์
ex) <ํ์> ํ ์ด๋ธ์ ์ต๋ 3๋ฌธ์๋ก ๊ตฌ์ฑ๋๋ 'ํ๋ ' ์์ฑ์ ์ถ๊ฐํ๋ผ.
ALTER TABLE ํ์ ADD ํ๋
VARCHAR(3);
6. DROP
์คํค๋ง, ๋๋ฉ์ธ, ๊ธฐ๋ณธ ํ ์ด๋ธ, ๋ทฐ ํ ์ด๋ธ, ์ธ๋ฑ์ค๋ฅผ ์ญ์ ํ๋ ๋ช ๋ น๋ฌธ
DROP SCHEMA ์คํค๋ง๋ช
[CASCADE | RESTRICT];
DROP DOMAIN ๋๋ฉ์ธ๋ช
[CASCADE | RESTRICT];
DROP TABLE ํ
์ด๋ธ๋ช
[CASCADE | RESTRICT];
DROP VIEW ๋ทฐ๋ช
[CASCADE | RESTRICT];
DROP INDEX ์ธ๋ฑ์ค๋ช
;
- CASCADE : ์ญ์ ํ ์์๋ฅผ ์ฐธ์กฐํ๋ ๋ค๋ฅธ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ํจ๊ป ์ญ์ ํ๋ค.
์ฆ Main Table์ ๋ฐ์ดํฐ ์ญ์ ์ ๊ฐ ์ธ๋ํค์ ๊ด๊ณ๋ฅผ ๋งบ๊ณ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐ
- RESTRICT : ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ์ ๊ฑฐํ ์์๋ฅผ ์ฐธ์กฐ์ค์ผ ๋๋ ์ ๊ฑฐ ์ทจ์
ex) <ํ์> ํ ์ด๋ธ์ ์ญ์ ํ๋, <ํ์> ํ ์ด๋ธ์ ์ฐธ์กฐํ๋ ๋ชจ๋ ํ ์ด๋ธ์ ํจ๊ป ์ญ์ ํ๋ผ.
DROP TABLE ํ์ CASCADE;
103. DCL
DCL (Data Control Language, ๋ฐ์ดํฐ ์ ์ด์ด)
๋ฐ์ดํฐ ๋ณด์, ๋ฌด๊ฒฐ์ฑ, ํ๋ณต, ๋ณํ ์ ์ด ๋ฑ์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉํ๋ ์ธ์ด
1. GRANT / REVOKE
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์์๊ฒ ๊ถํ์ ๋ถ์ฌํ๊ฑฐ๋ ์ทจ์ํ๊ธฐ ์ํ ๋ช ๋ น์ด
• ์ฌ์ฉ์๋ฑ๊ธ ์ง์ ๋ฐ ํด์
# ๊ถํ ๋ถ์ฌ
GRANT ์ฌ์ฉ์ ๋ฑ๊ธ TO ์ฌ์ฉ์_ID_๋ฆฌ์คํธ;
# ๊ถํ ์ทจ์
REVOKE ์ฌ์ฉ์ ๋ฑ๊ธ FROM ์ฌ์ฉ์_ID_๋ฆฌ์คํธ;
• ์ฌ์ฉ์ ๋ฑ๊ธ ์ข ๋ฅ
DBA : ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๊ด๋ฆฌ์
RESOURCE : ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ํ ์ด๋ธ ์์ฑ ๊ฐ๋ฅ์
CONNECT : ๋จ์ ์ฌ์ฉ์
ex) ์ฌ์ฉ์ ID๊ฐ "NABI"์ธ ์ฌ๋์๊ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ํ ์ด๋ธ์ ์์ฑํ ์ ์๋ ๊ถํ ๋ถ์ฌ
GRANT RESOURCE TO NABI;
GRANT RESOURCE TO NABI;
• ํ ์ด๋ธ ๋ฐ ์์ฑ์ ๋ํ ๊ถํ ๋ถ์ฌ ๋ฐ ์ทจ์
GRANT ๊ถํ_๋ฆฌ์คํธ ON ํ ์ด๋ธ๋ช TO ์ฌ์ฉ์ [WITH GRANT OPTION];
REVOKE [GRANT OPTION FOR] ๊ถํ_๋ฆฌ์คํธ ON ํ ์ด๋ธ๋ช FROM ์ฌ์ฉ์;
GRANT ๊ถํ_๋ฆฌ์คํธ ON ํ
์ด๋ธ๋ช
TO ์ฌ์ฉ์ [WITH GRANT OPTION];
REVOKE [GRANT OPTION FOR] ๊ถํ_๋ฆฌ์คํธ ON ํ
์ด๋ธ๋ช
FROM ์ฌ์ฉ์;
- ๊ถํ_๋ฆฌ์คํธ : ALL, SELECT, INSERT, DELETE, UPDATE, ALTER ๋ฑ
- WITH GRANT OPTION : ๋ถ์ฌ๋ฐ์ ๊ถํ์ ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ ๋ค์ ๋ถ์ฌํ ์ ์๋ ๊ถํ ๋ถ์ฌ
- GRANT OPTION FOR : ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ ๊ถํ์ ๋ถ์ฌํ ์ ์๋ ๊ถํ์ ์ทจ์ํจ
ex) ์ฌ์ฉ์ ID๊ฐ "NABI"์ธ ์ฌ๋์๊ฒ <๊ณ ๊ฐ>ํ ์ด๋ธ์ ๋ํ ๋ชจ๋ ๊ถํ๊ณผ ๋ค๋ฅธ ์ฌ๋์๊ฒ ๊ถํ์ ๋ถ์ฌํ ์ ์๋ ๊ถํ๊น์ง ๋ถ์ฌ
GRANT ALL ON ๊ณ ๊ฐ TO NABI WITH GRANT OPTION;
2. COMMIT
ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ๋๋๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋ก์ด ์ผ๊ด์ฑ ์ํ๋ฅผ ๊ฐ์ง๊ธฐ ์ํด
๋ณ๊ฒฝ๋ ๋ชจ๋ ๋ด์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ํ์ฌ์ผ ํ๋๋ฐ, ์ด๋ ์ฌ์ฉํ๋ ๋ช ๋ น์ด
3. ROLLBACK
์์ง COMMIT๋์ง ์์ ๋ณ๊ฒฝ๋ ๋ชจ๋ ๋ด์ฉ๋ค์ ์ทจ์ํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด์ ์ํ๋ก ๋๋๋ฆฌ๋ ๋ช ๋ น์ด
4. SAVEPOINT
ํธ๋์ญ์ ๋ด์ ROLLBACK ํ ์์น์ธ ์ ์ฅ์ ์ ์ง์ ํ๋ ๋ช ๋ น์ด
104. DML
DML (Data Manipulation Language, ๋ฐ์ดํฐ ์กฐ์์ด)
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์๊ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ด๋ ์ง์์ด๋ฅผ ํตํด ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ค์ง์ ์ผ๋ก ๊ด๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ ์ธ์ด
• DML ๋ช ๋ น๋ฌธ
1. ์ฝ์ ๋ฌธ(INSERT INTO~)
INSERT INTO ํ
์ด๋ธ๋ช
([์์ฑ๋ช
1, ์์ฑ๋ช
2, .....])
VALUES(๋ฐ์ดํฐ1, ๋ฐ์ดํฐ2, ...);
ex1) <์ฌ์>ํ ์ด๋ธ์ (์ด๋ฆ-ํ๊ธธ๋, ๋ถ์-์ธํฐ๋ท)์ ์ฝ์
INSERT INTO ์ฌ์(์ด๋ฆ, ๋ถ์)
VALUES('ํ๊ธธ๋', '์ธํฐ๋ท');
ex2) <์ฌ์>ํ ์ด๋ธ์ (์ฅ๋ณด๊ณ , ๊ธฐํ, 05/03/73, ์ฅ๊ณ๋, 90)์ ์ฝ์
INSERT INTO ์ฌ์
VALUES('์ฅ๋ณด๊ณ ', '๊ธฐํ', #05/03/73#, '์ฅ๊ณ๋', 90);
ex3) <์ฌ์>ํ ์ด๋ธ์ ์๋ ํธ์ง๋ถ์ ๋ชจ๋ ํํ์ <ํธ์ง๋ถ์(์ด๋ฆ, ์์ผ, ์ฃผ์, ๊ธฐ๋ณธ๊ธ)> ํ ์ด๋ธ์ ์ฝ์
INSERT INTO ํธ์ง๋ถ์(์ด๋ฆ, ์์ผ, ์ฃผ์, ๊ธฐ๋ณธ๊ธ)
SELECT ์ด๋ฆ, ์์ผ, ์ฃผ์, ๊ธฐ๋ณธ๊ธ
FROM ์ฌ์
WHERE ๋ถ์ = 'ํธ์ง';
2. ์ญ์ ๋ฌธ(DELETE FROM~)
DELETE FROM ํ
์ด๋ธ๋ช
[WHERE์กฐ๊ฑด];
- ๋ชจ๋ ๋ ์ฝ๋ ์ญ์ ์ WHERE์ ์๋ต
โ DELETE๋ฌธ์ ํ ์ด๋ธ ๋ด์ ํํ๋ค๋ง ์ญ์ , DROP๋ฌธ์ ํ ์ด๋ธ ์์ฒด๋ฅผ ์ญ์
ex1) <์ฌ์>ํ ์ด๋ธ์์ "ํฉ์ง์ด"์ ๋ํ ํํ์ ์ญ์
DELETE FROM ์ฌ์ WHERE ์ด๋ฆ = 'ํฉ์ง์ด';
ex2) <์ฌ์>ํ ์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋ ์ญ์
DELETE FROM ์ฌ์;
3. ๊ฐฑ์ ๋ฌธ(UPDATE~ SET~)
UPDATE ํ
์ด๋ธ๋ช
SET ์์ฑ๋ช
= ๋ฐ์ดํฐ, [์์ฑ๋ช
=๋ฐ์ดํฐ, .....]
[WHERE ์กฐ๊ฑด];
ex1) <์ฌ์>ํ ์ด๋ธ์์ "ํ๊ธธ๋"์ '์ฃผ์'๋ฅผ "์์๋"์ผ๋ก ์์
UPDATE ์ฌ์
SET ์ฃผ์='์์๋'
WHERE ์ด๋ฆ='ํ๊ธธ๋';
ex2) <์ฌ์>ํ ์ด๋ธ์์ "ํ๊ธธ๋"์ '๋ถ์'๋ฅผ "๊ธฐํ๋ถ"๋ก ๋ณ๊ฒฝํ๊ณ '๊ธฐ๋ณธ๊ธ'์ 5๋ง์์ผ๋ก ์ธ์์ํค์์ค
UPDATE ์ฌ์
SET ๋ถ์='๊ธฐํ', ๊ธฐ๋ณธ๊ธ=๊ธฐ๋ณธ๊ธ+5
WHERE ์ด๋ฆ='ํ๊ธธ๋';
• ๋ฐ์ดํฐ ์กฐ์์ด 4๊ฐ์ง ์ ํ
SELECT~ FROM~ WHERE~
INSERT INTO~ VALUES~
DELETE~ FROM~ WHERE~
UPDATE~ SET~ WHERE~
105. DML - SELECT(1)
๊ฒ์๋ฌธ (SELECT~ FROM~)
SELECT [PREDICATE] [ํ
์ด๋ธ๋ช
.]์์ฑ๋ช
1, [ํ
์ด๋ธ๋ช
.]์์ฑ๋ช
2, ......,
[๊ทธ๋ฃนํจ์(์์ฑ๋ช
)],
[WINDOWํจ์ OVER(PARTITION BY ์์ฑ๋ช
1, ์์ฑ๋ช
2, .... ORDER BY ์์ฑ๋ช
3, ์์ฑ๋ช
4,...)]
FROM ํ
์ด๋ธ๋ช
1, ํ
์ด๋ธ๋ช
2, ...
[WHERE ์กฐ๊ฑด]
[GROUP BY ์์ฑ๋ช
1, ์์ฑ๋ช
2, ...]
[HAVING ์กฐ๊ฑด]
[ORDER BY ์์ฑ๋ช
[ASC | DESC]];
- PREDICATE : ๋ถ๋ฌ์ฌ ํํ ์๋ฅผ ์ ํํ ๋ช ๋ น์ด ๊ธฐ์
> ALL : ๋ชจ๋ ํํ ๊ฒ์, ์ฃผ๋ก ์๋ต
> DISTINCT : ์ค๋ณต๋ ํํ์ด ์์ผ๋ฉด ๊ทธ์ค ์ฒซ ๋ฒ์งธ ํ ๊ฐ๋ง ๊ฒ์
• LIKE ์ฐ์ฐ์
๋ํ๋ฌธ์ |
% |
_ |
# |
์๋ฏธ |
๋ชจ๋ ๋ฌธ์๋ฅผ ๋ํ |
๋ฌธ์ ํ๋๋ฅผ ๋ํ |
์ซ์ ํ๋๋ฅผ ๋ํ |
1. ๊ธฐ๋ณธ ๊ฒ์
ex1) <์ฌ์>ํ ์ด๋ธ์ ๋ชจ๋ ํํ ๊ฒ์
SELECT * FROM ์ฌ์;
SELECT ์ฌ์.* FROM ์ฌ์;
ex2) <์ฌ์>ํ ์ด๋ธ์์ '์ฃผ์'๋ง ๊ฒ์ํ๋ ๊ฐ์ '์ฃผ์'๋ ํ ๋ฒ๋ง ์ถ๋ ฅํ์์ค.
SELECT DISTINCT ์ฃผ์ FROM ์ฌ์;
ex3) <์ฌ์>ํ ์ด๋ธ์ ๋ชจ๋ ํํ ๊ฒ์
SELECT * FROM ์ฌ์;
SELECT ์ฌ์.* FROM ์ฌ์;
2. ์กฐ๊ฑด ์ง์ ๊ฒ์
ex1) <์ฌ์>ํ ์ด๋ธ์์ "๊ธฐํ"๋ถ์์ ๋ชจ๋ ํํ ๊ฒ์
SELECT * FROM ์ฌ์ WHERE ๋ถ์='๊ธฐํ';
ex2) <์ฌ์>ํ ์ด๋ธ์์ "๊ธฐํ"๋ถ์์ ๊ทผ๋ฌดํ๋ฉด์ "๋ํฅ๋"์ ์ฌ๋ ์ฌ๋์ ํํ ๊ฒ์
SELECT * FROM ์ฌ์ WHERE ๋ถ์='๊ธฐํ' AND ์ฃผ์='๋ํฅ๋';
ex3) <์ฌ์>ํ ์ด๋ธ์์ '๋ถ์'๊ฐ "๊ธฐํ"์ด๊ฑฐ๋ "์ธํฐ๋ท"์ธ ํํ ๊ฒ์
SELECT * FROM ์ฌ์ WHERE ๋ถ์='๊ธฐํ' OR ๋ถ์='์ธํฐ๋ท';
ex4) <์ฌ์>ํ ์ด๋ธ์์ ์ฑ์ด "๊น"์ธ ์ฌ๋์ ํํ ๊ฒ์.
SELECT * FROM ์ฌ์ WHERE ์ด๋ฆ LIKE "๊น%";
ex5) <์ฌ์>ํ ์ด๋ธ์์ '์์ผ'์ด '01/01/69'์์ '12/31/73' ์ฌ์ด์ธ ํํ ๊ฒ์
SELECT * FROM ์ฌ์ WHERE ์์ผ BETWEEN #01/01/69# AND #12/31/73#;
ex6) <์ฌ์>ํ ์ด๋ธ์์ '์ฃผ์'๊ฐ NULL์ธ ํํ ๊ฒ์
SELECT * FROM ์ฌ์ WHERE ์ฃผ์ IS NULL;
3. ์ ๋ ฌ ๊ฒ์
ex1) <์ฌ์>ํ ์ด๋ธ์์ '์ฃผ์'๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์์ผ ๊ฒ์
SELECT * FROM ์ฌ์ ORDER BY ์ฃผ์ DESC;
ex2) <์ฌ์>ํ ์ด๋ธ์์ '๋ถ์'๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ, ๊ฐ์ '๋ถ์'์ ๋ํด์๋ '์ด๋ฆ'์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์์ผ ๊ฒ์
SELECT * FROM ์ฌ์ ORDER BY ๋ถ์ ASC, ์ด๋ฆ DESC;
4. ํ์ ์ง์
ex1) '์ทจ๋ฏธ'๊ฐ "๋์ดํธ๋์ค"์ธ ์ฌ์์ '์ด๋ฆ'๊ณผ '์ฃผ์' ๊ฒ์
SELECT ์ด๋ฆ, ์ฃผ์ FROM ์ฌ์ WHERE ์ด๋ฆ=(SELECT ์ด๋ฆ FROM ์ฌ๊ฐํ๋ WHERE ์ทจ๋ฏธ='๋์ดํธ๋์ค');
ex2) ์ทจ๋ฏธํ๋์ ํ์ง ์๋ ์ฌ์๋ค ๊ฒ์
SELECT * FROM ์ฌ์ WHERE ์ด๋ฆ NOT IN(SELECT ์ด๋ฆ FROM ์ฌ๊ฐํ๋);
5. ๋ณต์ ํ ์ด๋ธ ๊ฒ์
ex1) '๊ฒฝ๋ ฅ'์ด 10๋ ์ด์์ธ ์ฌ์์ '์ด๋ฆ', '๋ถ์', '์ทจ๋ฏธ', '๊ฒฝ๋ ฅ' ๊ฒ์
SELECT ์ฌ์.์ด๋ฆ, ์ฌ์.๋ถ์, ์ฌ๊ฐํ๋.์ทจ๋ฏธ, ์ฌ๊ฐํ๋.๊ฒฝ๋ ฅ FROM ์ฌ์, ์ฌ๊ฐํ๋
WHERE ์ฌ๊ฐํ๋.๊ฒฝ๋ ฅ>=10 AND ์ฌ์.์ด๋ฆ=์ฌ๊ฐํ๋.์ด๋ฆ;
107. DML - SELECT(2)
๊ฒ์๋ฌธ (SELECT~ FROM~)
SELECT [PREDICATE] [ํ
์ด๋ธ๋ช
.]์์ฑ๋ช
1, [ํ
์ด๋ธ๋ช
.]์์ฑ๋ช
2, ......,
[๊ทธ๋ฃนํจ์(์์ฑ๋ช
)],
[WINDOWํจ์ OVER(PARTITION BY ์์ฑ๋ช
1, ์์ฑ๋ช
2, .... ORDER BY ์์ฑ๋ช
3, ์์ฑ๋ช
4,...)]
FROM ํ
์ด๋ธ๋ช
1, ํ
์ด๋ธ๋ช
2, ...
[WHERE ์กฐ๊ฑด]
[GROUP BY ์์ฑ๋ช
1, ์์ฑ๋ช
2, ...]
[HAVING ์กฐ๊ฑด]
[ORDER BY ์์ฑ๋ช
[ASC | DESC]];
- ๊ทธ๋ฃนํจ์ : GROUP BY์ ์ ์ง์ ๋ ๊ทธ๋ฃน๋ณ๋ก ์์ฑ์ ๊ฐ ์ง๊ณ
> COUNT(์์ฑ๋ช ) : ๊ทธ๋ฃน๋ณ ํํ ์
> AVG(์์ฑ๋ช ) : ๊ทธ๋ฃน๋ณ ํ๊ท
> SUM(์์ฑ๋ช ) : ๊ทธ๋ฃน๋ณ ํฉ๊ณ
- WINDOW ํจ์ : GROUP BY์ ์ ์ด์ฉํ์ง ์๊ณ ์์ฑ์ ๊ฐ ์ง๊ณ
> ROW_NUMBER( ) : ์๋์ฐ๋ณ๋ก ๊ฐ ๋ ์ฝ๋์ ๋ํ ์ผ๋ จ ๋ฒํธ ๋ฐํ
> RANK( ) : ์๋์ฐ๋ณ๋ก ์์ ๋ฐํ, ๊ณต๋ ์์ ๋ฐ์
> DENSE_RANK( ) : ์๋์ฐ๋ณ๋ก ์์ ๋ฐํ, ๊ณต๋ ์์ ๋ฌด์ํ๊ณ ์์ ๋ถ์ฌ
- GROUP BY์ : ํน์ ์์ฑ์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํํ์ฌ ๊ฒ์ํ ๋ ํ์ฉ. ๊ทธ๋ฃนํฉ์์ ํจ๊ป ์ฌ์ฉ
- HAVING์ : GROUP BY์ ํจ๊ป ์ฌ์ฉ, ๊ทธ๋ฃน์ ๋ํ ์กฐ๊ฑด ์ง์
1. WINDOW ํจ์ ์ด์ฉ ๊ฒ์
ex1) <์์ฌ๊ธ>ํ ์ด๋ธ์์ '์์ฌ๋ด์ญ'๋ณ๋ก '์์ฌ๊ธ'์ ๋ํ ์ผ๋ จ ๋ฒํธ๋ฅผ ๊ตฌํ์์ค. (๋จ, ์์๋ ๋ด๋ฆผ์ฐจ์, ์์ฑ๋ช ์ 'NO'๋ก ํ ๊ฒ)
SELECT ์์ฌ๋ด์ญ, ์์ฌ๊ธ
ROW_NUMBER( ) OVER(PARTITION BY ์์ฌ๋ด์ญ ORDER BY ์์ฌ๊ธ DESC) AS NO
FROM ์์ฌ๊ธ
ex2) <์์ฌ๊ธ>ํ ์ด๋ธ์์ '์์ฌ๋ด์ญ'๋ณ๋ก '์์ฌ๊ธ'์ ๋ํ ์์๋ฅผ ๊ตฌํ์์ค. (๋จ, ์์๋ ๋ด๋ฆผ์ฐจ์, ์์ฑ๋ช ์ '์์'๋ก ํ ๊ฒ)
SELECT ์์ฌ๋ด์ญ, ์์ฌ๊ธ
RANK( ) OVER(PARTITION BY ์์ฌ๋ด์ญ ORDER BY ์์ฌ๊ธ DESC) AS ์์
FROM ์ฌ์ WHERE ๋ถ์='๊ธฐํ' AND ์ฃผ์='๋ํฅ๋';
2. ๊ทธ๋ฃน ์ง์ ๊ฒ์
ex1) <์์ฌ๊ธ>ํ ์ด๋ธ์์ '๋ถ์'๋ณ '์์ฌ๊ธ'์ ํ๊ท ์ ๊ตฌํ์์ค.
SELECT ๋ถ์, AVG(์์ฌ๊ธ) AS ํ๊ท FROM ์์ฌ๊ธ
GROUP BY ๋ถ์;
ex2) <์์ฌ๊ธ>ํ ์ด๋ธ์์ ๋ถ์๋ณ ํํ ์ ๊ฒ์
SELECT ๋ถ์, COUNT(*) AS ์ฌ์์ FROM ์์ฌ๊ธ
GROUP BY ๋ถ์;
ex3) <์์ฌ๊ธ>ํ ์ด๋ธ์์ '์์ฌ๊ธ'์ด 100์ด์์ธ ์ฌ์์ด 2๋ช ์ด์์ธ '๋ถ์'์ ํํ ์๋ฅผ ๊ตฌํ์์ค
SELECT ๋ถ์, COUNT(*) AS ์ฌ์์ FROM ์์ฌ๊ธ
WHERE ์์ฌ๊ธ>=100
GROUP BY ๋ถ์
HAVING COUNT(*)>=2;
๊ฒ์๋ฌธ (SELECT~ FROM~)
SELECT ์์ฑ๋ช
1, ์์ฑ๋ช
2, ......,
FROM ํ
์ด๋ธ๋ช
1, ํ
์ด๋ธ๋ช
2, ...
UNION | UNION ALL | INTERSECT | EXCEPT
SELECT ์์ฑ๋ช
1, ์์ฑ๋ช
2, ......
FROM ํ
์ด๋ธ๋ช
1, ํ
์ด๋ธ๋ช
2, ...
[ORDER BY ์์ฑ๋ช
[ASC | DESC]];
- ์งํฉ ์ฐ์ฐ์์ ์ข ๋ฅ
> UNION : ๋ SELECT๋ฌธ์ ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ํตํฉํ์ฌ ๋ชจ๋ ์ถ๋ ฅ, ์ค๋ณต๋ ํ ํ๋ฒ๋ง ์ถ๋ ฅ
> UNION ALL : ๋ SELECT๋ฌธ์ ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ํตํฉํ์ฌ ๋ชจ๋ ์ถ๋ ฅ, ์ค๋ณต๋ ํ๋ ๊ทธ๋๋ก ์ถ๋ ฅ
> INTERSECT : ๋ SELECT๋ฌธ์ ์กฐํ ๊ฒฐ๊ณผ ์ค ๊ณตํต๋ ํ๋ง ์ถ๋ ฅ
> EXCEPT : ์ฒซ ๋ฒ์งธ SELECT๋ฌธ์ ์กฐํ ๊ฒฐ๊ณผ์์ ๋ ๋ฒ์งธ SELECT๋ฌธ์ ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ธํ ํ ์ถ๋ ฅ
3. ์งํฉ ์ฐ์ฐ์๋ฅผ ์ด์ฉํ ํตํฉ ์ง์
ex1) <์ฌ์>ํ ์ด๋ธ๊ณผ <์ง์>ํ ์ด๋ธ์ ํตํฉํ๋ ์ง์๋ฌธ์ ์์ฑํ์์ค (๋จ, ๊ฐ์ ๋ ์ฝ๋ ์ค๋ณต X)
SELECT * FROM ์ฌ์
UNION
SELECT * FROM ์ง์;