SQL
SQL
SQL : Structured Query Language
Data Base ์์คํ ์์ ์๋ฃ๋ฅผ ์ฒ๋ฆฌํ๋ ์ฉ๋๋ก ์ฌ์ฉ๋๋ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ ์ง์ ์ธ์ด. ์์คํ์, ํน์ ์ํ์ด๋ผ๊ณ ์ฝ๋๋ค. Data Base์ ์ ๊ทผํ ๋ ์ฌ์ฉ๋๋ค.
๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์กด์ฌํ๋ค, ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์
๋ง๋ค ๋ค๋ฅด๊ฒ ์ง๋ง ๊ฑฐ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋
SQL์ interface ๊ธฐ๋ฐ์ผ๋ก ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ์ฌ์ฉ์ด๊ฐ๋ฅํ๋ค.
์์
- ์กฐํ / ๊ฒ์ โ Select => Query
- ์ ๋ ฅ / ์์ / ์ญ์ โ insert / update / delete => DML
- table ์์ฑ / ์ญ์ / ์์ โ create / drop/ alter => DDL
- ์ ์ฅ / ์ทจ์ โ TCL
# Notation Rule
* ๋๋ฌธ์ : keyword
* ์๋ฌธ์ : identifier
* [ ] : 0 ~ N
* table Name : t/n
* Columm Name : c/n
t/n์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์จ๋ค
# Query : Select * from t/n
table ์์ฑ
# DDL ==> create/drop
create table t/n{
C/N DataType [ default ],
C/N DataType [ default ],
....
C/N DataType [ default ]
}
table data ์ ๋ ฅ / ์ญ์ / ์์
# DML ==> insert , DELETE , UPDATE
Insert
into(SET) ( C/N, C/N, ....)
Value (value, value, ....);
table์ ์ ์ฅ๋ data๋ฅผ data base์ ์ ์ฅ์ํด
# TCL ==> Commit / rollback
์ฐ๋ฆฌ๊ฐ ์ง์ค์ ์ผ๋ก ๋ด์ผํ๋ ๋ถ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ Qurey๋ถ๋ถ์ select์ด๋ค.
์
๋ ฅ๋ฐ์ ํ
์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ Select์ ํตํด์ ์ฐ์ฐ , ์์ ๋ฑโฆ. ์ ํ ์ ์๋ค.
์กด์ฌํ์ง ์๋ C/N์ ๋ถ๋ฌ ์ฐ์ฐ๊ณผ ํจ์๋ฅผ ํตํด ์๋ก์ด ๋ฐ์ดํฐ ์ปฌ๋ผ์ ๋ง๋ค์ด ๋ผ ์ ์๋ค.
name salary // as๋ฅผ ํตํด ์ด๋ฆ์ ์ง์
ํ๊ธธ๋ 200
ํ๊ธธ์ 400
๊ธธ๋์ด 300
SELECT
salary [as] ์๊ธ, salary*12 ์ฐ๋ด // ํ์ํ ์ปฌ๋ผ๋ง ๋ถ๋ฌ์ฌ ์ ์๋ค.
from emp_test;
salary (์๊ธ) salary*12 (์ฐ๋ด)
200 2400
400 4800
300 3600
์์ ๊ฐ์ด ์กด์ฌํ์ง ์๋ ์๊ธ ์ปฌ๋ผ์ ์ฐ์ฐ์ ํตํด ๋ง๋ค์ด ๋ผ ์ ์๋ค.
์ด๊ฒ๋ฟ๋ง ์๋๋ผ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋๋ฐ ์ ์ฉํ ๊ธฐ๋ฅ๋ค์ ๋ง์ด ์ง์ํด์ค๋ค.
C/N [AS] ~
// select์ ์ปฌ๋ผ๋ค์ ์ง์
name [as] ์ด๋ฆ , salary [as] ์๊ธ , salary*12 [as] ์ฐ๋ด
* as ์์ด๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค
์ค๋ฆ์ฐจ์(ASC) ๋ด๋ฆผ์ฐจ์(DESC)
// ์ค๋ฆ์ฐจ์(ASC) ๋ด๋ฆผ์ฐจ์(DESC)
SELECT
name ์ด๋ฆ , salary ์๊ธ, salary*12 ์ฐ๋ด // ํ์ํ ์ปฌ๋ผ๋ง ๋ถ๋ฌ์ฌ ์ ์๋ค.
from emp_test
order by salary [ASC(DESC)];
์ด๋ฆ ์๊ธ ์ฐ๋ด
ํ๊ธธ๋ 200 2400
๊ธธ๋์ด 300 3600
ํ๊ธธ์ 400 4800
ASC ๋ ์ค๋ฆ์ฐจ์ , DESC๋ ๋ด๋ฆผ์ฐจ์ ๋๋ค ์์ด ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. defualt ๊ฐ์ ASC ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ๋ฐ์ดํฐ๋
์์๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ฌธ์ ์ปฌ๋ผ์ด๋ ๋ ์ง ์ปฌ๋ผ๋ฑ ๋ํ ์ ๋ ฌ์ด ๊ฐ๋ฅํ๋ค.
order by name , salary ๋ ๊ฐ๋ฅํ๋ค.
์ด๋ ๊ฒ ์ ๋ ฌ์ ํ๊ฒ๋๋ฉด NULL๊ฐ์ ๊ฐ์ง ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ ๊ฒ์ด๋ค. NULL์ ๋ฐ์ดํฐ์ ์ต์์๋ก ์กด์ฌํ๋ค.
์ด๊ฒ์ด ๋ง์ ์๋ค๋ฉด ์์ ์ด ๊ฐ๋ฅํ๋ฐ NULLS FIRST, NULLS LAST๋ฅผ ๋ถ์ฌ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
NULL
SQL์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ฉด ์๋ฌด๋ฐ ๋ฐ์ดํฐ๊ฐ์ด ์
๋ ฅ๋์์ง ์์ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด๊ฒ์ ๋น์ด์๋ ๊ฐ์ด ์๋ NULL ๊ฐ์ด๋ผ๊ณ ํ ์ ์๋ค.
NULL๋ก ๋น์ด ์๋ ๊ฐ์ ์ฝ๊ฐ์ ์ฝ๋๋ฅผ ํตํด ์ํ๋ ๋ฐ์ดํฐ๋ก ๋ณ๊ฒฝ๊ณผ ์์ ์ด ๊ฐ๋ฅํ๋ค.
// NVL
NVL(C/N, 0)
* C/N ์ NULL๊ฐ์ 0์ผ๋ก ์ด๊ธฐํํ๋ค.
// NVL2
NVL2(salary, ~~~, 0)
* C/N์ NULL๊ฐ์ 0์ผ๋ก ์ด๊ธฐํ, NULL์ด ์๋ ๊ฐ์ ~~~ ์ผ๋ก ์ด๊ธฐํ ์ํจ๋ค.
DECODE()๋ผ๋ ํจ์๊ฐ ์กด์ฌํ๋๋ฐ ๋ค๋ฅธ ์ธ์ด๋ก ์น๋ฉด if๋ฌธ์ผ๋ก ๋ณผ ์ ์๋ค.
// DECODE()
SELECT
name , Decode(title,
NULL, '<์ง๊ธ์์>', // if else title์ด NULL์ด๋ฉด <์ง๊ธ์์>
'์ฌ์ฅ' , 'ํ์ฌ์์๋ฒ์ง', // if else ์ฌ์ฅ์ด๋ฉด ํ์ฌ์์๋ฒ์ง
'๋ถ์ฌ์ฅ' , 'ํ์ฌ์ ์ด๋จธ๋', // if else ๋ถ์ฌ์ฅ์ด๋ฉด ํ์ฌ์ ์ด๋จธ๋
'์ง๊ธ์์'), title // else ์๋ฌด๊ฒ๋ ์ํ์ง ์์ผ๋ฉด ์ง๊ธ์์
from emp_test;
WHERE์ ์กฐ๊ฑด
SELECT์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ผ๋ฉด ์ํ๋ ๋ฐ์ดํฐ๋ง ์ถ๋ ฅํ๊ณ ์ถ์๋๊ฐ ์๋ค ๊ทธ๋ด ๋ ์ฌ์ฉํ๋๊ฒ์ด WHERE์ด๋ค.
| ์ฐ์ฐ์ | ์ค๋ช
|
|โโโ-|:โโโโ-:|
| BETWEEN a AND b | a์ b์ฌ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ (a , b ๊ฐ ํฌํจ) |
| IN (list) | list์ ๊ฐ ์ค ์ด๋ ํ๋์ ์ผ์นํ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ |
| LIKE | ๋ฌธ์ ํํ๋ก ์ผ์นํ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ(% , _ ์ฌ์ฉ) |
| IS NULL| NULL ๊ฐ์ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ |
| NOT ~ | NOT์ ๋ถ์ด๋ฉด ์ฐ์ฐ์์ ์กฐ๊ฑด์ ๋ฐ๋๋๋ ๊ฐ์ ์ถ๋ ฅ |
// BETWEEN a AND b
salary BETWEEN 200 AND 300
* 200์์ 300 ์ฌ์ด์ ์กด์ฌํ๋ ํ๋ง ์ถ๋ ฅ
// IN (list)
salary IN (200, 300)
* 200 ๋๋ 300์ ๊ฐ์ง๋ ํ๋ง ์ถ๋ ฅ
// LIKE
salary LIKE '20%' // 20์ ํฌํจํ๋ 20 ~ ๊ฐ์ง๋ ํ์ ์ถ๋ ฅ
salary LIKE '%0' // 0์ผ๋ก ๋๋๊ณ ~ 0 ๊ฐ์ง๋ ํ์ ์ถ๋ ฅ
salary LIKE '2__' // 2๋ก ์์ํ๋ ๋ฌธ์์๊ฐ 3๊ฐ์ธ ๋ฌธ์๋ฅผ ์ถ๋ ฅ
* ' % ' ๋ ์
๋ ฅ ๋ฌธ์๋ถํฐ๋ฅผ ๋งํ๋ค.
' _ ' ๋ ์
๋ ฅ ๋ฌธ์์ ๋ฌธ์์ ํ๊ฐ์ ๊ฐฏ์๋ฅผ ์๋ฏธ
// IS NULL
salary IS NULL
* salary ๊ฐ NULL์ ๊ฐ์ง๋ ํ์ ์ถ๋ ฅ
// NOT~
NOT์ ์ฌ์ฉํ๋ฉด ํด๋น ์กฐ๊ฑด์ ๋ฐ๋๋๋ ํ์ ์ถ๋ ฅํ๋ค.
Leave a comment