SQL์ ์ ์
SQL ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์ ์ ์ผ๋ก ์์ธ์ค ํ ์ ์๋ ์ธ์ด๋ก,
๋ฐ์ดํฐ๋ฅผ ์ ์ํ๊ณ => DDL
์กฐ์ํ๋ฉฐ => DML
์กฐ์ํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฉํ๊ฑฐ๋ ์ทจ์ํ ์ ์๊ณ => TCL
์ ๊ทผ ๊ถํ์ ์ ์ดํ๋ ์ฒ๋ฆฌ๋ค๋ก ๊ตฌ์ฑ๋๋ค => DCL
1) DCL : ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์์๊ฒ ๊ถํ์ ๋ถ์ฌ / ํ์ํ๋ ์ธ์ด
์ถ์ ํฌ์ธํธ 1
GRANT :๊ถํ์ ์ค
REVOKE : ๊ถํ์ ํ์
**์ถ์ ๋น๋๊ฐ ๋ฎ์...
์ถ์ ํฌ์ธํธ 2
WITH GRANT ์ ๊ฒฝ์ฐ : ์๋ง๊ฐ ํ์ ๋๋ฉด ์์๋ ํ์๋๋ค!!(A -> B, B -> C, B๊ฐ ํด์ฌ ํ์ฌ ๊ถํ์ ํ์๋นํ๋ฉด C๋ ๊ฐ์ด ํ์ํ๋ ๊ฒฝ์ฐ)
WITH ADMIN ์ ๊ฒฝ์ฐ : ์๋ง๊ฐ ํ์ ๋นํ๋๋ผ๋ ์์์ ์ํฅ์ ๋ฐ์ง ์์
์์ ๋ฌธ์ 1)
=> ์ ๋ต!! GRANT SELECT, UPDATE ON hoho_qualification.data(ํ
์ด๋ธ ๋ช
) TO hoho(์ ์ , ๊ถํ์ ๋ถ์ฌ ๋ฐ๋ ์ฌ๋);
GRANT ๊ถํ(SELECT, UPDATE๋ฑ๋ฑ...) ON ํ
์ด๋ธ๋ช
TO ์ ์ ๋ช
;
์์ ๋ฌธ์ 2)
๋ฐ์ดํฐ๋ฒ ์ด์ค ์์์ ๋ง์ ์ฌ์ฉ์๋ค์๊ฒ ๊ฐ๋ณ์ ์ผ๋ก ๊ถํ์ ๋ถ์ฌํ๊ณ ๊ด๋ฆฌํ๋ ์ด๋ ค์์ ํด์ํ๊ณ ์ ๋ค์ํ ๊ถํ์ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ ๊ด๋ฆฌํ ์ ์๋๋ก ํ๋ ๋
ผ๋ฆฌ์ ์ธ ๊ถํ์ ๊ทธ๋ฃน(๋ช
๋ น์ด)์ ์นญํ๋ ๋ง์?
=> ์ ๋ต!! ROLE
* ๋ค์ํ ๊ถํ์ ๋ค์ํ ์ ์ ๋ฅผ ๋์์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ช
๋ น์ด์ด๋ค * ์ฌ๋ฌ ์ฌ์ฉ์์๊ฒ ๋์ผํ ROLE ๋ถ์ฌ ๊ฐ๋ฅํ๋ค * ROLE์ ์์ฑ์ [ CREATE ROLE ] ๊ถํ์ ๊ฐ์ง ์ ์ ๊ฐ ํ ์ ์๋ค
2) DDL : ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ฐ์ฒด์ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๊ธฐ ์ํ ์ธ์ด
1. CREATE : ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ ํ
์ด๋ธ ๊ตฌ์กฐ ์์ฑ
CREATE TABLE C_INFO(ํ
์ด๋ธ ๋ช
) { ์ปฌ๋ผ๋ช
(์์ฑ๋ช
) / ๋ฐ์ดํฐ์ ์ ํ / ํฌ๊ธฐ ์ด๋ฆ varchar2(10), ์๋
number(4) default 9999, phone varchar2(15) not null, ์ฒซ๋ฐฉ๋ฌธ์ผ date, ๊ณ ๊ฐ ๋ฒํธ varchar2(10) primary key ); => C_INFO๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ํ
์ด๋ธ์ ๋ง๋ ๋ค
* ์ปฌ๋ผ๋ช
(์์ฑ๋ช
) : ์๋ฌธ, ํ๊ธ, ์ซ์ ๋ชจ๋ ๊ฐ๋ฅ(์์๋ง ๋ฌธ์๋ก) ex) h10(o), 10h(x)
* ๋ฐ์ดํฐ ์ ํ (data type)
char : ๊ณ ์ ๊ธธ์ด ๋ฌธ์์ด(ํ ๋น๋ ๊ธธ์ด๋งํผ ๋ฌธ์ ์ฑ์)
varchar2 : ๊ฐ๋ณ ๊ธธ์ด ๋ฌธ์์ด
number : ์ซ์ํ
date : ๋ ์งํ
* ์ ์ฝ ์กฐ๊ฑด (constraint)
default : ๊ธฐ๋ณธ๊ฐ ์ง์
not null : null ์
๋ ฅ ๋ถ๊ฐ
primary key : ๊ธฐ๋ณธํค ์ง์ (PK๋ not null, PK๋ unique ํ ๊ฐ, ํ
์ด๋ธ ๋ด ์ค๋ณต ์์)
foreign key : ์ธ๋ํค ์ง์
์์ ๋ฌธ์ 1)
=> ์ ๋ต!! ์๋ก ๊ฐ๋ค.
ํ์ง๋ง SELECT count(๊ฐ๊ฒฉ) FROM MENU์ ๊ฒฝ์ฐ ๋ค๋ฅด๋ค!!!!!!!!!!
- ๊ฐ๊ฒฉ ์ปฌ๋ผ์ NOT NULL ์ ์ฝ์กฐ๊ฑด์ด ๋ถ์ง๋ ์์๊ณ , primary key๋ ์๋๋ค
- ์ค์ ๋ก ์ฝ์
๋ ํํ ์ค ํ๋๋ ๊ฐ๊ฒฉ ๊ฐ์ด Null์ด๋ค
- count(*)๋ 4๊ฐ ์ถ๋ ฅ๋๊ณ . count(๊ฐ๊ฒฉ)์ 3์ด ์ถ๋ ฅ๋๋ค.
* NULL์ ๋ํด์ ๐ 1. NULL์ ๋ชจ๋ฅด๋ ๊ฐ์ ์์งํ๊ณ , ๊ฐ์ด ์์(๋ถ์ฌ)๋ฅผ ์๋ฏธํจ 2. NULL๊ณผ์ ์ฌ์น์ฐ์ฐ(+, -, /, *), NULL ๊ณผ์ ๋น๊ต์ฐ์ฐ(=, <, > ๋ฑ) ๊ฒฐ๊ณผ๋ ๋ NULL(์ ์ ์์)์ด๋ค 3. ํด๋น ์ปฌ๋ผ์ ๊ฐ์ด NULL ์ธ์ง ํ์ธํ๋ ค๋ฉด '=' ๊ฐ ์๋ 'IS' ํน์ 'IS NOT'๋ฅผ ์ฌ์ฉํ๋ค 4. NULL์ ์ซ์ 0์ด๋ ๊ณต๋ฐฑ๋ฌธ์(' ') ์ ๋์ผํ์ง ์์(์๋ค๋ ๊ฐ์ด ์์, NULL์ ์์ ๊ฐ์ด ์๋ ๊ฒ์
๋๋ค.)
2. ALTER : ํ
์ด๋ธ๊ณผ ์ปฌ๋ผ์ ๋ํด ์ด๋ฆ ๋ฐ ์์ฑ ๋ณ๊ฒฝ, ์ถ๊ฐ/์ญ์ ๋ฑ ๊ตฌ์กฐ ์์ ์ ์ํด ์ฌ์ฉ!
ํ
์ด๋ธ ๋ช
๋ณ๊ฒฝ : ALTER TABLE MENU RENAME (TO) ho_MENU;์ปฌ๋ผ ๋ช
๋ณ๊ฒฝ : ALTER TABLE MENU RENAME COLUMN phone TO ์ ํ๋ฒํธ(์์ ๊ฒฐ๊ณผ); !! : ์์ ํ ๊ฒ์ / ํ
์ด๋ธ์์ / ์ด๋ฆ ๋ค์ / ์ด๋ค ์ปฌ๋ผ / ์ด๊ฑธ๋ก์ปฌ๋ผ ์์ฑ ๋ณ๊ฒฝ : ALTER TABLE_MENU MODIFY (์ด๋ฆ varchar(20) not null);์ปฌ๋ผ ์ถ๊ฐ : ALTER TABLE_MENU ADD ( ๊ฑฐ์ฃผ ์ง์ญ varchar2(10));์ปฌ๋ผ ์ญ์ : ALTEr TABLE_MENU DROP COLUMN ์ด๋ฆ;์ ์ฝ ์กฐ๊ฑด ์ถ๊ฐ / ์ญ์ : ALTER TABLE_MENU ADD CONSTRAINT ์ ์ฝ์กฐ๊ฑด๋ช
์ ์ฝ์กฐ๊ฑด(๋์); DROP CONSTRAINT ์ ์ฝ์กฐ๊ฑด๋ช
;
ALTER ์๋ตํ์ฌ์๋ ์ฌ์ฉ ๊ฐ๋ฅํด์ ^^
++) MODIFY์ ADD CONSTRAINT ๋น๊ต
์ ์ฝ์กฐ๊ฑด ์ถ๊ฐ / ์ญ์ : ALTER TABLE MENU ADD CONSTRAINT ์ ์ฝ์กฐ๊ฑด๋ช
์ ์ฝ ์กฐ๊ฑด (๋์);
์ปฌ๋ผ ์์ฑ ๋ณ๊ฒฝ : ALTER TABLE MENU MODIFY ( ์ด๋ฆ varchar(20) not null );
๋ํ ์ ์ฝ์กฐ๊ฑด 5๊ฐ์ง(NOT NULL, UNIQUE, Primary Key, Foreign Key, CHECK)๋ฅผ ์์ ์ ํตํด ๋ถ์ฌํ ๊ฒฝ์ฐ 5๊ฐ์ง ์ค NOT NULL๋ง MODIFY๋ฅผ ์ฌ์ฉ ํ๊ณ , ๊ทธ ๋ฐ์ ์ ์ฝ์กฐ๊ฑด๋ค์ ๋ชจ๋ ADD ๋ฅผ ์ฌ์ฉ
NOT NULL : ํด๋น ์ปฌ๋ผ์ ๊ฐ์๋ NULL์ด ํฌํจ๋ ์ ์์(๊ฐ์ ๋ชจ๋ ์ ์๋์ด ์์ด์ผ ํจ)
UNIQUE : ํด๋น ์ปฌ๋ผ์ ๋ด์์๋ ๊ฐ์ด ์ค๋ณต๋ ์ ์์ ex) ALTER TABLE ํ
์ด๋ธ๋ช
ADD UNIQUE (์ปฌ๋ผ๋ช
);
PRIMARY KEY : NOt NULL + UNIQUE ex) ALTER TABLE ํ
์ด๋ธ๋ช
ADD PRIMARY KEY (์ปฌ๋ผ๋ช
); ALTER TABLE ํ
์ด๋ธ๋ช
ADD CONSTRAINT PK_RIDING PRIMARY KET (์ปฌ๋ผ๋ช
1, ์ปฌ๋ผ๋ช
2);
FOREIGN KEY : ๋ค๋ฅธ ํ
์ด๋ธ์ ๊ฐ์ ์ฐธ์กฐํ์ฌ ๊ฐ์ ๊ฐ์ ธ์ค๋ผ๋ ์ ์ฝ ex) ALTER TABLE ํ
์ด๋ธ๋ช
ADD FOREIGN KEY (์ปฌ๋ผ๋ช
) REFERENCES ๋ถ๋ชจํ
์ด๋ธ๋ช
(์ปฌ๋ผ๋ช
);
CHECK : ํน์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ๊ฐ๋ง์ ์ปฌ๋ผ์ ๋ฃ์ด์ค์ผ ํจ ex) ALTER TABLE RIDING ADD CONSTRAINT RD_CHECK CHECK (ride_date > '2021-12-10');
์์ ๋ฌธ์ 1)
=> ์ ๋ต!! ALTER TABLE RIDING MODIFY ( phone varchar(15) NOT NULL );
** ๋ํ ์ ์ฝ์กฐ๊ฑด 5๊ฐ์ง ์ค NOT NULL๋ง MODIFY ๋ฅผ ์ฌ์ฉ
3. DROP : ํ
์ด๋ธ ๋ฐ ์ปฌ๋ผ ์ญ์
์ปฌ๋ผ ์ญ์ : ALTER TABLE MENU DROP COLUMN ์ด๋ฆ;ํ
์ด๋ธ ์ญ์ : DROP TABLE MENU;**์ ์ DROP TABLE MENU CASCADE CONSTRAINT; * ํด๋น ํ
์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ํค(FK)๋ก ์ฐธ์กฐํ ์ ์ฝ์ฌํญ๋ ๋ชจ๋ ์ญ์ * Oracle์๋ง ์๋ ์ต์
, SQL Server์๋ ์กด์ฌํ์ง ์์ * FK ์ ์ฝ์กฐ๊ฑด๊ณผ ์ฐธ์กฐํ
์ด๋ธ ๋จผ์ ์ญ์ ํ๊ณ , ํด๋น ํ
์ด๋ธ์ ์ญ์
DROP VS TRUNCATE ๋น๊ตํ๊ธฐ
1) DROP(ํ
์ด๋ธ ์ญ์ ) : DROP TABLE MENU;
ํ
์ด๋ธ ๊ด๋ จํ ๋ชจ๋ ๊ฒ์ด ์ญ์ ๋๋ค. ๊ตฌ์กฐ๋, ๋ฐ์ดํฐ๋!
ํ
์ด๋ธ ์ ์๋ฅผ ์์ ์ญ์ ํจ
ํ
์ด๋ธ์ด ์ฌ์ฉํ๋ ๋ชจ๋ ์ ์ฅ๊ณต๊ฐ์ด Release
2) TRUNCATE(ํ
์ด๋ธ ์ด๊ธฐํ) : TRUNCATE TABLE MENU;
ํ
์ด๋ธ ์ ๋ฐ์ดํฐ๋ง ์ญ์ ๋๊ณ ๊ตฌ์กฐ๋ ์ด์์๋ค
ํ
์ด๋ธ์ ์ด๊ธฐ ์ํ๋ก ๋ง๋ ๋ค
ํ
์ด๋ธ ์ต์ด ํ์ฑ ์ ์ฌ์ฉํ๋ ์ ์ฅ๊ณต๊ฐ๋ง ๋จ๊ธฐ๊ณ Release
์์ ๋ฌธ์ 1)
=> ์ ๋ต!!!
A : DROP TABLE F_INFO;
B : TRUNCATE TABLE F_INFO;
3) DML : ์ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ ์ฝ๋๋ฅผ ์
๋ ฅํ๊ฑฐ๋, ์์ , ์ญ์ ๋ฐ ์กฐํ(SELECT) ํ๊ธฐ ์ํ ๋ช
๋ น์ด๋ค.
์์ ๋ฌธ์ 1)
=> ์ ๋ต!! 3, 4 3 : not null ๊ฐ์ด ๋ฉ๋ด๋ช
์ ๋ํ insert๊ฐ ์ด๋ค์ง์ง ์์ผ๋ฏ๋ก ์ค๋ฅ ๋ฐ์
4 : ์ปฌ๋ผ๋ช
์ง์ ์ด ์ด๋ค์ง์ง ์์ ์ํ์์๋ ์ ์ฒด ์ปฌ๋ผ์ ๊ฐ์ ๋ฃ์ด์ค์ผ ํจ => VALUES์ ๊ฐ์ด 4๊ฐ๊ฐ ์์ผ ํ๋ค!! ('102', '์๊ท', 30000, )
* ์ซ์๋ varchar2 ์ char์ ์
๋ ฅ ๊ฐ๋ฅ
* DELETE (FROM) MENU : FROM ์๋ตํ๊ณ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค
์์ ๋ฌธ์ 2)
=> ์ ๋ต!! 2
DELETE
* WHERE ์กฐ๊ฑด๋ฌธ์ ํตํด ์ํ๋ ๋ฐ์ดํฐ๋ง ์ง์ธ ์ ์๋ค
* ์ญ์ ํ ๊ฒ์ ๋๋๋ฆด ์ ์๋ค.(DB์ ๋ฐ์๋๊ธฐ ์ ๊น์ง๋)
* ๋ฐ์ดํฐ๋ ์ง์์ง์ง๋ง ํ
์ด๋ธ ์ฉ๋์ ์ค์ด๋ค์ง ์๋๋ค
4) TCL : ํธ๋์ญ์
์ ์ ์ดํ๊ธฐ ์ํ ์ธ์ด
* ํธ๋์ญ์
(Transaction)์ด๋..?
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ฅผ ๋ณํ์ํค๊ธฐ ์ํด์ ์ํํ๋ ์์
์ ๋จ์
๊ณ ๋ฆฝ์ฑ, ์์์ฑ, ์ง์์ฑ, ์ผ๊ด์ฑ์ ํน์ง์ ๊ฐ์ง
๊ณ ๋ฆฝ์ฑ : ํธ๋์ญ์
์ด ์คํ๋๋ ๋์ ๋ค๋ฅธ ํธ๋์ญ์
์ ์ํฅ์ ๋ฐ์ ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด์ ์๋๋ค
์์์ฑ : ํธ๋์ญ์
์์ ์ ์๋ ์ฐ์ฐ์ ๋ชจ๋ ์ฑ๊ณต์ ์ผ๋ก ์คํ๋๋์ง ์๋๋ฉด ์ ํ ์คํ๋์ง ์์ ์ํ๋ก ์์ด์ผ ํ๋ค
์ง์์ฑ : ํธ๋์ญ์
์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋๋ฉด ํด๋น ํธ๋์ญ์
์ด ๊ฐฑ์ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ด์ฉ์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋๋ค
์ผ๊ด์ฑ : ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ฉ์ ์๋ชป๋ ์ ์ด ์๋ค๋ฉด ํธ๋์ญ์
์ํ ํ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ด์ฉ์ ์๋ชป์ด ์์ผ๋ฉด ์๋๋ค.
COMMIT ์ดํ : ์ด์ ๋ฐ์ดํฐ๋ ์์ํ ์ฌ๋ผ์ง๊ณ ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ DB์ ๋ฐ์๋๋ค
์์ ๋ฌธ์ 1)
=> ์ ๋ต!! 250 (ROLLBACK ํ ๋๋ ๊ฐ์ฅ ์ต์ ์ SavePoint๋ก ๋์๊ฐ๋๋ค!!)
์์ ๋ฌธ์ 2)
=> ์ ๋ต!! 10, 50, 30
COMMIT๊ณผ ROLLBACK ํจ๊ณผ
๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ ์ ์๋ค
์๊ตฌ์ ์ธ ๋ณ๊ฒฝ ์ ๋ฐ์ดํฐ์ ๋ํ ๋ณ๋์ฌํญ์ ํ์ธํ ์ ์๋ค
๋
ผ๋ฆฌ์ ์ฐ๊ด์ฑ ์๋ ์์
์ ๊ทธ๋ฃนํํ์ฌ ์ฒ๋ฆฌํ ์ ์๋ค
**๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์ด๋?
: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ์ ํ์ฑ, ์ผ๊ด์ฑ์ ์ ์งํ๊ณ ๋ณด์ฆํ๋ ๊ฒ
- ์ ํ์ฑ : ์ค๋ณต์ด๋ ๋๋ฝ์ด ์๋ ์ํ(๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ๋ฒ ์ ์ฅ x)
- ์ผ๊ด์ฑ : ์์ธ๊ณผ ๊ฒฐ๊ณผ์ ์๋ฏธ๊ฐ ์ฐ์์ ์ผ๋ก ๋ณด์ฅ๋์ด ๋ณํ์ง ์๋ ์ํ
** ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด ์ด๋?
: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ํ์ฑ, ์ผ๊ด์ฑ(๋ฌด๊ฒฐ์ฑ)์ ๋ณด์ฅํ๊ธฐ ์ํด ์ ์ฅ, ์ญ์ , ์์ ๋ฑ์ ์ ์ฝํ๊ธฐ ์ํ ์กฐ๊ฑด
๊ฐ์ฒด ๋ฌด๊ฒฐ์ฑ (๊ธฐ๋ณธํค ์ ์ฝ) - ํ
์ด๋ธ์ ๊ธฐ๋ณธํค๋ฅผ ์ง์ ํ๊ณ ๊ทธ์ ๋ฐ๋ฅธ ๋ฌด๊ฒฐ์ฑ์ ์ง์ผ์ผ ํ๋ค. - ๊ธฐ๋ณธํค์๋ NULL ๊ฐ์ด ์ฌ ์ ์์ - ๊ธฐ๋ณธํค๋ ํ
์ด๋ธ ๋ด์ ์ค์ง ํ๋์ ๊ฐ๋ง ์กด์ฌํด์ผ ํ๋ค. (๋์ผํ ๊ธฐ๋ณธํค๋ฅผ ๊ฐ์ง ๋ ์ฝ๋๊ฐ ํ
์ด๋ธ ๋ด์ ์ฌ๋ฌ๊ฐ์ผ ์ ์๋ค.)
์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ (์ธ๋ํค ์ ์ฝ) - ์ธ๋ํค ๊ฐ์ NULL์ด๊ฑฐ๋ ์ฐธ์กฐํ๋ ๋ฆด๋ ์ด์
์ ๊ธฐ๋ณธํค ๊ฐ๊ณผ ๋์ผํด์ผ ํจ ([๊ฒฐ์ ]์์ [๊ณ ๊ฐ]์ ํ์๋ฒํธ๋ฅผ ์ฐธ์กฐํ๋ฉด, ์๋ ํ์๋ฒํธ๋ง ๊ฐ์ ธ์์ผ ํจ)
๋๋ฉ์ธ ๋ฌด๊ฒฐ์ฑ : ์์ฑ๊ฐ์ ์์ฑ์ ๋๋ฉ์ธ ์ํ ๊ฐ(์ด๋ฑํ๊ต ํ๋
1 ~ 6)
๊ณ ์ ๋ฌด๊ฒฐ์ฑ : UNIQUE ์กฐ๊ฑด์ด ์ฃผ์ด์ง ์ปฌ๋ผ์ ์์ฑ๊ฐ์ ์๋ก ๋ฌ๋ผ์ผ ํจ
NULL ๋ฌด๊ฒฐ์ฑ : NOT NULL๋ก ์ ํํ๋ฉด NULL์ด ์์ ์๋จ
5) DML_ SELECT(๋ฐ์ดํฐ ์กฐํ)
SELECT ์กฐํ ๋์(์ปฌ๋ผ๋ช
)FROM ํ
์ด๋ธ ๋ช
WHERE ์กฐ๊ฑด๋ฌธ GROUP BY ์ง๊ณ๊ธฐ์ค ์ปฌ๋ผ๋ช
HAVING grouping๋ ํ ์ํ ๊ธฐ๋ฐ์ ์กฐ๊ฑด๋ฌธ ORDER BY ์ปฌ๋ผ๋ช
์์ ๋ฌธ์ 1)
=> ์ ๋ต!! 3
๋ฌธ์ํ ํจ์
TRIM๊ณผ REPLACE ๋น๊ต!!
TRIM ํจ์
- RTRIM (๋ฌธ์์ด, ์ ๊ฑฐ ๋์)
- LTRIM (๋ฌธ์์ด, ์ ๊ฑฐ ๋์)
- TRIM (์ ๊ฑฐ ๋์ FROM ๋ฌธ์์ด)
++) ์ฟผ๋ฆฌ๋ฌธ
SELECT RTRIM ('XXSQLXX', 'X')
.TRIM ( 'X' FROM 'XXSQLXX')
FROM DUAL;
REPLACE ํจ์
- TRIM (์ ๊ฑฐ ๋์ FROM ๋ฌธ์์ด)
- REPLACE (๋ฌธ์์ด, ์ ๊ฑฐ ๋ฌธ์์ด, [๋์ฒด ๋ฌธ์์ด])
++) ์ฟผ๋ฆฌ๋ฌธ
SELECT TRIM ('X' FROM 'XXSQLXX')
.REPLACE('XXSQLXX', 'X')
.REPLACE('XXSQLXX', 'X', 'Y')
FROM DUAL;
์์ ๋ฌธ์ 2)
=> ์ ๋ต!! SELECT ํ์์ฝ๋, RTRIM(์ฐ๋ น๋, '๋'), UPPER(์ด๋ฆ) FROM C_INFO;
์ซ์ํ ํจ์
์์ ๋ฌธ์ 3)
=> ์ ๋ต!! TO_CHAR(SYSDATE -1, 'YYYYMMDD')
*DUAL
- ๋์ผ ํ
์ด๋ธ์ ์ค๋ผํด์ ์กด์ฌํ๋ ๊ธฐ๋ณธ ํ
์ด๋ธ๋ก, ํ๋์ ์ด๋ก๋ง ์ด๋ค์ ธ์์
- ์ค๋ ๋ ์ง๋ฅผ ๊ตฌํ๊ฑฐ๋ ๊ฐ๋จํ ๊ณ์ฐ์ ํ๋ ๋ฑ์ ์ฌ์ฉํ๊ธฐ ์ ํฉ
** SYSDATE
- SQL์ ์์
ํ๋ ์์ ์ ๋ ์ง์ ์๊ฐ์ ์๋ ค์ฃผ๋ฉฐ, -1์ ํ ๊ฒฝ์ฐ ์ ๋ ์ ๋ ์ง๊ฐ์ด ์ถ๋ ฅ๋๋ค
- ๋ ์ง๋ฅผ ์กฐํํ๋ค๊ณ ํ์์ผ๋ฉฐ TO_CHAR์ ํตํด ํ๋ณํ์ ํ์ฌ ๋ ์ง๋ง ๋จ๊ธด๋ค.
DECODE & CASE WHEN
* DECODE(= IF๋ฌธ)
- DECODE (๊ฐ1, ๊ฐ2, ์ฐธ์ผ ๋ ์ถ๋ ฅ ๊ฐ, ๊ฑฐ์ง์ผ ๋ ์ถ๋ ฅ ๊ฐ)
ex) .DECODE(col1, 'KATE', '๋ณธ์ธ', '๋ค๋ฅธ์ฌ๋')
* CASE WHEN(= ์ฌ๋ฌ ์ผ์ด์ค๋ฅผ ํฌํจํ๋ IF ๋ฌธ)
- ๋จ์ผ ์กฐ๊ฑด : CASE WHEN ์กฐ๊ฑด THEN ์กฐ๊ฑด์ด ์ฐธ์ผ ๋ ๊ฒฐ๊ณผ ELSE ๊ฑฐ์ง์ผ ๋ ๊ฒฐ๊ณผ END
- ๋ค์ค ์กฐ๊ฑด :
CASE WHEN ์กฐ๊ฑด๋ฌธ1 THEN ๊ฒฐ๊ณผ๊ฐ1
WHEN ์กฐ๊ฑด๋ฌธ2 THEN ๊ฒฐ๊ณผ๊ฐ2
....
WHEN ์กฐ๊ฑด๋ฌธn THEN ๊ฒฐ๊ณผ๊ฐn
ELSE ๊ฒฐ๊ณผ๊ฐ n+1
END
ex) CASE WHEN col1 < 10 THEN 'ํ์๋ฆฌ ์' (CASE col1 WHEN ๋ ๊ฐ๋ฅ)
WHEN col1 BETWEEN 10 AND 99 THEN '๋์๋ฆฌ ์'
ELSE '์ธ์๋ฆฌ ์'
END
*๋จ, col1์๋ ์ ์ํ์ผ๋ก 1000๋ฏธ๋ง์ ์ซ์๋ง ๋ค์ด๊ฐ ์์์ ๊ฐ์ ํจ
WHERE ์กฐ๊ฑด๋ฌธ
์กฐ๊ฑด์ ์ง์ ํด์ ํ
์ด๋ธ์์ ์กฐ๊ฑด์ ๋ง๋ ๋ ์ฝ๋(ํ)๋ง ์ถ๋ ฅํ๊ธฐ ์ํ ๊ตฌ๋ฌธ
๋น๊ต์ฐ์ฐ์, ๋
ผ๋ฆฌ์ฐ์ฐ์ ๋ฑ '์ฐ์ฐ์'๋ฅผ ํตํด ์กฐ๊ฑด์ ๋ถ์ฌํจ
'์กฐ๊ฑด'์ ์ง์ ํด์ฃผ๋ ๊ฒ์ด๋ฏ๋ก true or false์ ๊ฒฐ๊ณผ๊ฐ ๋์ด(์กฐ๊ฑด์ ์ถฉ์กฑํ๋ true์ธ ๋ ์ฝ๋๋ค๋ง ์ถ๋ ฅ)
CASE WHEN col1 < 10 THEN 'ํ์๋ฆฌ์' WHEN col1 BETWEEN 10 AND 99 THEN '๋์๋ฆฌ ์' ELSE '์ธ์๋ฆฌ ์' END _ ; SELECT * FROM C_INFOWHERE NAME = '๊นํธํธ' AND PHONE LIKE %1234'
์ฐ์ฐ์ ์ข
๋ฅ
๋น๊ต ์ฐ์ฐ์
=, >, >=, <, <= - ๋ถ์ ๋น๊ต ์ฐ์ฐ์ : !=, ^=, <> : ๊ฐ์ง ์์ ๊ฒ์ ์กฐํ WHERE col1 <> 1
๋
ผ๋ฆฌ ์ฐ์ฐ์
AND, OR, NOT - AND : ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํด์ผ ํจ - OR : ์กฐ๊ฑด์ ํ๋๋ผ๋ ๋ง์กฑํ๋ฉด ์ฐธ - NOT : ์ฐธ์ด๋ฉด ๊ฑฐ์ง์ผ๋ก, ๊ฑฐ์ง์ด๋ฉด ์ฐธ์ผ๋ก ๋ฐ๊ฟ WHERE NOT col1 = 1 (WHERE col1 <> 1๊ณผ ๊ฐ์ ์๋ฏธ) WHERE NOT col1 > 10(WHERE col1 <= 10๊ณผ ๊ฐ์ ์๋ฏธ)
BETWEEN a AND b
a์ B ์ฌ์ด์ ๊ฐ์ด ์๋์ง ํ๋จ WHERE col1 BETWEEN 10 AND 99 - WHERE col1 >= 10 AND col1 <= 99์ ๋์ผํจ
์ฐ์ฐ์ ์ข
๋ฅ - NULL ํ๋จ
IS NULL
NULL์ธ์ง ํ๋จ, NULL์ผ ๊ฒฝ์ฐ TRUE
IS NOT NULL
NULL์ด ์๋ ๊ฒฝ์ฐ TRUE
NULL์ =, <>์ผ๋ก ๋น๊ต๋ ์ ์๊ณ , IS, IS NOT์ผ๋ก๋ง ๋น๊ต ๋๋ค
WHERE A.col IS NULL (0) WHERE A.col IS NOT NULL (0) WHERE A.col = NULL (X) WHERE A.col <> NULL (X)
์์ ๋ฌธ์ 4)
=> ์ ๋ต!! NVL or ISNULL or IFNULL (๋จ, ํํ์ ๋๊ฐ(์๋
, 9999)์ ๋ฐ์ดํฐ ํ์
์ด ๊ฐ์์ผ ํจ)
์ฐ์ฐ์ ์ข
๋ฅ - IN
IN(x, y, z....)
x, y, z ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋ ๋ชฉ๋ก ๋ด ๊ฐ ์ค ์ด๋ ํ๋๋ผ๋ ์ผ์นํ๋ฉด ๋๋ค.(or ์กฐ๊ฑด)
NOT IN(x, y, z....)
x, y, z ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋ ๋ชฉ๋ก ๋ด ๊ฐ ์ค ์ด๋ ํ๋๋ผ๋ ์ผ์นํ๋ฉด ์๋๋ค.(and ์กฐ๊ฑด)
WHERE A.COL IN (1, 2, 3)์ ๋ง์กฑํ๋ ค๋ฉด... A.col = 1์ด ์ฐธ์ด๊ฑฐ๋(or) A.col = 2์ด ์ฐธ์ด๊ฑฐ๋(or) A.col = 3์ด ์ฐธ์ด์ด์ผ ํ๋ค => OR ์กฐ๊ฑด WHERE A,COL NOT IN (1, 2, 3)์ ๋ง์กฑํ๋ ค๋ฉด... A.col <> 1 ์ด ์ฐธ์ด๊ณ (and) A.col <> 2 ์ด ์ฐธ์ด๊ณ (and) A.col <> 3 ์ด ์ฐธ์ด์ด์ผ ํ๋ค => AND ์กฐ๊ฑด ex) SELECT * FROM C_INFO WHERE AGE IN (20, 30, 40); >> ๋์ด๊ฐ 20์ด์ด๊ฑฐ๋ 30์ด์ด๊ฑฐ๋ 40์ด์ธ ๊ณ ๊ฐ์ ํ์์ ๋ณด๋ง ์ถ๋ ฅ
**) NULL ์ด IN() ํน์ NOT IN() ์์ ํฌํจ ๋๋ค๋ฉด??
IN(1, 2, NULL) >> IN์ OR ์กฐ๊ฑด์ด๋ฏ๋ก 1๋๋ 2๋ฅผ ๋ง์กฑํ๋ฉด TRUE ๊ฐ๋ฅ
NOT IN(1, 2, NULL) >> NOT IN์ AND ์กฐ๊ฑด์ด๋ฏ๋ก ํญ์ FALSE์ธ NULL์ด ํฌํจ๋์ด ์์ผ๋ฏ๋ก ํญ์ FALSE ๋ฅผ ์ถ๋ ฅ
๋ฌธ์์ด ์กฐ๊ฑด๋ฌธ ์ฐ์ฐ์
A LIKE B
A์ ๋ํ์ฌ B์ ์ ์ฌํ ๋ฌธ์์ด์ ์ฐพ์์ค
%
๋ฌธ์ 0๊ฐ ์ด์์ด ์กด์ฌํ๋ค๋ ์๋ฏธ
_
๋ฌธ์ ํ๊ฐ
1. %๋ ๋ฌธ์๊ฐ ํด๋น ์์น์ 0๊ฐ ์ด์์ด ์กด์ฌํ๋ค๋ ์๋ฏธ
ex) WHERE name LIKE '%k%' ์ผ ๊ฒฝ์ฐ ์กฐ๊ฑด์ ํด๋นํ๋ name์ k๋ผ๋ ๋จ์ด๋ฅผ ํฌํจ๋ง ํ๋ฉด ๋จ
key : k ์์ ๋ฌธ์ 0๊ฐ (True)
chuck : k ๋ค์ ๋ฌธ์ 0๊ฐ (True)
bike : k ์๋ค์ ๋ฌธ์ ์กด์ฌ (True)
k : k ์๋ค์ ๋ฌธ์ 0๊ฐ (True)
2, k๊ฐ ์๋์ ์๋ ๊ฒฝ์ฐ๋ฅผ ์ฐพ์ผ๋ ค๋ฉด
>> LIKE 'k%k' (์๋ ๋ฌธ์์ด์ ๊ณ ์ ์ด๊ณ , ์ค๊ฐ์ 0~n๊ฐ์ ๋ฌธ์๊ฐ ์กด์ฌ๊ฐ๋ฅ)
3. ํน์ ํ ์์น์ ๋ฌธ์ ๊ฐ์๋ฅผ ์ ์ ํ๊ณ ์ถ์ผ๋ฉด
>> LIKE 'k_y'
์์ ๋ฌธ์ 5)
=> ์ ๋ต!! LIKE '%ki%'
๐ช ์ถ๊ฐ ์ฌ๋ก- ํด๋น ์๋ฆฌ์ ๋ฌธ์๊ฐ 0๊ฐ ์ด์ ์กด์ฌํ๋ค๋ ์๋ฏธ ex) 'ki%' : ki๋ก ์์ํ๋ ๋ฌธ์ >> kind, kite ex) '%ce' : 'ce'๋ก ๋๋๋ ๋ฌธ์ >> choice, chance ์ค๋ฌด) '202309%' : '202309'๋ก ์์ํ๋ ๋ฌธ์์ด(ex. 2023๋
9์)- ๋ฌธ์ ํ๊ฐ ex) WHERE ๋จ์ด LIKE 'ki__' : ki๋ค์ ๋ ์๋ฆฌ๊ฐ ๋ ์๋ row ์ถ๋ ฅ >> kind, kite ex) WHERE ๋จ์ด LIKE '__ce' : ce๋ก ๋๋๋ 6์๋ฆฌ ๋ฌธ์ >> choice, chance
Subquery
: ํ๋์ SQL ๋ฌธ์ ํฌํจ๋์ด์๋ ๋ ๋ค๋ฅธ SQL ๋ฌธ์ ์๋ฏธํจ
SELECT COUNT(*) FROM ๊ฒฐ์ WHERE ํ์๋ฒํธ NOT IN (SELECT ํ์๋ฒํธ FROM ํ์)
SELECT์ , FROM์ , WHERE์ , HAVING์ , ORDER BY์ ๋ฑ์์ ์ฌ์ฉ ๊ฐ๋ฅ
๊ดํธ๋ก ๊ฐ์ธ์ ์ฌ์ฉํด์ผ ํจ, ์ธ๋ฏธ์ฝ๋ก ์ฌ์ฉํ์ง ์์
์๋ธ์ฟผ๋ฆฌ๋ ๋จ์ผํ ๋๋ ๋ณต์ํ ๋น๊ต์ฐ์ฐ์์ ํจ๊ป ์ฌ์ฉ ๊ฐ๋ฅ
์๋ธ์ฟผ๋ฆฌ๋ AS๋ก ๋ณ์นญ ์ง์ ์ด ๊ฐ๋ฅ (FROM ์ ์ ์ฌ์ฉ๋๋ฉด ๋ณ์นญ ์ง์ ํ์)
์์น์ ๋ฐ๋ฅธ ์๋ธ์ฟผ๋ฆฌ ๋ช
์นญ
์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ : SELECT ์ ์์ ์ฌ์ฉํ๋ ์๋ธ์ฟผ๋ฆฌ๋ก, ๊ฒฐ๊ณผ๋ ํ๋์ ํ์ด์ด์ผ๋ง ํ๋ค SELECT *, (SELECT ๋ถ์๋ช
FROM ๋ถ์ WHERE ๋ถ์,๋ถ์๋ฒํธ = ์ง์.๋ถ์๋ฒํธ) AS ์์๋ถ์ FROM ์ง์ ;
์ธ๋ผ์ธ๋ทฐ : FROM ์ ๋ด์ ์ฐ์ฌ์ง ์๋ธ์ฟผ๋ฆฌ SELECT * FROM (SELECT * FROM C_INFO WHERE name LIKE '%a%') AS T ;
๋ค์คํ ์ฐ์ฐ์
๋น๊ต ์ฐ์ฐ์
=, >, >=, <, <=, !=, ^=, <> SELECT ๋ ์ง, ๋งค์ถ์ด์ก, ๊ฒฐ์ ๊ฑด์ FROM ๋งค์ถ WHERE ๋งค์ถ์ด์ก >= (SELECT AVG(๋งค์ถ ์ด์ก) FROM ๋งค์ถ WHERE SUBSTR(๋ ์ง, 1.6) = '202309');
๋ค์คํ ์ฐ์ฐ์
- IN : ๋ฉ์ธ ์ฟผ๋ฆฌ์ ๋น๊ต๋์์ด ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ค์์ ํ๋๋ผ๋ ์ผ์น ํ๋ฉด ์ฐธ - EXISTS : ๋ฉ์ธ ์ฟผ๋ฆฌ์ ๋น๊ต๋์์ด ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ค์์ ๋ง์กฑํ๋ ๊ฐ์ด ํ๋๋ผ๋ ์กด์ฌ ํ๋ฉด ์ฐธ => ๋น๊ต์ฐ์ฐ์๋ ๊ฐ์ด ์ฌ์ฉ๋์ง ์์ - ALL : ๋ฉ์ธ์ฟผ๋ฆฌ์ ๋น๊ต๋์์ด ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ์ ๋ชจ๋ ๊ฐ์ด ์ผ์น ํ๋ฉด ์ฐธ - ANY , SOME : ๋ฉ์ธ์ฟผ๋ฆฌ์ ๋น๊ต๋์์ด ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ ์ค ํ๋ ์ด์์ด ์ผ์น ํ๋ฉด ์ฐธ => =, >, < ๋ฑ ๋น๊ต์ฐ์ฐ์๋ ๊ฐ์ด ์ฌ์ฉ (ex. col1 = ALL(a, b, c) a, b, c๋ชจ๋ ๊ฐ์ ๊ฐ์ง๋ col1๋ฐํ)
์์ ๋ฌธ์ 6)
=> ์ ๋ต!!
SELECT ์ด๋ฆ FROM ์ฌ์ฅํ๋ณด WHERE ์
์ฌ๋
๋ < ALL (SELECT ์
์ฌ๋
๋ FROM ์์)
์์ ๋ฌธ์ 7)
๋ค์ ๋ณด๊ธฐ ์ค ์๋ธ์ฟผ๋ฆฌ์ ๋ค์คํ ์ฐ์ฐ์์ ๋ํ ์ค๋ช
์ผ๋ก ์ณ์ ๊ฒ์?
1. ์๋ธ์ฟผ๋ฆฌ์์๋ ์ ๋ ฌ์ ์ํํ๋ ORDER BY๋ฅผ ์ฌ์ฉํ ์ ์๋ค. (X)
>> ์ฌ์ฉํ ์ ์๋ค
2. ์ฌ๋ฌ ํ์ ๋ฐํํ๋ ์๋ธ์ฟผ๋ฆฌ๋ ๋จ์ผ ํ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค (X)
>> ๋ค์ค ํ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค
3. ๋ฉ์ธ ์ฟผ๋ฆฌ์์ ์๋ธ์ฟผ๋ฆฌ์ ์ปฌ๋ผ์ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์๋ค (X)
>> ๋ฉ์ธ ์ฟผ๋ฆฌ์์๋ SELECT ๋์ง ์์ ์๋ธ์ฟผ๋ฆฌ์ ์ปฌ๋ผ์ ์ฌ์ฉํ ์ ์์
>> ์๋ธ ์ฟผ๋ฆฌ ๋ด๋ถ์์๋ ๋ฉ์ธ ์ฟผ๋ฆฌ์ ์ปฌ๋ผ์ ์ฌ์ฉํ ์ ์์
4. EXIST๊ฐ ๋ฐํํ๋ ๊ฒฐ๊ณผ๊ฐ์ True ํน์ False ์ด๋ค (0)
>> ๊ฒฐ๊ณผ๊ฐ ํ๋๋ผ๋ ์กด์ฌํ๋ฉด ์ฐธ
ex. WHERE EXISTS(SELECT 1 FROM WHERE ๊ฑฐ์ฃผ์ง = '์์ธ')
WITH์ : ์๋ธ์ฟผ๋ฆฌ๋ฅผ WITH์ ๋ก ๋ง๋ค์ด์ ์ฌ์ฉํด๋ณด๊ธฐ
SELECT * FROM (SELECT * FROM C_INFO WHERE name LIKE '%a%') AS T; WITH T AS ( SELECT * FROM C_INFO WHERE name LIKE '%a%') , T2 AS (SELECT _ FROM T) SELECT * FROM T; * WITH ํ
์ด๋ธ๋ช
AS (์ฟผ๋ฆฌ๋ฌธ) SELECT _ FROM ํ
์ด๋ธ๋ช
* ์์ํ
์ด๋ธ(์ค๊ฐ๊ฒฐ๊ณผ ์ ์ฅ์ฉ ๋ฑ ์์์ ์ผ๋ก ์ฌ์ฉํ๋ ํ
์ด๋ธ)์ด๋ ๋ทฐ(VIEW)์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅํจ * ์ฟผ๋ฆฌ๋ฌธ ๋ด์์ ๋ฐ๋ณตํด์ ๋์ผํ ํ
์ด๋ธ์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ WITH ์ ๋ก ๋ฐ๋ณต ์ฟผ๋ฆฌ๋ฌธ์ ์ค์ฌ ํ
์ด๋ธ ์์ธ์ค๋ฅผ ์ค์ด๊ณ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ๋์ผ ์ ์์
View ํ
์ด๋ธ์ด๋?
์ผ์ข
์ ๊ฐ์ํ
์ด๋ธ๋ก์ ์ค์ ๋ฐ์ดํฐ๊ฐ ํ๋์จ์ด์ ์ ์ฅ๋๋ ๊ฒ์ ์๋๋ค
์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๊ณ SQL๋ง ์ ์ฅํ๋ค(Table์ ์ค์ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๋ค) => ์ฆ, ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ๋ง ํ๋ ํ
์ด๋ธ
ํ
์ด๋ธ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋๋๋ผ๋ ๋
๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๋ค
VIEW ํ
์ด๋ธ์ ์ฌ์ฉํ๋ ์ด์
์ฌ์ฉ์์ ํธ์๋ฅผ ์ํด ์ฌ์ฉ => ๋ณต์กํ ์ฟผ๋ฆฌ๋ฌธ์ด ์์ผ๋ฉด ๋งค๋ฒ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ๊ธฐ ๋ณด๋ค๋ ํด๋น ์ฟผ๋ฆฌ๋ฌธ์ View ํ
์ด๋ธ๋ก ๋ง๋ค์ด๋๊ณ ๊ด๋ฆฌํ๊ณ ์กฐํํ๋ ๊ฒ์ด ํธํ๋ฏ๋ก
๋ณด์๊ด๋ฆฌ๋ฅผ ์ํด ์ฌ์ฉ
์์์ ์ธ ์์
์ ์ํด ์ฌ์ฉ\
์์ ๋ฌธ์ 8)
=> ์ ๋ต!!
WITH T AS ( SELECT * FROM C_INFO WHERE NAME LIKE '%a%' ) SELECT count (*) FROM T ;
์ง๊ณํจ์
COUNT(*), COUNT(exp)
count(*) : NULL ํฌํจ, count(exp) : NULL ์ ์ธ
SUM( [DISTINCT | ALL] exp )
ํฉ๊ณ
AVG( [DISTINCT | ALL] exp )
ํ๊ท
MAX( [DISTINCT | ALL] exp )
์ต๋๊ฐ
MIN( [DISTINCT | ALL] exp )
์ต์๊ฐ
STDDEV( [DISTINCT | ALL] exp )
ํ์คํธ์ฐจ
VARIAN( [DISTINCT | ALL] exp )
๋ถ์ฐ
**) NULL๊ฐ์ ๋ํ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ ๋ชจ๋ NULL์ด๋ฉฐ ํต๊ณ์ ์ง๊ณํจ์๋ฅผ ์ฐ์ฐํ ๋, NULL์ ์ ์ธํ๊ณ ๊ณ์ฐํ๋ค
ex) NULL / 10 = NULL
์์ ๋ฌธ์ 9)
C_INFO์์ ํ๊ท ์ฐ๋ น์ด 30๋์ธ ์ฑ๋ณ๊ณผ ํด๋น ์ฑ๋ณ์ ํ๊ท ์ฐ๋ น์ ์ถ๋ ฅํ๋ SQL์ ์์ฑํ์์ค.
=> ์ ๋ต!!
SELECT ์ฑ๋ณ, AVG(์ฐ๋ น)
FROM C_INFO
GROUP BY ์ฑ๋ณ
HAVING AVG(์ฐ๋ น) >= 30 AND AVG(์ฐ๋ น) < 40;
์์ ๋ฌธ์ 10)
FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY