SQL - swkim0128/PARA GitHub Wiki


type: Database archive: false

(Structured Query Language), ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(RDBMS)์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ํŠน์ˆ˜ ๋ชฉ์ ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด.

๋ฌธ์žฅ

INSERT
UPDATE
DELETE

SELECT

CREATE
ALTER
DROP
RENAME

COMMIT
ROLLBACK

GRANT
REVOKE

์„ค๋ช…

DML(Data Manipulation Language)์ด๋ผ ๋ถ€๋ฅด๋ฉฐ, ๊ฐœ๋ณ„์ ์œผ๋กœ Database ํ…Œ์ด๋ธ”์—์„œ ์ƒˆ๋กœ์šด ํ–‰์„ ์ž…๋ ฅํ•˜๊ณ , ๊ธฐ์กด์˜ ํ–‰์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์ œ๊ฑฐํ•œ๋‹ค.

Database๋กœ๋ถ€ํ„ฐ Data๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. SELECT ์—ญ์‹œ DML๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค.

DDL(Data Definition Language)์ด๋ผ ๋ถ€๋ฅด๋ฉฐ, ํ…Œ์ด๋ธ”๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑ, ๋ณ€๊ฒฝ, ์ œ๊ฑฐํ•œ๋‹ค.

DML ๋ช…๋ น๋ฌธ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ ๋ณ€๊ฒฝ์„ ๊ด€๋ฆฌํ•œ๋‹ค.

DCL(Data Control Language)์ด๋ผ ๋ถ€๋ฅด๋ฉฐ, Database์™€ ๊ทธ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•œ๋‹ค.

DDL(Data Definition Language)


๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์Šคํ‚ค๋งˆ๋ฅผ ์ •์˜, ์ƒ์„ฑ, ์ˆ˜์ •ํ•˜๋Š” ๊ธฐ๋Šฅ

create

drop

alter

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด ์ƒ์„ฑ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด ์‚ญ์ œ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด ์ˆ˜์ •

create

> create database ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ช…;
> create database ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ช…
	default character set ๊ฐ’
	collate ๊ฐ’;

alter

> alter database ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ช…
	default character set ๊ฐ’ collate ๊ฐ’;

drop

> drop database ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ช…;

table ์ƒ์„ฑ


> create table table_name (
		column_name1 Type [optional attributes],
		column_name2 Type,
		...
		column_nameN Type,
	);
  • optional attributes

    NOT NULL : ๊ฐ ํ–‰์€ ํ•ด๋‹น ์—ด์˜ ๊ฐ’์„ ํฌํ•จํ•ด์•ผ ํ•˜๋ฉฐ null ๊ฐ’์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Œ.

    DEFAULT value : ๊ฐ’์ด ์ „๋‹ฌ๋˜์ง€ ์•Š์„ ๋•Œ ์ถ”๊ฐ€๋˜๋Š” ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •.

    UNSIGNED : Type์ด ์ˆซ์ž์ธ ๊ฒฝ์šฐ๋งŒ ํ•ด๋‹น๋˜๋ฉฐ ์ˆซ์ž๊ฐ€ 0 ๋˜๋Š” ์–‘์ˆ˜๋กœ ์ œํ•œ๋จ.

    AUTO INCREMENT : ์ƒˆ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ถ”๊ฐ€ ๋  ๋•Œ๋งˆ๋‹ค ํ•„๋“œ ๊ฐ’์„ ์ž๋™์œผ๋กœ 1 ์ฆ๊ฐ€์‹œํ‚ด

    PRIMARY KEY : ํ…Œ์ด๋ธ”์—์„œ ํ–‰์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ. PRIMARY KEY ์„ค์ •์ด ์žˆ๋Š” ์—ด์€ ์ผ๋ฐ˜์ ์œผ๋กœ ID๋ฒˆํ˜ธ์ด๋ฉฐ AUTO INCREMENT์™€ ๊ฐ™์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ.

์ œ์•ฝ ์กฐ๊ฑด


์ปฌ๋Ÿผ์— ์ €์žฅ๋  ๋ฐ์ดํ„ฐ์˜ ์กฐ๊ฑด์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ

์ œ์•ฝ์กฐ๊ฑด์„ ์„ค์ •ํ•˜๋ฉด ์กฐ๊ฑด์— ์œ„๋ฐฐ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ €์žฅ ๋ถˆ๊ฐ€

ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์‹œ ์ปฌ๋Ÿผ์— ์ง์ ‘ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ constraint๋กœ ์ง€์ •, ๋˜๋Š” ALTER๋ฅผ ์ด์šฉํ•˜์—ฌ ์„ค์ • ๊ฐ€๋Šฅ.

!Untitled 3.png

์Šคํ‚ค๋งˆ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋  ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ์™€ ํ˜•์‹์„ ์ •์˜

DML


๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋‚ด์šฉ์„ ์ง์ ‘ ์กฐ์ž‘ํ•˜๋Š” ๊ธฐ๋Šฅ(CRUD)

insert
delete
update
select

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด ์•ˆ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด ์•ˆ์˜ ๋ฐ์ดํ„ฐ ์กฐํšŒ

INSERT


> insert into table_name
	values(col_val1, col_val2, col_val3, ...);
> insert into table_name(col_name1, col_name2, ..., col_nameN)
	values(col_val1, col_val2, ..., col_valN);
> insert into table_name(col_name1, col_name2, ..., col_nameN)
	values (col_val1, col_val2, ..., col_valN),
				 (col_val1, col_val2, ..., col_valN);

UPDATE


> update table_name
	set col_name=col_val1, [col_name2 = col_val2, ..., col_nameN=col_valN]
	where conditions;
  • where์ ˆ์˜ ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋Š” ๋ ˆ์ฝ”๋“œ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝ.
  • ์ฃผ์˜ : where์ ˆ์„ ์ƒ๋žตํ•˜๋ฉด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€๋‹ค.

DELETE


> delete from table_name
	where conditions;
  • where์ ˆ์˜ conditions(์กฐ๊ฑด)์— ๋งŒ์กฑํ•˜๋Š” ๋ ˆ์ฝ”๋“œ์˜ ๊ฐ’์„ ์‚ญ์ œ.
  • ์ฃผ์˜ : where์ ˆ์„ ์ƒ๋žตํ•˜๋ฉด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋œ๋‹ค.

SELECT


-- select ๊ตฌ๋ฌธ ํ˜•์‹
SELECT * | {[ALL | DISTINCT] column | expression [alias], ...} [ INTO new_table ]
[ FROM table_source ] [ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ]

-- ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ
SELECT select_list
[ FROM table_source ] [ WHERE search_condition ]

-- * ์›ํ•˜๋Š” ์—ด์—์„œ ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ํ•„ํ„ฐ๋งํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” 'DISTINCT'๋ฅผ ์‚ฌ์šฉ.
SELECT DISTINCT select_list
FROM table_source

-- select ... into ...
-- ์กฐ๊ฑด์— ๋งž๋Š” ๊ธฐ์กด ํ…Œ์ด๋ธ”์˜ ์—ด ๋‚ด์šฉ์„ ์ƒˆ ํ…Œ์ด๋ธ”๋กœ ๊ฐ€์ ธ์™€ ํ…Œ์ด๋ธ”๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ.
SELECT select_list [ INTO new_table ]
[ FROM table_source ] [ WHERE search_condition ]

-- group by
-- ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด์ฃผ๋Š” ์—ญํ• 
SELECT select_list
[ FROM table_source ] [ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]

-- order by ๋ฌธ
-- ์กฐ๊ฑด์— ๋งž๋Š” ์—ด์„ ๊ฐ€์ ธ์™€ order by์— ์ง€์ •๋œ ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ.
-- ๊ธฐ๋ณธ ์ •๋ ฌ์€ asc : ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ.
SELECT select_list
[ FROM table_source ] [ WHERE search_condition ]
[ ORDER BY order_expression [ ASC | DESC ]

select clause

ALL

DISTINCT

column

expression

alias

description

FROM ์ ˆ์— ๋‚˜์—ด๋”˜ ํ…Œ์ด๋ธ”์—์„œ ๋ชจ๋“  ์—ด์„ ์„ ํƒ.

์„ ํƒ๋œ ๋ชจ๋“  ํ–‰์„ ๋ฐ˜ํ™˜. ALL์ด default (์ƒ๋žต ๊ฐ€๋Šฅ)

์„ ํƒ๋œ ๋ชจ๋“  ํ–‰ ์ค‘์—์„œ ์ค‘๋ณต ํ–‰ ์ œ๊ฑฐ

FROM ์ ˆ์— ๋‚˜์—ด๋œ ํ…Œ์ด๋ธ”์—์„œ ์ง€์ •๋œ ์—ด์„ ์„ ํƒ.

ํ‘œํ˜„์‹์€ ๊ฐ’์œผ๋กœ ์ธ์‹๋˜๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ฐ’, ์—ฐ์‚ฐ์ž ๋ฐ SQL ํ•จ์ˆ˜์˜ ์กฐํ•ฉ์„ ๋œปํ•จ.

๋ณ„์นญ

*alias, ์‚ฌ์น™์—ฐ์‚ฐ (+, -, , /), NULL Value

!Untitled 1 2.png

case exp1 when exp2 then exp3 [when exp4 then exp5 ... else exp6] end

!Untitled 2 2.png

Operators

  • BETWEEN
  • LIKE
  • IN
  • AND, OR, NOT
  • IS NULL, IS NOT NULL
  • LIKE (whild card : %, _ )

ํŠน์ • ๋ฒ”์œ„

๊ฐ™์€ ํŒจํ„ด

ํŠน์ • ๊ฐ’๋“ค

-- BETWWEN
SELECT select_list
[ FROM table_source ] [ WHERE column BETWEEN A AND B ]

-- LIKE
SELECT select_list
[ FROM table_source ] [ WHERE column LIKE 'pattern' ]

-- IN
SELECT select_list
[ FROM table_source ] [ WHERE column IN 'list' ]

-- LIKE (์ด๋ฆ„์˜ ๋์—์„œ 3๋ฒˆ์จฐ ์ž๋ฆฌ์— 'x'๊ฐ€ ๋“ค์–ด๊ฐ„ ์‚ฌ์›์˜ ์‚ฌ๋ฒˆ, ์ด๋ฆ„ ๊ฒ€์ƒ‰
select employee_id, first_name
from employees
where first_name like '%x__';

MYSQL ๋‚ด์žฅํ•จ์ˆ˜


์ˆซ์ž ๊ด€๋ จ ํ•จ์ˆ˜

!Untitled 3 2.png

๋ฌธ์ž ๊ด€๋ จ ํ•จ์ˆ˜

!Untitled 4.png

!Untitled 5.png

๋‚ ์งœ ๊ด€๋ จ ํ•จ์ˆ˜

!Untitled 6.png

!Untitled 7.png

๋…ผ๋ฆฌ ๊ด€๋ จ ํ•จ์ˆ˜

!Untitled 8.png

๊ทธ๋ฃน ํ•จ์ˆ˜

!Untitled 9.png

DCL


๋ฐ์ด๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์— ์ ‘๊ทผ ๊ถŒํ•œ์ด๋‚˜ CRUD ๊ถŒํ•œ์„ ์ •์˜ํ•˜๋Š” ๊ธฐ๋Šฅ

grant

revoke

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด์— ๊ถŒํ•œ ๋ถ€์—ฌ

์ด๋ฏธ ๋ถ€์—ฌ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด ๊ถŒํ•œ์„ ์ทจ์†Œ

TCL(Transaction Control Language)


ํŠธ๋žœ์žญ์…˜ ์ œ์–ด์–ด.

transaction์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋…ผ๋ฆฌ์  ์—ฐ์‚ฐ ๋‹จ์œ„.

start transaction

commit

rollback

commit, rollback์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ์‹คํ–‰๋˜๋Š” ๋ชจ๋“  SQL

์‹คํ–‰ํ•œ Query๋ฅผ ์ตœ์ข…์ ์œผ๋กœ ์ ์šฉ.

์‹คํ–‰ํ•œ Query๋ฅผ ๋งˆ์ง€๋ง‰ commit์ „์œผ๋กœ ์ทจ์†Œ์‹œ์ผœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌ

use ssafydb;

start stransaction;

...
rollback;

...
commit;

...
savepoint f1;

...
rollback to f1;
โš ๏ธ **GitHub.com Fallback** โš ๏ธ