728x90
๋ฐ˜์‘ํ˜•

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)์ด๋ž€..?

  •  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์˜ ๋‹จ์œ„
  • ๊ณ ๋ฆฝ์„ฑ, ์›์ž์„ฑ, ์ง€์†์„ฑ, ์ผ๊ด€์„ฑ์˜ ํŠน์ง•์„ ๊ฐ€์ง
  1. ๊ณ ๋ฆฝ์„ฑ :  ํŠธ๋žœ์žญ์…˜์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ์˜ํ–ฅ์„ ๋ฐ›์•„ ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด์„  ์•ˆ๋œ๋‹ค
  2. ์›์ž์„ฑ : ํŠธ๋žœ์žญ์…˜์—์„œ ์ •์˜๋œ ์—ฐ์‚ฐ์€ ๋ชจ๋‘ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋˜๋˜์ง€ ์•„๋‹ˆ๋ฉด ์ „ํ˜€ ์‹คํ–‰๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์žˆ์–ด์•ผ ํ•œ๋‹ค
  3. ์ง€์†์„ฑ : ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜์ด ๊ฐฑ์‹ ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋‚ด์šฉ์€ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ๋œ๋‹ค
  4. ์ผ๊ด€์„ฑ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์šฉ์— ์ž˜๋ชป๋œ ์ ์ด ์—†๋‹ค๋ฉด ํŠธ๋žœ์žญ์…˜ ์ˆ˜ํ–‰ ํ›„์—๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋‚ด์šฉ์— ์ž˜๋ชป์ด ์žˆ์œผ๋ฉด ์•ˆ๋œ๋‹ค.

COMMIT ์ดํ›„ : ์ด์ „ ๋ฐ์ดํ„ฐ๋Š” ์˜์›ํžˆ ์‚ฌ๋ผ์ง€๊ณ  ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋Š” DB์— ๋ฐ˜์˜๋œ๋‹ค

 

 

์˜ˆ์‹œ ๋ฌธ์ œ1)

 

=> ์ •๋‹ต!! 250 (ROLLBACK ํ• ๋–„๋Š” ๊ฐ€์žฅ ์ตœ์‹ ์˜ SavePoint๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค!!)

 

 

์˜ˆ์‹œ ๋ฌธ์ œ2)

 

=> ์ •๋‹ต!!  10, 50, 30

 

 

COMMIT๊ณผ ROLLBACK ํšจ๊ณผ

 

  • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค
  • ์˜๊ตฌ์ ์ธ ๋ณ€๊ฒฝ ์ „ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋ณ€๋™์‚ฌํ•ญ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๋…ผ๋ฆฌ์  ์—ฐ๊ด€์„ฑ ์žˆ๋Š” ์ž‘์—…์„ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค

**๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์ด๋ž€?

: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•์„ฑ, ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ๋ณด์ฆํ•˜๋Š” ๊ฒƒ

- ์ •ํ™•์„ฑ : ์ค‘๋ณต์ด๋‚˜ ๋ˆ„๋ฝ์ด ์—†๋Š” ์ƒํƒœ(๊ฐ™์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ์ €์žฅ x)

- ์ผ๊ด€์„ฑ : ์›์ธ๊ณผ ๊ฒฐ๊ณผ์˜ ์˜๋ฏธ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ๋ณด์žฅ๋˜์–ด ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ

 

** ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด ์ด๋ž€?

: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ •ํ™•์„ฑ, ์ผ๊ด€์„ฑ(๋ฌด๊ฒฐ์„ฑ)์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ €์žฅ, ์‚ญ์ œ, ์ˆ˜์ • ๋“ฑ์„ ์ œ์•ฝํ•˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด

  1. ๊ฐœ์ฒด ๋ฌด๊ฒฐ์„ฑ(๊ธฐ๋ณธํ‚ค ์ œ์•ฝ) 
    - ํ…Œ์ด๋ธ”์€ ๊ธฐ๋ณธํ‚ค๋ฅผ ์ง€์ •ํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ฅธ ๋ฌด๊ฒฐ์„ฑ์„ ์ง€์ผœ์•ผ ํ•œ๋‹ค.
    - ๊ธฐ๋ณธํ‚ค์—๋Š” NULL ๊ฐ’์ด ์˜ฌ ์ˆ˜ ์—†์Œ
    - ๊ธฐ๋ณธํ‚ค๋Š” ํ…Œ์ด๋ธ” ๋‚ด์— ์˜ค์ง ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.
    (๋™์ผํ•œ ๊ธฐ๋ณธํ‚ค๋ฅผ ๊ฐ€์ง„ ๋ ˆ์ฝ”๋“œ๊ฐ€ ํ…Œ์ด๋ธ” ๋‚ด์— ์—ฌ๋Ÿฌ๊ฐœ์ผ ์ˆ˜ ์—†๋‹ค.)
  2. ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ(์™ธ๋ž˜ํ‚ค ์ œ์•ฝ)
    - ์™ธ๋ž˜ํ‚ค ๊ฐ’์€ NULL์ด๊ฑฐ๋‚˜ ์ฐธ์กฐํ•˜๋Š” ๋ฆด๋ ˆ์ด์…˜์˜ ๊ธฐ๋ณธํ‚ค ๊ฐ’๊ณผ ๋™์ผํ•ด์•ผ ํ•จ
    ([๊ฒฐ์ œ]์—์„œ [๊ณ ๊ฐ]์˜ ํšŒ์›๋ฒˆํ˜ธ๋ฅผ ์ฐธ์กฐํ•˜๋ฉด, ์žˆ๋Š” ํšŒ์›๋ฒˆํ˜ธ๋งŒ ๊ฐ€์ ธ์™€์•ผ ํ•จ)
  3. ๋„๋ฉ”์ธ ๋ฌด๊ฒฐ์„ฑ : ์†์„ฑ๊ฐ’์€ ์†์„ฑ์˜ ๋„๋ฉ”์ธ ์†ํ•œ ๊ฐ’(์ดˆ๋“ฑํ•™๊ต ํ•™๋…„ 1 ~ 6)
  4. ๊ณ ์œ  ๋ฌด๊ฒฐ์„ฑ : UNIQUE ์กฐ๊ฑด์ด ์ฃผ์–ด์ง„ ์ปฌ๋Ÿผ์˜ ์†์„ฑ๊ฐ’์€ ์„œ๋กœ ๋‹ฌ๋ผ์•ผ ํ•จ
  5. 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_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 

 

728x90
๋ฐ˜์‘ํ˜•

+ Recent posts