Notice
Recent Posts
Link
Today
Total
02-28 20:36
๊ด€๋ฆฌ ๋ฉ”๋‰ด

dingdong coding

[ Oracle ] ๊ธฐ๋ณธ ๊ฐœ๋… ๋ณธ๋ฌธ

๐ŸฌDB

[ Oracle ] ๊ธฐ๋ณธ ๊ฐœ๋…

๐Ÿถ ๊ฐœ๋ฐœ๊ฐœ๋ฐœ ๐Ÿพ 2022. 8. 22. 00:03

๋ฌธ์ž์—ด 

CHAR: ๊ณ ์ •๋œ ๊ธธ์ด์˜ ๋ฌธ์ž์—ด์„ ์ €์žฅ 

EX) CHAR(20) ์ง€์ • ํ›„ 'AA'๋งŒ ์ €์žฅํ•˜๋ฉด ๋‚˜๋จธ์ง€ ๊ณต๊ฐ„์€ ๊ณต๋ฐฑ์œผ๋กœ ์ฑ„์›€

VARCHAR2 : ๊ฐ€๋ณ€ ๋ฌธ์ž์—ด์„ ์ €์žฅ.

EX) VARCHAR2(20) ์ง€์ • ํ›„ 'AA'๋งŒ ์ €์žฅ. ์ฆ‰, ์ €์žฅ ๊ธธ์ด๊ฐ€ ๊ฐ€๋ณ€์ .

VARCHAR : VARCHAR2์™€ ๊ฐ™์ง€๋งŒ ์˜ค๋ผํด์—์„œ ํ–ฅ ํ›„ ๋‹ค๋ฅธ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ณต์‹๋ฌธ์„œ์— ์ ํ˜€์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋Œ€๋ถ€๋ถ„ VARCHAR2 ์‚ฌ์šฉ

 

[ ์ตœ๋Œ€ํฌ๊ธฐ ] 

CHAR : 2000Byte 

VARCHAR2, VARCHAR:4000๋ฐ”์ดํŠธ

 

์ˆซ์ž NUMBER

NUMBER(์œ ํšจ ์ž๋ฆฟ์ˆ˜, ์†Œ์ˆ˜์  ๊ฐฏ์ˆ˜)

NUMBER(5, 0) : ์†Œ์ˆ˜์ ์ด ์—†๋Š” ์ˆซ์ž 5์ž๋ฆฌ ๊นŒ์ง€ ์ €์žฅ

NUMBER(3, 2) : 123.45๋ฅผ ์ €์žฅ ์‹œ ์˜ค๋ฅ˜ 

์œ ํšจ์ˆซ์ž 3์ž๋ฆฌ .๊ธฐ์ค€ ์™ผ์ชฝ์— ์ˆซ์ž ํ•œ ๊ฐœ๋งŒ ํ‘œ์‹œ ๊ฐ€๋Šฅ, ์†Œ์ˆ˜์  2์ž๋ฆฌ๊นŒ์ง€ ํ‘œ์‹œ 

NUMBER(11, 2) : 1.345๊ฐ€ ๋“ค์–ด์˜ค๋ฉด 1.35๊ฐ€ ์ €์žฅ๋จ, ์ฆ‰ ๋ฐ˜์˜ฌ๋ฆผ 

 

๋‚ ์งœ DATE, TIMESTAMP

DATE: ๋‚ ์งœ, ์‹œ๊ฐ„, ๋ถ„, ์ดˆ๋ฅผ ์ €์žฅ (์ฃผ๋กœ ์‚ฌ์šฉ)

TIMESTAMP : ๋‚ ์งœ, ์‹œ๊ฐ„, ๋ถ„, ์ดˆ ์ดˆ๋‹จ์œ„ ์ดํ•˜ 9์ž๋ฆฌ๊นŒ์ง€ ์ €์žฅ (์‹œ๊ฐ„์ด ๋งค์šฐ ์ค‘์š”ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ)

 

๋ฌด๊ฒฐ์„ฑ

๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด: ์ œ์•ฝ์กฐ๊ฑด์€ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ

๋ฌด๊ฒฐ์„ฑ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•์„ฑ (์ผ๊ด€์„ฑ)

์ œ์•ฝ ์กฐ๊ฑด (Constraint) : NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK

 

* NOT NULL

ํ˜•์‹ : ์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž… NOT NULL

CREATE TABLE MYUSER (
	USERNO NUMBER(11,0),
	USERID VARCHAR2(20),
	USERPW VARCHAR(30) NOT NULL,
	NICKNAME VARCHAR(30),
	EMAIL VARCHAR(50) NULL,
	PRIMARY KEY (USERNO)
);

NOT NULL์€ ๋ฐ์ดํ„ฐ์‚ฝ์ž…(INSERT)์‹œ ๊ฐ’์„ ๊ผญ ๋„ฃ์–ด์ค˜์•ผ๋ฉ๋‹ˆ๋‹ค.

์ด์™€ ๋ฐ˜๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์ง€์•Š๊ฒŒ๋˜๋ฉด ์ฆ‰ NULL๊ฐ’์ด ๋“ค์–ด๊ฐ€๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„ ๋•Œ : ์—†์–ด์„œ๋Š” ์•ˆ๋˜๋Š” ์ค‘์š”ํ•œ ๊ฐ’์ผ ๊ฒฝ์šฐ.

 

* NULL์— ๊ด€ํ•ด 

INSERT์‹œ ๊ฐ’์„ ๋„ฃ์ง€ ์•Š๊ฒŒ๋˜๋ฉด NULL๋กœ์„œ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ ๋ฐ์ดํ„ฐ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์˜ค๋ผํด์—์„œ๋Š” ''๋นˆ ๊ณต๋ฐฑ, ๋นˆ ๊ฐ’์„ NULL๋กœ ์ธ์‹ํ•˜๋ฉฐ ''๋Š” =''๊ฐ€ ์•„๋‹Œ IS NULL๋กœ ์กฐํšŒํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

 

* PRIMARY KEY

ํ˜•์‹: PRIMARY KEY (์ปฌ๋Ÿผ๋ช…1, ์ปฌ๋Ÿผ๋ช…2, ์ปฌ๋Ÿผ๋ช…3,..)

CREATE TABLE MYUSER (
	USERNO NUMBER(11,0),
	USERID VARCHAR2(20),
	USERPW VARCHAR(30) NOT NULL,
	NICKNAME VARCHAR(30),
	EMAIL VARCHAR(50) NULL,
	PRIMARY KEY (USERNO)
);

- PRIMAY KEY ์ฆ‰ ๊ธฐ๋ณธํ‚ค๋Š” ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๋Š” ์ œ์•ฝ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค.

- ๊ธฐ๋ณธํ‚ค๋Š” ํ•œ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์— ํ•˜๋‚˜๋งŒ ์ƒ์„ฑ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.

- ๊ธฐ๋ณธํ‚ค๋กœ ์„ค์ •๋œ ์—ด์— ์ค‘๋ณต๋œ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์œผ๋ฉฐ NULL๊ฐ’ ๋˜ํ•œ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

* FOREIGN KEY 

ํ˜•์‹: ์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž… CONSTRAINT ์™ธ๋ž˜ํ‚ค ์ด๋ฆ„ REFERENCES ์ฐธ์กฐํ…Œ์ด๋ธ” ๋ช…(์ฐธ์กฐ ์ปฌ๋Ÿผ)

CREATE TABLE MYUSER (
	USERNO NUMBER(11,0),
	USERID VARCHAR2(20),
	USERPW VARCHAR(30) NOT NULL,
	NICKNAME VARCHAR(30),
	EMAIL VARCHAR(50) NULL,
	PRIMARY KEY (USERNO)
);

CREATE TABLE MARKET_CART(
	CARTNO NUMBER(11,0),
	USERNO NUMBER(11,0) CONSTRAINT FK_USERNO REFERENCES MYUSER(USERNO),
	PRIMARY KEY (CARTNO )
);

- FOREIGN KEY ์ฆ‰, ์™ธ๋ž˜ํ‚ค๋Š” ์ฐธ์กฐํ•˜๋Š” ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๋Š” ๊ฐ’๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์ œ์•ฝ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค.

- ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ์ปฌ๋Ÿผ์€ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธํ‚ค์ด๊ฑฐ๋‚˜ UNIQUE๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

* CHECK

ํ˜•์‹ : CONSTRAINT ์ œ์•ฝ๋ช… CHECK(์กฐ๊ฑด)

CREATE TABLE MYUSER (
	USERNO NUMBER(11,0),
	USERID VARCHAR2(20),
	USERPW VARCHAR(30) NOT NULL,	
	NICKNAME VARCHAR(30),
	EMAIL VARCHAR(50) NULL,
	BIRTHYEAR NUMBER(11,0) CONTSRAINTS (CH_BIRTHYEAR > 14),
	PRIMARY KEY (USERNO) CHECK(BIRTHYEAR)
);

- CHECK ์†Œ๊ด„ํ˜ธ ์•ˆ์˜ ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์‚ฝ์ž…๊ฐ€๋Šฅํ•œ ์ œ์•ฝ์กฐ๊ฑด

- ์กฐ๊ฑด์—๋Š” ๊ธฐ๋ณธ์—ฐ์‚ฐ์ž, ๋น„๊ต์—ฐ์‚ฐ์ž, IN, NOT IN ๋“ฑ์„ ์‚ฌ์šฉ

 

* UNIQUE

ํ˜•์‹: ์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž… UNIQUE

CREATE TABLE MYUSER (
	USERNO NUMBER(11,0),
	USERID VARCHAR2(20),
	USERPW VARCHAR(30) NOT NULL,
	NICKNAME VARCHAR(30) UNIQUE,
	EMAIL VARCHAR(50) NULL,
	BIRTHYEAR NUMBER(11,0) CONSTRAINTS CH_BIRTHYEAR CHECK(BIRTHYEAR >14),
	PRIMARY KEY (USERNO)
);

- UNIQUE๋กœ ์„ค์ •๋œ ํ•ด๋‹น ์ปฌ๋Ÿผ์— ์ค‘๋ณต๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ

 

DROP TABLE 

ํ˜•์‹ : DROP TABLE ํ…Œ์ด๋ธ”๋ช…

DROP TABLE MYUSER;

- DROP TABLE ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ, ๊ตฌ์กฐ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

 

ALTER TABLE 

์ปฌ๋Ÿผ ์‚ญ์ œ ํ˜•์‹ : ALTER TABLE ํ…Œ์ด๋ธ”๋ช… DROP COLUMN ์ปฌ๋Ÿผ๋ช…

ALTER TABLE MYUSER DROP COLUMN BIRTHYEAR;

 

์ปฌ๋Ÿผ ์ถ”๊ฐ€ ํ˜•์‹ :  ALTER TABLE ํ…Œ์ด๋ธ”๋ช… ADD ์ถ”๊ฐ€ํ•  ์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž… (NOT NULL, NULL)

ALTER TABLE MYUSER ADD BIRTHYEAR NUMBER(11, 0) NOT NULL;

 

์ปฌ๋Ÿผ ๋ณ€๊ฒฝ ํ˜•์‹ : ALTER TABLE ํ…Œ์ด๋ธ”๋ช… MODIFY ์ปฌ๋Ÿผ๋ช… ๋ณ€๊ฒฝํ•  ๋ฐ์ดํ„ฐํƒ€์ž… (NOT NULL, NULL)

ALTER TABLE MYUSER MODIFY EMAIL VARCHAR(100) NULL;

 

์‹œํ€€์Šค

USERNO NUMBER(11,0) ๊ธฐ๋ณธํ‚ค๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์Œ ์ˆซ์ž๋ฅผ ์˜ˆ์ƒํ•˜๊ณ  ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

 

์˜ค๋ผํด์—์„œ ์‹œํ€€์Šค๋ฅผ ์‚ฌ์šฉ 

: ์ž๋™์œผ๋กœ ๋‹ค์Œ ์ˆซ์ž๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ธฐ๋ณธํ‚ค๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์‹œํ€€์Šค ์ƒ์„ฑํ˜•์‹

CREATE SEQUENCE ์‹œํ€€์Šค๋ช…
    START WITH ์‹œ์ž‘๋ฒˆํ˜ธ 
    INCREMENT BY ์ฆ๊ฐ€๊ฐ’ 
    MAXVALUE ์ตœ๋Œ€๊ฐ’
    MINVALUE ์ตœ์†Œ๊ฐ’ 
    CYCLE ๋˜๋Š” NOCYCLE;

 

์‹œํ€€์Šค ๊ฒ€์ƒ‰ 

SELECT * FROM USER_SEQUENCES;

 

์‹œํ€€์Šค ์ƒ์„ฑ

CREATE SEQUENCE SEQ_MYUSER
START WITH 1
INCREMENT BY 1
MAXVALUE 100000
MINVALUE 1
NOCYCLE;

 

์‹œํ€€์Šค์˜ ๋‹ค์Œ๊ฐ’์„ ์ด์šฉํ•œ ์œ ์ €ํ…Œ์ด๋ธ”์— ๊ธฐ๋ณธํ‚ค(USERNO)๊ฐ’ ๋„ฃ๊ธฐ

INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
VALUES
(
SEQ_MYUSER.nextval,
'id1234',
'pw1234',
'nm1234',
'aaa@namer.com',
50
);

 

์‹œํ€€์Šค์˜ ํ˜„์žฌ ๊ฐ’ ์กฐํšŒ

SELECT seq_myuser.currval FROM DUAL;

 

์‹œํ€€์Šค ์ˆ˜์ •

ALTER SEQUENCE ์‹œํ€€์Šค๋ช…
INCREMENT BY ์ˆ˜์ •ํ•  ์ฆ๊ฐ€๊ฐ’
MAXVALUE ์ˆ˜์ •ํ•  ์ตœ๋Œ€๊ฐ’
MINVALUE ์ˆ˜์ •ํ•  ์ตœ์†Œ๊ฐ’
CYCLE ๋˜๋Š” NOCYCLE;

- ์‹œํ€€์Šค์˜ ์‹œ์ž‘ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์‹œํ€€์Šค๋ฅผ ์‚ญ์ œ ํ›„ ๋‹ค์‹œ ์ƒ์„ฑํ•ด์•ผํ•œ๋‹ค.

- ๋˜๋Š” INCREMENT BY ์ˆ˜์ •ํ•  ์ฆ๊ฐ€๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์—ฌ ์›ํ•˜๋Š” ์‹œ์ž‘๊ฐ’์œผ๋กœ ์ด๋™

 

์‹œํ€€์Šค ์‚ญ์ œ 

DROP SEQUENCE ์‹œํ€€์Šค๋ช…;

 

๋ฐ์ดํ„ฐ ์ •๋ ฌ ORDER BY

์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ORDER BY ASC
ํ˜•์‹ : ORDER BY ASC

- ๋ฐ์ดํ„ฐ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ์‹œํ‚จ๋‹ค.

- ์ˆซ์ž๋Š” ์ž‘์€ ์ˆซ์ž๋ถ€ํ„ฐ, ๋ฌธ์ž๋Š” ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

- Default ๊ฐ’์€ Ascending ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ์จ ASC๋Š” ์ƒ๋žตํ•ด๋„๋œ๋‹ค. 

SELECT *
FROM BBSTABLE
ORDER BY BBSNO ASC;

ASC๋Š” DEFAULT ๊ฐ’์ด๋ผ ์ƒ๋žต๊ฐ€๋Šฅํ•˜๋‹ค.

๋˜ํ•œ SELECT์ ˆ์— ORDER BY์— ์‚ฌ์šฉ๋œ ์ปฌ๋Ÿผ์„ ๊ผญ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†๋‹ค.

SELECT BBSTITLE
FROM BBSTABLE
ORDER BY BBSNO;

 

 

๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ ORDER BY DESC
ํ˜•์‹ : ORDER BY DESC

- ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ์‹œํ‚จ๋‹ค. ์ˆซ์ž๋Š” ํฐ ์ˆซ์ž๋ถ€ํ„ฐ ๋ฌธ์ž๋Š” ์•ŒํŒŒ๋ฒณ ์—ญ์ˆœ์„œ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

- ASC ์™€ ๋‹ฌ๋ฆฌ DESC๋Š” ๊ผญ ๋ช…์‹œํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค. 

SELECT *
FROM BBSTABLE
ORDER BY BBSNO DESC;

 

ORDER BY ์—ฌ๋Ÿฌ ๊ฐœ ์‚ฌ์šฉ

SELECT *
FROM BBSTABLE
ORDER BY BBSTITLE DESC,bbscontents ASC;

- ์ •๋ ฌ ํ›„ ์ค‘๋ณต๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ฝค๋งˆ(,)๋‹ค์Œ ์˜ค๋Š” ์ •๋ ฌ์ˆœ์„œ๋ฅผ ์ ์šฉ.

 

์กฐ๊ฑด์ ˆ WHERE๊ณผ AND, OR, SELECT ์‹œ ROWNUM๊ณผ DISTINCT

WHERE๊ณผ AND

- MYUSER์˜ USERID๊ฐ€ 500์ด๊ณ  EMAIL์€ NULL์ด ์•„๋‹Œ ๊ฒƒ๋งŒ ์กฐํšŒ 

SELECT * FROM MYUSER WHERE USERID = 500 AND EMAIL != NULL;

 

BBSTABLE์˜ ๊ฒŒ์‹œํŒ๋ฒˆํ˜ธ๊ฐ€ 100์ดํ•˜์ด๊ณ  ๊ฒŒ์‹œํŒ์ œ๋ชฉ์ด ABC๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ

SELECT * FROM BBSCONTENTS WHERE BBSNO<=100 AND BBSTITLE LIKE 'ABC%'

 

WHERE๊ณผ OR

- MYUSER์˜ USERID๊ฐ€ 500๋˜๋Š” EMAIL์€ NULL์ด ์•„๋‹Œ๊ฒƒ๋งŒ ์กฐํšŒ

SELECT * FROM MYUSER WHERE USERID = 500 OR EMAIL != NULL;

BBSTABLE์˜ ๊ฒŒ์‹œํŒ๋ฒˆํ˜ธ๊ฐ€ 100์ดˆ๊ณผ ๋˜๋Š” ๊ฒŒ์‹œํŒ์ œ๋ชฉ์ด ABC๊ฐ€ ํฌํ•จ๋œ ๊ฒƒ๋งŒ ์กฐํšŒ

SELECT * FROM BBSCONTENTS WHERE BBSNO>100 OR BBSTITLE LIKE '%ABC%'

 

SELECT์™€ ROWNUM

 

์กฐํšŒ๋˜๋Š” ํ–‰์˜ ์ˆ˜๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ธ€ 1๊ฐœ๋งŒ ์กฐํšŒ 

SELECT *
FROM BBSTABLE
WHERE ROWNUM = 1;

 

๊ธ€10๊ฐœ๋งŒ ์กฐํšŒ(ํ–‰์˜ ์ˆ˜ 10๊ฐœ)

SELECT *
FROM BBSTABLE
WHERE ROWNUM <= 10;

 

SELECT์™€ DISTINCT

์ค‘๋ณต๋œ ๊ฐ’์„ ์ œ๊ฑฐํ•˜๊ณ  ํ•˜๋‚˜๋งŒ ๊ฒฐ๊ณผ๋กœ์„œ ์กฐํšŒํ•œ๋‹ค.

 

์ค‘๋ณต๋œ ๊ธ€ ์ œ๋ชฉ์€ 2๊ฐœ ์ด์ƒ ์กฐํšŒ์•ˆ๋˜๋„๋ก SELECT

SELECT DISTINCT BBSTITLE
FROM BBSTABLE;

 

์˜ค๋ผํด ํ•จ์ˆ˜

* ๋ฌธ์ž์—ด ํ•จ์ˆ˜

LOWER(๋ฌธ์ž์—ด): ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜

SELECT LOWER(BBSTITLE)
FROM BBSTABLE;

UPPER(๋ฌธ์ž์—ด): ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜

SELECT UPPER(BBSTITLE)
FROM BBSTABLE;

CONCAT(‘๋ฌธ์ž์—ด1’,’๋ฌธ์ž์—ด2’): ๋ฌธ์ž์—ด1๊ณผ ๋ฌธ์ž์—ด2๋ฅผ ํ•ฉ์นจ. ์—ฐ๊ฒฐ์—ฐ์‚ฐ์ž||์™€ ๊ฐ™์€ ์—ญํ• .

SELECT CONCAT('abc','def')
FROM DUAL;

SUBSTR('๋ฌธ์ž์—ด',์‹œ์ž‘์œ„์น˜,๊ฐฏ์ˆ˜): ๋ฌธ์ž์—ด์—์„œ ์‹œ์ž‘์œ„์น˜๋กœ๋ถ€ํ„ฐ ๊ฐฏ์ˆ˜๋งŒํผ ๋ฆฌํ„ด.

SELECT SUBSTR('abcdefghij',3,4)
FROM DUAL;

LPAD(๋ฐ์ดํ„ฐ,์ „์ฒด๊ธธ์ด,'์ถ”๊ฐ€ํ• ๋ฌธ์ž์—ด'):๋ชจ์ž๋ž€ ๊ธธ์ด๋งŒํผ ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค

SELECT LPAD(BBSCONTENTS,20,'A')
FROM BBSTABLE;

RPAD(๋ฐ์ดํ„ฐ,์ „์ฒด๊ธธ์ด,'์ถ”๊ฐ€ํ• ๋ฌธ์ž์—ด'):๋ชจ์ž๋ž€ ๊ธธ์ด๋งŒํผ ์˜ค๋ฅธ์ชฝ์—์„œ๋ถ€ํ„ฐ ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

SELECT RPAD(BBSCONTENTS,20,‘B')
FROM BBSTABLE;

TRIM(‘๋ฌธ์ž์—ด’):๋ฌธ์ž์—ด ์–‘์ชฝ ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•ด์ค€๋‹ค.

SELECT TRIM(' ABC ')
FROM DUAL;

TRIM('ํŠน์ •๋ฌธ์ž' FROM '๋ฌธ์ž์—ด'):๋ฌธ์ž์—ด ์•ž๋’ค๋กœ ํŠน์ •๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•ด์ค€๋‹ค.

SELECT TRIM('A' FROM 'AABA BC AA DD AABA')
FROM DUAL;

TRUNC(์ˆซ์ž,์†Œ์ˆ˜์ ํ‘œ์‹œํ•  ์ˆ˜):์†Œ์ˆ˜์  ์ˆซ์ž๋ฅผ ์–ด๋””๊นŒ์ง€ ๋ณด์—ฌ์ฃผ๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฒ„๋ฆฐ๋‹ค.

SELECT TRUNC(123.56789,2)
FROM DUAL;

ROUND(์ˆซ์ž,์†Œ์ˆ˜์ ํ‘œ์‹œํ•  ์ˆ˜):์†Œ์ˆ˜์  ์ˆซ์ž๋ฅผ ์–ด๋””๊นŒ์ง€ ๋ณด์—ฌ์ฃผ๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฐ˜์˜ฌ๋ฆผํ•œ๋‹ค.

SELECT ROUND(123.56789,2)
FROM DUAL;

MOD(์ˆซ์ž,๋‚˜๋ˆŒ ์ˆซ์ž):์ˆซ์ž๋ฅผ ๋‚˜๋ˆ„๊ณ  ๋‚˜๋จธ์ง€๊ฐ’์„ ์–ป๋Š”๋‹ค.

SELECT MOD(1234567,10)
FROM DUAL;

ADD_MONTHS('25-DEC-91',6):

SELECT ADD_MONTHS(SYSDATE, 1)
FROM DUAL;
SELECT ADD_MONTHS(SYSDATE, -1)
FROM DUAL;

 

ํ•˜๋ฃจ์ถ”๊ฐ€

SELECT SYSDATE+1 FROM DUAL;

 

** ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋จ.๊ทธ๋งŒํผ ์ค‘์š”. **

 

NVL(๊ฐ’, NULL์ผ์‹œ ์ถœ๋ ฅํ•  ๊ฐ’)

SELECT NVL(NULL,'NULL์ด๊ตฐ์š”') FROM DUAL;

NVL2(๊ฐ’ , NULL์ด ์•„๋‹ˆ๋ฉด ์ถœ๋ ฅํ•  ๊ฐ’,NULL์ผ์‹œ ์ถœ๋ ฅํ•  ๊ฐ’)

SELECT NVL2(NULL,'NULL์ด ์•„๋‹™๋‹ˆ๋‹ค','NULL์ด๊ตฐ์š”')
FROM DUAL;

 

Inner Join,Left Outer Join,Right Outer Join,Self Join

 

Join์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ   

join์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ด€๋ จ์žˆ๋Š” ํ…Œ์ด๋ธ”๋ผ์ง€ ๋ฌถ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

INNER JOIN

SELECT A.*,B.*
FROM MYUSER A
INNER JOIN BUYLIST B
ON A.USERNO = B.USERNO;

- ์ปฌ๋Ÿผ๋ช…์ด ๋™์ผํ•œ ๊ฒฝ์šฐ ๋ณ„๋ช…์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๊ฐ ํ…Œ์ด๋ธ” ๋ช…์„ ๊ธฐ์ˆ .

์—ฌ๊ธฐ์„œ ์•Œ ์ˆ˜ ์žˆ๋Š” ์‚ฌ์‹ค Aํ…Œ์ด๋ธ”XBํ…Œ์ด๋ธ”: 

SELECT A.*,B.*
FROM MYUSER A
INNER JOIN BUYLIST B
ON 1=1;

๊ฐ™์€ ๊ฒƒ ๋ผ๋ฆฌ๋งŒ ๊ฒฐ๊ณผ ์–ป๊ธฐ.

SELECT A.*,B.*
FROM MYUSER A
INNER JOIN BUYLIST B
ON A.USERNO = B.USERNO;

์œ„ ๊ฒฐ๊ณผ์—์„œ USERNO=2์ธ ๊ฒƒ๋งŒ ์กฐํšŒํ•˜๊ธฐ.

SELECT A.*,B.*
FROM MYUSER A
INNER JOIN BUYLIST B
ON A.USERNO = B.USERNO
WHERE A.USERNO = 2;

 

LEFT OUTER JOIN

INNER JOIN์ฒ˜๋Ÿผ ๊ฐ™์€ ๊ฒƒ ๋ผ๋ฆฌ ๋ฌถ์–ด์ค€๋‹ค.

๊ทธ ํ›„์— LEFT OUTER JOIN์€ ์™ผ์ชฝ์˜ ๋‚˜๋จธ์ง€ํ–‰๋„ ๊ฒฐ๊ณผ์— ํฌํ•จ์‹œํ‚จ๋‹ค.

SELECT A.*,B.*
FROM MYUSER A
LEFT OUTER JOIN BUYLIST B
ON A.USERNO = B.USERNO;

 

RIGHT OUTER JOIN

INNER JOIN์ฒ˜๋Ÿผ ๊ฐ™์€ ๊ฒƒ ๋ผ๋ฆฌ ๋ฌถ์–ด์ค€๋‹ค.

๊ทธ ํ›„์— RIGHT OUTER JOIN์€ ์˜ค๋ฅธ์ชฝ์˜ ๋‚˜๋จธ์ง€ํ–‰๋„ ๊ฒฐ๊ณผ์— ํฌํ•จ์‹œํ‚จ๋‹ค.

SELECT A.*,B.*
FROM MYUSER A
RIGHT OUTER JOIN BUYLIST B
ON A.USERNO = B.USERNO;

LEFT OUTER JOIN: ์™ผ์ชฝ ๋‚˜๋จธ์ง€๋„ ํฌํ•จ

RIGHT OUTER JOIN: ์˜ค๋ฅธ์ชฝ ๋‚˜๋จธ์ง€๋„ ํฌํ•จ.

 

Union, Union All

UNION: ๋‘๊ฐœ์˜ ์ฟผ๋ฆฌ๋ฌธ์„ ํ•ฉ์ณ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ์ง‘ํ•ฉ์œผ๋กœ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.์ค‘๋ณต๋œ ํ–‰์€ ์ œ๊ฑฐํ•ด์ค๋‹ˆ๋‹ค.

UNION ALL: ๋‘๊ฐœ์˜ ์ฟผ๋ฆฌ๋ฌธ์„ ํ•ฉ์ณ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ์ง‘ํ•ฉ์œผ๋กœ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

์‚ฌ์šฉ์‹œ ์ œ์•ฝ์กฐ๊ฑด: ์ปฌ๋Ÿผํƒ€์ž…์ด ๊ฐ™์•„์•ผํ•œ๋‹ค.

SELECT
1 AS COLUMN0,
'1ssss' AS COLUMN1
FROM DUAL

UNION

SELECT
2 AS COLUMN0,
'2aaaa' AS COLUMN1
FROM DUAL

UNION

SELECT
3 AS COLUMN0,
'3aaaa' AS COLUMN1
FROM DUAL;
SELECT
BIRTHYEAR
FROM MYUSER

UNION

SELECT
BIRTHYEAR
FROM MYUSER
WHERE USERNO =7;
SELECT
BIRTHYEAR
FROM MYUSER

UNION ALL

SELECT
BIRTHYEAR
FROM MYUSER
WHERE USERNO =7;
SELECT
1 AS COL0,
USERNO AS COL1,
USERID AS COL2,
USERPW AS COL3
FROM MYUSER

UNION ALL

SELECT
2 AS COL0,
BBSNO AS COL1,
TO_CHAR(USERNO) AS COL2,
BBSTITLE AS COL3
FROM BBSTABLE;

 

์„œ๋ธŒ์ฟผ๋ฆฌ

 

ํ•˜๋‚˜์˜ SQL๋ฌธ์— ์กด์žฌํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ SQL๋ฌธ.

 

WHERE ์ ˆ ์„œ๋ธŒ์ฟผ๋ฆฌ

SELECT *
FROM MYUSER A
WHERE A.USERNO IN (
	SELECT B.USERNO
	FROM BUYLIST B)

SELECT *
FROM MYUSER A
WHERE A.USERNO NOT IN (
	SELECT B.USERNO
	FROM BUYLIST B)

SELECT ์ ˆ ์„œ๋ธŒ์ฟผ๋ฆฌ

๋ฐ˜๋“œ์‹œ ๋‹จ์ผ ๊ฐ’๋งŒ์„ ๊ฒฐ๊ณผ๋กœ์„œ ์–ป์–ด์•ผํ•œ๋‹ค. SUM, AVG, COUNT, MIN, MAX์™€ ๊ฐ™์€ ์ง‘๊ณ„ํ•จ์ˆ˜์™€ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

๊ตฌ๋งค์ž์˜์ •๋ณด์™€ ๊ตฌ๋งค์ž์˜ ์ „์ฒด๊ตฌ๋งค๊ธˆ์•ก.

SELECT A.*,(
	SELECT SUM(PRICE) 
    FROM BUYLIST 
    WHERE BUYLIST.USERNO = A.USERNO) 
    AS TOTALBUY)
FROM MYUSER A
WHERE A.USERNO = 2;

 

FROM ์ ˆ ์„œ๋ธŒ์ฟผ๋ฆฌ

FROM ๋‹ค์Œ ์˜ค๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

SELECT
A.USERNO,
A.USERID,
A.USERPW,
B.BBSNO,
B.USERNO,
B.BBSTITLE
FROM MYUSER A, (SELECT BBSNO,USERNO,BBSTITLE FROM BBSTABLE) B;

INSERT+์„œ๋ธŒ์ฟผ๋ฆฌ

SELECT๊ฒฐ๊ณผ๋ฅผ INSERT INTO ๋‹ค์Œ์˜ค๋Š” ํ…Œ์ด๋ธ”(์—ฌ๊ธฐ์„œ๋Š”MYUSER)์— ๋ฐ์ดํ„ฐ์‚ฝ์ž….

INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
SELECT
9, --๊ฐ’์„ ์ ์—ˆ์ง€๋งŒ ํ”„๋กœ์‹œ์ €๋กœ ๋ฐ›๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ’, ๋ณ€์ˆ˜๊ฐ’์„ ์‚ฌ์šฉ๊ฐ€๋Šฅ.
'bbbbb',
'bbbbb',
'55555',
'bbb@naver.com',
55
FROM DUAL;

Group By์™€ ๊ทธ๋ฃน ํ•จ์ˆ˜

ํŠน์ • ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด์ค€๋‹ค.

SELECT USERNO
FROM BBSTABLE
GROUP BY USERNO;

GROUP BY ๋‹ค์Œ์—์˜ค๋Š” ์ปฌ๋Ÿผ ์™ธ์—๋Š” ์ง‘๊ณ„ํ•จ์ˆ˜(SUM, AVG, MIN, MAX, COUNT ๋“ฑ)์„ ์จ์ค€๋‹ค

 

์˜ค๋ฅ˜์˜ ์˜ˆ

SELECT USERNO,BBSTITLE 
FROM BBSTABLE 
GROUP BY USERNO;

USERNO๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด์ฃผ์—ˆ์ง€๋งŒ ๋‚˜๋จธ์ง€๋Š” ๊ทธ๋ฃนํ•จ์ˆ˜์˜ ๋„์›€์ด ํ•„์š”ํ•˜๋‹ค.

 

COUNT ํ•จ์ˆ˜

GROUP BY์— ์‚ฌ์šฉ๋˜๋Š” ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด์ค„ ์‹œ COUNT(์ปฌ๋Ÿผ)์„ ์ ์–ด์ฃผ๋ฉด COUNT(์ปฌ๋Ÿผ)์— ์ ํžŒ ์ปฌ๋Ÿผ๋„ ๋ฌถ์–ด์„œํ‘œ์‹œ,

์š”์•ฝํ‘œ์‹œ ํ•ด์ฃผ์ง€๋งŒ ํ–‰์˜ ์ˆ˜๋ฅผ ์š”์•ฝํ•ด์ค€๋‹ค. ๋‹จ NULL์€ ์„ธ์ง€ ์•Š๋Š”๋‹ค.

SELECT COUNT(BBSNO),USERNO,COUNT(BBSTITLE)
FROM BBSTABLE
GROUP BY USERNO;

 

SUMํ•จ์ˆ˜

๋ˆ„์ ๊ตฌ๋งค์•ก์ˆ˜,๊ธฐ๋ง๊ณ ์‚ฌ์ค‘๊ฐ„๊ณ ์‚ฌ ์ˆ˜ํ•™์‹œํ—˜์˜ ํ•ฉ๊ณ„ ๋“ฑ๋“ฑ์— ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด์„œํ‘œ์‹œ, ์š”์•ฝํ‘œ์‹œ ํ•ด์ฃผ๋ฉด์„œ SUM์ด์‚ฌ์šฉ๋œ ์ปฌ๋Ÿผ์˜ ์ˆซ์ž์ ์ธ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค

SELECT SUM(BBSNO),USERNO
FROM BBSTABLE
GROUP BY USERNO;

ํšŒ์›๋งˆ๋‹ค ๋ˆ„์ ๊ตฌ๋งค์•ก์ˆ˜

SELECT USERNO,SUM(PRICE) 
FROM BUYLIST
GROUP BY USERNO;

AVGํ•จ์ˆ˜

๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด์„œํ‘œ์‹œ,

์š”์•ฝํ‘œ์‹œ ํ•ด์ฃผ๋ฉด์„œ AVG์ด ์‚ฌ์šฉ๋œ ์ปฌ๋Ÿผ์˜ ์ˆซ์ž์ ์ธ ํ‰๊ท ์„ ๊ณ„์‚ฐํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

--ํšŒ์›๋งˆ๋‹ค ํ‰๊ท ์ƒํ’ˆ๊ธˆ์•ก

SELECT USERNO,AVG(PRICE)
FROM BUYLIST
GROUP BY USERNO;

--์ „์ฒด ํ‰๊ท ์ƒํ’ˆ๊ธˆ์•ก

SELECT AVG(PRICE)
FROM BUYLIST;

 

MAXํ•จ์ˆ˜

๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด์„œํ‘œ์‹œ, ์š”์•ฝํ‘œ์‹œ ํ•ด์ฃผ๋ฉด์„œ ๊ทธ๋ฃน๋งˆ๋‹ค ์ˆซ์ž์ ์ธ ์ตœ๋Œ€๊ฐ’์„ ํ‘œ์‹œํ•ด์ค€๋‹ค.

 

--ํšŒ์›๋งˆ๋‹ค ๊ตฌ๋งคํ•œ ์ƒํ’ˆ์ค‘ ์ตœ๊ณ ์ƒํ’ˆ๊ธˆ์•ก

SELECT USERNO,MAX(PRICE)
FROM BUYLIST
GROUP BY USERNO;

--๊ตฌ๋งคํ•œ ์ƒํ’ˆ์ค‘ ์ตœ๊ณ ์ƒํ’ˆ๊ธˆ์•ก

SELECT MAX(PRICE)
FROM BUYLIST;

 

MINํ•จ์ˆ˜

๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด์„œํ‘œ์‹œ, ์š”์•ฝํ‘œ์‹œ ํ•ด์ฃผ๋ฉด์„œ ๊ทธ๋ฃน๋งˆ๋‹ค ์ˆซ์ž์ ์ธ ์ตœ์†Œ๊ฐ’์„ ํ‘œ์‹œํ•ด์ค€๋‹ค.

 

--ํšŒ์›๋งˆ๋‹ค ๊ตฌ๋งคํ•œ ์ƒํ’ˆ์ค‘ ์ตœ์ €์ƒํ’ˆ๊ธˆ์•ก

SELECT USERNO,MIN(PRICE)
FROM BUYLIST
GROUP BY USERNO;

--๊ตฌ๋งคํ•œ ์ƒํ’ˆ์ค‘ ์ตœ์ €์ƒํ’ˆ๊ธˆ์•ก

SELECT MIN(PRICE)
FROM BUYLIST;

 

HAVING

GROUP BY๋กœ ๋ฌถ์ธ ๊ทธ๋ฃน์— ์กฐ๊ฑด์„ ์ค€๋‹ค.

 

BBSNO์˜ NULL์ด ์•„๋‹Œ ํ–‰์˜ ๊ฐฏ์ˆ˜ 10๊ฐœ ์ดˆ๊ณผ๋งŒ ์กฐํšŒ.

SELECT COUNT(BBSNO),USERNO,COUNT(BBSTITLE)
FROM BBSTABLE
GROUP BY USERNO
HAVING COUNT(BBSNO)>10;

 

HAVING์„ ์‚ฌ์šฉํ•˜๋Š”์ด์œ 

SELECT COUNT(BBSNO),USERNO,COUNT(BBSTITLE)
FROM BBSTABLE
WHERE COUNT(BBSNO)>10
GROUP BY USERNO;--์˜ค๋ฅ˜์ฟผ๋ฆฌ
๊ทธ๋ฃนํ•จ์ˆ˜(SUM,AVG,COUNT,MAX,MIN)๋Š” WHERE์ ˆ์—์„œ ์‚ฌ์šฉ๋ถˆ๊ฐ€.

 

ํŠธ๋žœ์žญ์…˜

 

ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์˜ ํ•œ ๋‹จ์œ„ ์ž…๋‹ˆ๋‹ค

ํŠธ๋žœ์žญ์…˜์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์ฆํ•ฉ๋‹ˆ๋‹ค.

 

COMMIT: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ์ธ ์ž‘์—…์„ ์˜๊ตฌ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜ ํ›„ ํŠธ๋žœ์žญ์…˜ ์ข…๋ฃŒ.

ROLLBACK: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ์ธ ์ž‘์—…์„ ์ทจ์†Œํ•จ.

 

ROLLBACK์ด ์‚ฌ์šฉ๋˜๋Š” ๊ณณ

์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜์—ˆ๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๊ฒฝ์šฐ ํŠธ๋žœ์žญ์…˜์„ ์ทจ์†Œํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋น„์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜๋ฉด ์ž๋™์œผ๋กœ ROLLBACK์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

 

COMMIT:๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜๊ตฌ์ ์œผ๋กœ ์ž‘์—…์ด ๋ฐ˜์˜๋œ๋‹ค.

: ์—ฌ๊ธฐ์„œ ROLLBACK์„ ์‚ฌ์šฉํ•œ๋‹คํ•ด๋„ INSERT ๋ฌธ์ด ์ทจ์†Œ๊ฐ€ ์•ˆ๋œ๋‹ค. ๊ทธ๋Ÿฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐ์‹ฌํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

 

: ์ž๋™COMMIT: COMMIT๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ์ž๋™ COMMIT๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Œ.

: DDL(Data Definition Language:CREATE,DROP ๋“ฑ)๋ฌธ ๋˜๋Š” DCL(Data Control Language:GRANT,REVOKE)๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ.

 

์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์ƒ์—์„œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ž‘์—…์„ ํ•œ๋‹ค.

 

: A๊ฐ€ BUYLISTํ…Œ์ด๋ธ”์— UPDATE,DELETE,INSERT๋ฌธ์„ ํ†ตํ•ด COMMIT,ROLLBACK์—†์ด ์ž‘์—….(BUYLISTํ…Œ์ด๋ธ”์— LOCK์ด ๊ฑธ๋ฆผ) B๊ฐ€ BUYLISTํ…Œ์ด๋ธ”์— ์ ‘๊ทผํ•˜์—ฌ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ ํ•˜๋ฉด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.

: A๊ฐ€ ํ•ด๋‹น Transaction์„ Commit๋˜๋Š” Rollback์„ ํ•˜๋ฉด B๊ฐ€ ์‚ฌ์šฉ๊ฐ€๋Šฅ.(LOCK์ด ํ•ด์ œ๋จ.)

 

 

์ด๋ ‡๋“ฏ ์ƒ์‚ฌ ๋˜๋Š” ์—ฌํƒ€ ๊ฐœ๋ฐœ์ž์™€ ํ•ฉ์˜๋œ ์‚ฌ์•ˆ์— ๋Œ€ํ•ด์„œ๋งŒ COMMIT ๋˜๋Š” ROLLBACK์„ ๊ผญ ํ•ด์ค˜์•ผ๋œ๋‹ค.

 

PL/SQL

PL/SQL(Procedure Language/SQL)

: PL/SQL์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ ˆ์ฐจ์  ํŠน์ง•๊ณผ ํ•จ๊ป˜ SQL์˜ ์กฐํ•ฉ์ด๋‹ค.

: ์ด๋กœ์ธํ•ด SQL์˜ ๋ชจ๋“ˆํ™”. ์ž‘์—…์ฒ˜๋ฆฌ ์†๋„์˜ ์„ฑ๋Šฅํ–ฅ์ƒ์„ ๋„๋ชจํ•  ์ˆ˜ ์žˆ์Œ

 

PL/SQL Block ์˜ˆ์ œ

DECLARE
	Variable declaration
BEGIN
	Program Execution
EXCEPTION
	Exception handling
END;

 

ํ”„๋กœ์‹œ์ €๋ž€?

: ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜๋Š” PL/SQL ๋ธ”๋ก์œผ๋กœ์จ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๊ณ  ๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœ๊ฐ€๋Šฅํ•˜๋‹ค.

: ๋˜ํ•œ ๋ญ๋ฆฌ๋ฌธ์„ ์—ฌ๋Ÿฌ ๊ฐœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

: ์—ฌ๋Ÿฌ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ณต์œ ๊ฐ€๋Šฅ 

 

ํ”„๋กœ์‹œ์ € ํ˜•์‹

CREATE OR REPLACE PROCEDURE ํ”„๋กœ์‹œ์ €์ด๋ฆ„
(
	ํŒŒ๋ผ๋ฏธํ„ฐ๋ช… ํŒŒ๋ผ๋ฏธํ„ฐ๋ฐฉํ–ฅ ํŒŒ๋ผ๋ฏธํ„ฐํƒ€์ž…,
	ํŒŒ๋ผ๋ฏธํ„ฐ๋ช… ํŒŒ๋ผ๋ฏธํ„ฐ๋ฐฉํ–ฅ ํŒŒ๋ผ๋ฏธํ„ฐํƒ€์ž…
) IS
ํ”„๋กœ์‹œ์ €์—์„œ ์‚ฌ์šฉํ•  ๋ณ€์ˆ˜์„ ์–ธ.
BEGIN
์ฟผ๋ฆฌ์ž‘์„ฑ.
END;
create or replace PROCEDURE PROC_INMYUSER
(
In_userid IN VARCHAR2,
Out_state OUT NUMBER
)
IS
--๋ณ€์ˆ˜
BEGIN
INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
VALUES
(
16,
In_userid,
'assv',
'asssv4',
'aaas@naber.com',
50
);

UPDATE MYUSER
SET EMAIL = 'bbbb@naber.com'
WHERE USERNO = 16;
Out_state := 0;
END;

๋ช…๋ น์–ด๋กœ ํ˜ธ์ถœ 

EXEC ํ”„๋กœ์‹œ์ €์ด๋ฆ„; --ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†๋Š” ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ ์‹œ.

EXEC ํ”„๋กœ์‹œ์ €์ด๋ฆ„(๊ฐ’1,๊ฐ’2,๊ฐ’3,....); --ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ ์‹œ.

 

ํ…Œ์ŠคํŠธ์šฉ ์‚ฌ์ „์ž‘์—…

DELETE FROM MYUSER;
CREATE SEQUENCE SEQ_MYUSER
	START WITH 0
	INCREMENT BY 1
	MAXVALUE 1000000000
	MINVALUE 0
	NOCYCLE;

 

ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ

 

์ต๋ช…๋ธ”๋ก์œผ๋กœ PL/SQL ์ž‘์„ฑ

set serveroutput on;
--์ฟผ๋ฆฌ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅ.

DECLARE
-- [๋ณ€์ˆ˜์ด๋ฆ„] [๋ณ€์ˆ˜ํƒ€์ž…] [:=์ดˆ๊ธฐ๊ฐ’];
v_state NUMBER(11,0):=50;
BEGIN

--ํ”„๋กœ์‹œ์ €ํ˜ธ์ถœ.
INSERT_USER('aabs543',v_state);

--๊ฒฐ๊ณผ๊ฐ’ ์ถœ๋ ฅ
dbms_output.put_line('๊ฒฐ๊ณผ'||v_state);
END;

:= VS =

:=๋Š” ๋Œ€์ž…์—ฐ์‚ฐ์ž์ด๋‹ค ์ž๋ฐ”์˜ = ๊ณผ ๊ฐ™๋‹ค.

=๋Š” ๋น„๊ต์—ฐ์‚ฐ์ž์ด๋‹ค ์ž๋ฐ”์˜ ==๊ณผ ๊ฐ™๋‹ค.

 

create or replace PROCEDURE INSERT_USER
(
In_userid IN VARCHAR2,
In_userpw IN VARCHAR2,
In_nickname IN VARCHAR2,
InOut_state IN OUT NUMBER
)
IS
[๋ณ€์ˆ˜๋ช…] [๋ณ€์ˆ˜ํƒ€์ž…] [:=์ดˆ๊ธฐ๊ฐ’(์ƒ๋žต๊ฐ€๋Šฅ)];
v_username VARCHAR2(250) := 'AAA';
v_userno NUMBER(11,0);
BEGIN
ํ”„๋กœ์‹œ์ €์™€ ๋ณ€์ˆ˜์„ ์–ธ:
create or replace PROCEDURE PROC_INMYUSER
(
In_userid IN VARCHAR2,
In_userpw IN VARCHAR2,
In_usernickname IN VARCHAR2,
Out_state OUT NUMBER
)
IS
--๋ณ€์ˆ˜
v_userid VARCHAR2(250) := 'AAA';
v_state NUMBER(11,0);
BEGIN
SELECT 5 INTO v_state
FROM MYUSER
WHERE USERID =In_userid
AND ROWNUM = 1;
INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
VALUES
(
SEQ_MYUSER.nextval,
In_userid,
In_userpw,
In_usernickname,
'aaas@naber.com',
50
);
UPDATE MYUSER
SET EMAIL = 'bbbb@naber.com';
Out_state := v_state;
END;

 

PL/SQL ์˜ˆ์™ธ์ฒ˜๋ฆฌ

ํ…Œ์ŠคํŠธ๋ฐฉ๋ฒ•: ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ ์‹œ

SELECT 1 INTO v_userno
FROM MYUSER
WHERE USERID = In_userid
AND ROWNUM = 1;

์ฟผ๋ฆฌ์—์„œ ์ผ์น˜ํ•˜๋Š” USERID๊ฐ€ ๋ฏธ์กด์žฌ๋กœ ์˜ค๋ฅ˜ ๋ฐœ์ƒ์‹œ.

BEGIN
	SELECT 1 INTO v_userno
	FROM MYUSER
	WHERE USERID = In_userid
	AND ROWNUM = 1;
	
    InOut_state:=v_userno;

	EXCEPTION WHEN NO_DATA_FOUND THEN
	InOut_state:=0;
END;
create or replace PROCEDURE INSERT_USER
(
In_userid IN VARCHAR2,
In_userpw IN VARCHAR2,
In_nickname IN VARCHAR2,
InOut_state IN OUT NUMBER
)
IS
v_username VARCHAR2(250) := 'AAA';
v_userno NUMBER(11,0);
BEGIN
/*
SELECT๋˜๋Š”
INSERT,
DELETE์กด์žฌ๊ฐ€๋Šฅ.
์•ž๋‹จ์˜ ๋กœ์ง..
*/
BEGIN
SELECT 1 INTO v_userno
FROM MYUSER
WHERE USERID = In_userid
AND ROWNUM = 1;
InOut_state:=v_userno;
EXCEPTION WHEN NO_DATA_FOUND THEN
InOut_state:=0;
END;
/*
๋’ท๋‹จ์˜ ๋กœ์ง์ฒ˜๋ฆฌ..
*/
INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
VALUES
(
SEQ_MYUSER.nextval,
In_userid,
In_userpw,
In_nickname,
'aa@naver.com',
50
);
UPDATE MYUSER
SET EMAIL = 'bb@naver.com'
WHERE BIRTHYEAR = 50;
END;

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค EXCEPTION์—์„œ ์ฃผ๋กœํ•˜๋Š” ์ผ

ROLLBACK; INSERT INTO ํ…Œ์ด๋ธ”(์ปฌ๋Ÿผ1,์ปฌ๋Ÿผ2...) VALUES('ํ”„๋กœ์‹œ์ €์ด๋ฆ„',์˜ค๋ฅ˜๋ฐœ์ƒ์œ„์น˜,ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์€๊ฐ’,์—๋Ÿฌ์ฝ”๋“œ,์—๋Ÿฌ๋ฉ”์‹œ์ง€); ํŒŒ์ผ๋กœ ๊ธฐ๋ก๋‚จ๊ธฐ๊ธฐ ๋“ฑ๋“ฑ..

 

์—ฐ์Šต์šฉ ํ…Œ์ด๋ธ”์ƒ์„ฑ:
CREATE TABLE ERROR_LOG(
ERRORID NUMBER(10,0),
PROCNM VARCHAR2(250),
STEP NUMBER(5,0),
ERRORNO NUMBER(10,0),
ERRORMSG VARCHAR2(2000),
TXT_PARAMETER VARCHAR2(2000),
ERRORDAY DATE
);
์‹œํ€€์Šค ์ƒ์„ฑ
CREATE SEQUENCE SEQ_ERRORLOG
START WITH 1
INCREMENT BY 1
MAXVALUE 100000
MINVALUE 1
NOCYCLE;
create or replace PROCEDURE PROC_INMYUSER
(
In_userid IN VARCHAR2,
In_userpw IN VARCHAR2,
In_usernickname IN VARCHAR2,
Out_state OUT NUMBER
)
IS
--๋ณ€์ˆ˜
v_userid VARCHAR2(250) := 'AAA';
v_state NUMBER(11,0);
v_step NUMBER(5,0):=0;
v_errcode NUMBER(10,0);
v_errmsg VARCHAR2(2000);
v_userparm VARCHAR2(2000);
BEGIN
/*SELECT,DELETE,UPDATE,INSERT*/
v_step:=0;
SELECT 5 INTO v_state
FROM MYUSER
WHERE USERID =In_userid
AND ROWNUM = 1;
/*SELECT,DELETE,UPDATE,INSERT*/
v_step:=1;
INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
VALUES
(
SEQ_MYUSER.nextval,
In_userid,
In_userpw,
In_usernickname,
'aaas@naber.com',
50
);
v_step:=2;
UPDATE MYUSER
SET EMAIL = 'bbbb@naber.com';
v_step:=3;
--Out_state := v_state;
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
v_errcode:=SQLCODE;
v_errmsg:=SQLERRM;
v_userparm:=('In_userid:'||In_userid||','||'In_userpw:'||In_userpw||',In_usernickname:'||In_usernickname);
dbms_output.put_line('PROC_INMYUSER์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.');
INSERT INTO ERROR_LOG(ERRORID, PROCNM, STEP, ERRONO, ERRORMSG, TXT_PARAMETER, ERRORDAY) VALUES(SEQ_ERRORLOG.nextval,'PROC_INMYUSER',v_step,v_errcode,v_errmsg,v_userparm,sysdate);
COMMIT;
END;

 

์ต๋ช…๋ธ”๋ก์œผ๋กœ PL/SQL ์ž‘์„ฑ

set serveroutput on;
--์ฟผ๋ฆฌ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅ.
DECLARE
-- [๋ณ€์ˆ˜์ด๋ฆ„] [๋ณ€์ˆ˜ํƒ€์ž…] [:=์ดˆ๊ธฐ๊ฐ’];
v_state NUMBER(11,0):=50;
BEGIN
--ํ”„๋กœ์‹œ์ €ํ˜ธ์ถœ.
INSERT_USER('aa','bb','cc',v_state);
--๊ฒฐ๊ณผ๊ฐ’ ์ถœ๋ ฅ
dbms_output.put_line('๊ฒฐ๊ณผ'||v_state);
END;

 

ํŒจํ‚ค์ง€๋ž€?

ํŒจํ‚ค์ง€๋Š” ๋‹ค์ˆ˜์˜ ํ”„๋กœ์‹œ์ €๋ฅผ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ด์ค€๋‹ค. ์žฌ ์‚ฌ์šฉ์„ฑ์„ ๋†’์—ฌ์คŒ. ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์ง.

ํŒจํ‚ค์ง€๋Š” ์„ ์–ธ๋ถ€์™€ ๋ณธ๋ฌธ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

 

ํŒจํ‚ค์ง€ ์„ ์–ธ๋ถ€(Package Specification)

CREATE OR REPLACE PACKAGE ํŒจํ‚ค์ง€๋ช… [AS ๋˜๋Š” IS]
์ปค์„œ ์„ ์–ธ
๋ณ€์ˆ˜ ์„ ์–ธ
ํ”„๋กœ์‹œ์ € ์„ ์–ธ
ํ•จ์ˆ˜ ์„ ์–ธ
์˜ˆ์™ธ ์„ ์–ธ

ํŒจํ‚ค์ง€ ๋ณธ๋ฌธ(Package Body)

ํ”„๋กœ์‹œ์ € ์ •์˜
ํ•จ์ˆ˜ ์ •์˜

 

์•ž์„œ ํ”„๋กœ์‹œ์ €๋ฅผ ํŒจํ‚ค์ง€์•ˆ์— ๋„ฃ์–ด๋ณด์ž.(์„ ์–ธ๋ถ€)

create or replace PACKAGE USERENTER IS
PROCEDURE PROC_INMYUSER
(
In_userid IN VARCHAR2,
In_userpw IN VARCHAR2,
In_usernickname IN VARCHAR2,
Out_state OUT NUMBER
);
--์•ž์œผ๋กœ ์ƒ์„ฑํ•  ํ”„๋กœ์‹œ์ €
PROCEDURE INSERT_BUYLIST
(
In_name IN VARCHAR2
);
END USERENTER;

create or replace PACKAGE BODY USERENTER IS
PROCEDURE PROC_INMYUSER
(
In_userid IN VARCHAR2,
In_userpw IN VARCHAR2,
In_usernickname IN VARCHAR2,
Out_state OUT NUMBER
)
IS
--๋ณ€์ˆ˜
v_userid VARCHAR2(250) := 'AAA';
v_state NUMBER(11,0);
v_step NUMBER(5,0):=0;
v_errcode NUMBER(10,0);
v_errmsg VARCHAR2(2000);
v_userparm VARCHAR2(2000);
BEGIN
/*SELECT,DELETE,UPDATE,INSERT*/
v_step:=0;
SELECT 5 INTO v_state
FROM MYUSER
WHERE USERID =In_userid
AND ROWNUM = 1;
/*SELECT,DELETE,UPDATE,INSERT*/
v_step:=1;
INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
VALUES
(
SEQ_MYUSER.nextval,
In_userid,
In_userpw,
In_usernickname,
'aaas@naber.com',
50
);
v_step:=2;
UPDATE MYUSER
SET EMAIL = 'bbbb@naber.com';
v_step:=3;
--Out_state := v_state;
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
v_errcode:=SQLCODE;
v_errmsg:=SQLERRM;
v_userparm:=('In_userid:'||In_userid||','||'In_userpw:'||In_userpw||',In_usernickname:'||In_usernickname);
dbms_output.put_line('PROC_INMYUSER์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.');
INSERT INTO ERROR_LOG(ERRORID, PROCNM, STEP, ERRONO, ERRORMSG, TXT_PARAMETER, ERRORDAY) VALUES(SEQ_ERRORLOG.nextval,'PROC_INMYUSER',v_step,v_errcode,v_errmsg,v_userparm,sysdate);
COMMIT;
END PROC_INMYUSER;
PROCEDURE INSERT_BUYLIST
(
In_name IN VARCHAR2
)IS
BEGIN
INSERT INTO BUYLIST
(
BUYNO,
USERNO,
NAME,
BUYDAY,
PRICE
)
VALUES
(
500,--๊ณ ์ •์œผ๋กœ๋„ฃ์ง€๋งŒ ๋‚˜์ค‘์— ๋‹ค์‹œ์‹คํ–‰ ํ• ๋•Œ ๋ณ€๊ฒฝํ•ด์•ผ ์˜ค๋ฅ˜๊ฐ€์•ˆ๋‚จ.
4,
'AA์ดˆ์ฝœ๋ฆฟ',
sysdate,
5000
);
END INSERT_BUYLIST;
END USERENTER;

ํŒจํ‚ค์ง€์•ˆ์˜ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ.

ํ˜•์‹: EXEC ํŒจํ‚ค์ง€๋ช….ํ”„๋กœ์‹œ์ €๋ช…(‘๊ฐ’1’,’๊ฐ’2’…..);

์˜ˆ์ œ: EXEC USERENTER.INSERT_BUYLIST('aaaaaaa');

 

114p ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋ณด๊ธฐ! 

'๐ŸฌDB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ MySQL ] ๊ธฐ๋ณธ ์ฟผ๋ฆฌ๋ฌธ ์ •๋ฆฌ  (2) 2022.07.07
SQL Injection  (0) 2022.06.17
Comments