SQL - swkim0128/PARA GitHub Wiki
(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์ ๊ทธ ๊ตฌ์กฐ์ ๋ํ ์ ๊ทผ ๊ถํ์ ์ ๊ณตํ๊ฑฐ๋ ์ ๊ฑฐํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์คํค๋ง๋ฅผ ์ ์, ์์ฑ, ์์ ํ๋ ๊ธฐ๋ฅ
create
drop
alter
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด ์์ฑ
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด ์ญ์
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด ์์
create
> create database ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ช
;
> create database ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ช
default character set ๊ฐ
collate ๊ฐ;
alter
> alter database ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ช
default character set ๊ฐ collate ๊ฐ;
drop
> drop database ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ช
;
> 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๋ฅผ ์ด์ฉํ์ฌ ์ค์ ๊ฐ๋ฅ.
์คํค๋ง : ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ์ ํ์์ ์ ์
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ์๋ ๋ด์ฉ์ ์ง์ ์กฐ์ํ๋ ๊ธฐ๋ฅ(CRUD)
insert
delete
update
select
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅ
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฅผ ์ญ์
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด ์์ ๋ฐ์ดํฐ๋ฅผ ์์
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด ์์ ๋ฐ์ดํฐ ์กฐํ
> 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 table_name
set col_name=col_val1, [col_name2 = col_val2, ..., col_nameN=col_valN]
where conditions;
- where์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ ์ฝ๋์ ๊ฐ์ ๋ณ๊ฒฝ.
- ์ฃผ์ : where์ ์ ์๋ตํ๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋๋ค.
> delete from table_name
where conditions;
- where์ ์ conditions(์กฐ๊ฑด)์ ๋ง์กฑํ๋ ๋ ์ฝ๋์ ๊ฐ์ ์ญ์ .
- ์ฃผ์ : where์ ์ ์๋ตํ๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋ค.
-- 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
case exp1 when exp2 then exp3 [when exp4 then exp5 ... else exp6] end
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__';
์ซ์ ๊ด๋ จ ํจ์
๋ฌธ์ ๊ด๋ จ ํจ์
๋ ์ง ๊ด๋ จ ํจ์
๋ ผ๋ฆฌ ๊ด๋ จ ํจ์
๊ทธ๋ฃน ํจ์
๋ฐ์ด๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ์ ๊ทผ ๊ถํ์ด๋ CRUD ๊ถํ์ ์ ์ํ๋ ๊ธฐ๋ฅ
grant
revoke
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด์ ๊ถํ ๋ถ์ฌ
์ด๋ฏธ ๋ถ์ฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด ๊ถํ์ ์ทจ์
ํธ๋์ญ์ ์ ์ด์ด.
transaction์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ ผ๋ฆฌ์ ์ฐ์ฐ ๋จ์.
start transaction
commit
rollback
commit, rollback์ด ๋์ฌ ๋๊น์ง ์คํ๋๋ ๋ชจ๋ SQL
์คํํ Query๋ฅผ ์ต์ข ์ ์ผ๋ก ์ ์ฉ.
์คํํ Query๋ฅผ ๋ง์ง๋ง commit์ ์ผ๋ก ์ทจ์์์ผ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌ
use ssafydb;
start stransaction;
...
rollback;
...
commit;
...
savepoint f1;
...
rollback to f1;