sqld 2๊ณผ๋ชฉ ์ ๋ฆฌ(SQL ๊ธฐ๋ณธ)
SQL์ ์ ์
SQL์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์ ์ ์ผ๋ก ์์ธ์ค ํ ์ ์๋ ์ธ์ด๋ก,
๋ฐ์ดํฐ๋ฅผ ์ ์ํ๊ณ => DDL
์กฐ์ํ๋ฉฐ => DML
์กฐ์ํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฉํ๊ฑฐ๋ ์ทจ์ํ ์ ์๊ณ => TCL
์ ๊ทผ ๊ถํ์ ์ ์ดํ๋ ์ฒ๋ฆฌ๋ค๋ก ๊ตฌ์ฑ๋๋ค => DCL
1) DCL : ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์์๊ฒ ๊ถํ์ ๋ถ์ฌ / ํ์ํ๋ ์ธ์ด
GRANT :๊ถํ์ ์ค
REVOKE : ๊ถํ์ ํ์
**์ถ์ ๋น๋๊ฐ ๋ฎ์...
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 ์ ์ฝ์กฐ๊ฑด๋ช ;
++) 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)์ด๋..?
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ฅผ ๋ณํ์ํค๊ธฐ ์ํด์ ์ํํ๋ ์์ ์ ๋จ์
- ๊ณ ๋ฆฝ์ฑ, ์์์ฑ, ์ง์์ฑ, ์ผ๊ด์ฑ์ ํน์ง์ ๊ฐ์ง
- ๊ณ ๋ฆฝ์ฑ : ํธ๋์ญ์ ์ด ์คํ๋๋ ๋์ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ํฅ์ ๋ฐ์ ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด์ ์๋๋ค
- ์์์ฑ : ํธ๋์ญ์ ์์ ์ ์๋ ์ฐ์ฐ์ ๋ชจ๋ ์ฑ๊ณต์ ์ผ๋ก ์คํ๋๋์ง ์๋๋ฉด ์ ํ ์คํ๋์ง ์์ ์ํ๋ก ์์ด์ผ ํ๋ค
- ์ง์์ฑ : ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋๋ฉด ํด๋น ํธ๋์ญ์ ์ด ๊ฐฑ์ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ด์ฉ์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋๋ค
- ์ผ๊ด์ฑ : ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ฉ์ ์๋ชป๋ ์ ์ด ์๋ค๋ฉด ํธ๋์ญ์ ์ํ ํ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ด์ฉ์ ์๋ชป์ด ์์ผ๋ฉด ์๋๋ค.
์์ ๋ฌธ์ 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 ํจ์
- 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_INFO
WHERE 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