๐SQL ๋ฌธ์ฅ๋ค์ ์ข ๋ฅ
1. DML: data manipulation language
- select = ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ค์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋ ๊ฒ์ํ๊ธฐ ์ํ ๋ช ๋ น์ด, retrieve๋ผ๊ณ ๋ ํจ
- insert, update, delete = ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ๋ค์ด์๋ ๋ฐ์ดํฐ์ ๋ณํ์ ๊ฐํ๋ ์ข ๋ฅ์ ๋ช ๋ น์ด๋ค(์ฝ์ , ์์ , ์ญ์ )
2. DDL : data definition language
- create, alter, drop, rename : ํ ์ด๋ธ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ ๋ฐ ์ฌ์ฉํ๋ ๋ช ๋ น์ด๋ค๋ก, ๊ทธ๋ฌํ ๊ตฌ์กฐ๋ฅผ ์์ฑ/๋ณ๊ฒฝ/์ญ์ /์ด๋ฆ๋ณ๊ฒฝ ํ๋๋ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ด๋ จ๋ ๋ช ๋ น์ด
-> Alter table ํ ์ด๋ธ modify(์ปฌ๋ผ, ํ์ )
3. DCL : data control language
- grant, revoke : ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๊ณ ๊ฐ์ฒด๋ค์ ์ฌ์ฉํ๋๋ก ๊ถํ์ ์ฃผ๊ณ ํ์ํ๋ ๋ช ๋ น์ด
4. TCL : transaction control language
- commit, rollback : ๋ ผ๋ฆฌ์ ์ธ ์์ ์ ๋จ์๋ฅผ ๋ฌถ์ด์ DML์ ์ํด ์กฐ์๋ ๊ฒฐ๊ณผ๋ฅผ ์์ ๋จ์(ํธ๋์ญ์ ) ๋ณ๋ก ์ ์ดํ๋ ๋ช ๋ น์ด
๐SELECT ๋ฌธ
SELECT (all/distinct) ๋ณด๊ณ ์ถ์ ์นผ๋ผ๋ช ...
FROM ํ ์ด๋ธ
- all : ๊ธฐ๋ณธ์ต์ , ๋ชจ๋ ์นผ๋ผ๋ค
- distinct : ์ค๋ณต๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ 1๊ฑด์ผ๋ก ์ฒ๋ฆฌ
๐ NULL๊ณผ ์ฐ์ฐ
๋๊ฐ๊ณผ์ ์ฌ์น์ฐ์ฐ์ ๋๊ฐ๋ฆฌํด(์ง๊ณํจ์๋ ๋์ ์ ์ธํ๊ธฐ ๋๋ฌธ์ ์ ์์๋)
๋๊ฐ๊ณผ์ ๋น๊ต์ฐ์ฐ์ false ๋ฆฌํด
ํน์ ๊ฐ๊ณผ์ ๋น๊ต ๋ถ๊ฐ
1. ํํ์1์ด ๋๊ฐ์ด๋ฉด ํํ์ 2๋ก ๋์ฒด
[์ค] NVL(ํํ์1, ํํ์2)
[์] ISNULL(ํํ์1, ํํ์2)
2. ํํ์1์ด ํํ์2์ ๊ฐ์ผ๋ฉด ๋๊ฐ, ์๋๋จ ํํ์1 ์ ์ง
NULLIF(ํํ์1, ํํ์2)
3. ํํ์1์ด ๋๊ฐ์ด๋ฉด ํํ์2, ํํ์2๊ฐ ๋๊ฐ์ด๋ฉด ํํ์...
COALESCE(ํํ์1, ํํ์2..)
๐ EQUI JOIN ๋ฌธ์ฅ
์กฐ์ธ์ ๊ด์ฌํ๋ ํ ์ด๋ธ๊ฐ์ ์นผ๋ผ๊ฐ๋ค์ด ์ ํํ๊ฒ ์ผ์นํ๋ ๊ฒฝ์ฐ
1. WHERE ์ ์ JOIN์กฐ๊ฑด์ ๋ฃ๋๋ค
SELECT ํ ์ด๋ธ1.์ปฌ๋ผ, ํ ์ด๋ธ2.์ปฌ๋ผ
FROM ํ ์ด๋ธ1, ํ ์ด๋ธ2
WHERE ํ ์ด๋ธ1.์ปฌ๋ผ1 = ํ ์ด๋ธ2.์ปฌ๋ผ2;
2. ON ์ ์ JOIN์กฐ๊ฑด์ ๋ฃ๋๋ค
SELECT ํ ์ด๋ธ1.์ปฌ๋ผ, ํ ์ด๋ธ2.์ปฌ๋ผ
FROM ํ ์ด๋ธ1 JOIN ํ ์ด๋ธ2
ON ํ ์ด๋ธ1.์ปฌ๋ผ1 = ํ ์ด๋ธ2.์ปฌ๋ผ2;
๐์งํฉ์ฐ์ฐ์
์กฐ๊ฑด: ์งํฉ์ฐ์ฐ์ด ๋๋ ๋ ์ง์๋ ์ปฌ๋ผ์ ๋์ผ, ์ํธํธํ ๊ฐ๋ฅํ ํ์ , ๋ณ์นญ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๊ผญ ๋ณ์นญ์ ์ฌ์ฉ
1. UNION : ์ค๋ณต์ ๊ฑฐ๊ฐ ๋ ํฉ์งํฉ
2. UNION ALL : ์ค๋ณต์ด ํ์ฉ๋ ํฉ์งํฉ(์๋๋น ๋ฆ)
3. INTERSECT : ์ค๋ณต์ ๊ฑฐ๋ ๊ต์งํฉ
4. MINUS(ORACLE)/ EXCEPT(MS_SQL): ์์ SQL๋ฌธ์ ๊ฒฐ๊ณผ์์ ๋ค์ SQL๊ฒฐ๊ณผ๋ฅผ ๋บ ์ฐจ์งํฉ
๐์ ๋ ฌ
๊ธฐ๋ณธ์ ์ธ ์ ๋ ฌ์ ์ค๋ฆ์ฐจ์
์ค๋ผํด์์ ๋๊ฐ์ ๊ฐ์ฅ ํฐ ์์ผ๋ก ๊ฐ์ฃผ, SQL server์ ๊ฐ์ฅ ์์์์ผ๋ก ๊ฐ์ฃผ
์ผ๋ฐ์ ์ผ๋ก select์ ์ ์๋ ์ปฌ๋ผ ๋ฐ ๊ณ์ฐ์ผ๋ก ์ ๋ ฌ์ด ๊ฐ๋ฅํ์ง๋ง ์ง๊ณํจ์์์๋ ๊ผญ ๋ช ์๋ ์ปฌ๋ผ๋ง ๊ฐ๋ฅ
๐์์๊ด๊ณ์ฐ์ฐ์
select์ฐ์ฐ์ where์ ๋ก ๊ตฌํ
project ์ฐ์ฐ์ select์ ๋ก ๊ตฌํ
join ์ฐ์ฐ์ ๋ค์ํ join๊ธฐ๋ฅ์ ๊ตฌํ
divide ํ์ฌ ์ฌ์ฉํ์ง ์์
1.
CREATE TABLE ์๋น์ค
(
์๋น์ค๋ฒํธ varchar2(10) primary key,
์๋น์ค๋ช
varchar2(100) null,
๊ฐ์์ผ์ date not null );
#ใฑ
select * from ์๋น์ค where ์๋น์ค๋ฒํธ = 1;
#ใด
insert into ์๋น์ค value ('999', '' , '2015-11-11');
#ใท
select * from ์๋น์ค where ์๋น์ค๋ช
= '';
#ใน
select * from ์๋น์ค where ์๋น์ค๋ช
is null
- ์๋น์ค๋ฒํธ ์นผ๋ผ์ ๋ชจ๋ ๋ ์ฝ๋๊ฐ '001'๊ณผ ๊ฐ์ ์ซ์ํ์์ผ๋ก ์ ๋ ฅ๋์ด ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ค
- ใด๊ณผ ๊ฐ์ด ๋ฐ์ดํฐ( ' ' ) ๋ฅผ ์ ๋ ฅํ๋ฉด ์๋น์ค๋ช ์นผ๋ผ์ ๋ฐ์ดํฐ์ ๋ํด์ ์ค๋ผํด์์๋ NULL ๊ฐ์ผ๋ก ์ ๋ ฅ๋๋ค
- ใด๊ณผ ๊ฐ์ด ๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ๋์ด์์ ๋ ์ค๋ผํด์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ค๋ฉด ์๋น์ค๋ช is null ์กฐ๊ฑด์ผ๋ก ์ ๋ ฅํ๋ค
- ใด๊ณผ ๊ฐ์ด ๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ๋์ด์์ ๋ SQL server ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ค๋ฉด ์๋น์ค๋ช = ' ' ์กฐ๊ฑด์ผ๋ก ์ ๋ ฅํ๋ค
2. to chart ์ to date
- where to_chart(end_date, 'YYYYMM')= '201501' -> 2015๋ 1์ 31์ผ 23์ 59๋ถ
- -> chart์ผ ๊ฒฝ์ฐ 'YYYYMM'์ 'day๋ ์๋ง
- where to_date('201501', 'YYYYMM') ='end_date -> 2015๋ 1์ 1์ผ 00์ 00๋ถ
- -> date์ผ ๊ฒฝ์ฐ 'YYYYMM'์ 'day๋ ์์ด
3. 2023๋ 1์ 10์ 10๋ถ
select to_chart(to_date('2023.01.10.10', 'YYYY.MM.DD HH24')
# 2023๋
01์10์ผ 10์์์
+ 1/24/(60/10),'YYYY.MM.DD HH24:Mi:SS') from dual
# 10๋ถ์ ๋ํจ
1/24/60 = 1๋ถ
1/24/(60/10) = 10๋ถ
4. case ๋ฌธ
case when loc = 'new york' then 'east' else 'etc' end as area
case loc when 'new york' then 'east' else 'etc' end as area
decode(loc, 'new york', 'east', 'ect' )
5. ๊ด๊ณ ๋งค์ฑ ID๋ณ ์ต์ด๋ก ๊ฒ์ํ ๊ด๊ณ ๋ช ๊ณผ ๊ด๊ณ ์์์ผ ์ถ๋ ฅ
[๊ด๊ณ ]๊ด๊ณ ID | [๊ด๊ณ ๊ฒ์] ๊ด๊ณ ๊ฒ์๋ฒํธ | [๊ด๊ณ ๋งค์ฒด] ๊ด๊ณ ๋งค์ฒดID |
๊ด๊ณ ๋ช | ๊ด๊ณ ID(FK) ๊ด๊ณ ๋งค์ฒดID(FK) ๊ด๊ณ ์์์ผ์ ๊ด๊ณ ์ข ๋ฃ์ผ์ |
๊ด๊ณ ๋งค์ฒด๋ช |
from ๊ด๊ณ ๊ฒ์ a, ๊ด๊ณ b, ๊ด๊ณ ๋งค์ฒด c,
(select ๊ด๊ณ ๋งค์ฒดID, MIN(๊ด๊ณ ์์์ผ)as ๊ด๊ณ ์์์ผ์
from ๊ด๊ณ ๊ฒ์
group by ๊ด๊ณ ๋งค์ฒดid) d
where a.๊ด๊ณ ์์์ผ์ = d.๊ด๊ณ ์์์ผ์
and a.๊ด๊ณ ๋งค์ฒดid = d.๊ด๊ณ ๋งค์ฒดid
and a.๊ด๊ณ id = b.๊ด๊ณ id
and a.๊ด๊ณ ๋งค์ฒดid = c.๊ด๊ณ ๋งค์ฒดid
order by c.๊ด๊ณ ๋งค์ฒด๋ช
6. [ORACLE] order by + case when
ID |
100 |
100 |
200 |
200 |
200 |
999 |
999 |
select ID from TBL
group by ID
having count(*) = 2
order by (case when ID = 999 then 0 else ID end)
# ID๋ณ๋ก ๊ทธ๋ฃนํ๋ฅผ ํด์ ๊ฐฏ์๊ฐ 2์ธ ๊ฒ๋ง ์ถ๋ ฅ์ ํ๋๋ฐ, ์ ๋ ฌ์ ID๊ฐ 999์ธ ๊ฒ์ 0๋ฒ์งธ๋ก ์ ๋ ฌํ๋ค
ID |
100 |
999 |
7. to_date ์ to_chart
select to_chart(to_date('2019.02.05','YYYY.MM.DD') + 1/12/(60/30), 'YYYY.MM.DD HH24:MI:SS')
from dual;
1) to_date('2019.02.05','YYYY.MM.DD') = 2019.02.05 -> ๋ ์ง๋ก ๋ฐ๊พธ๊ธฐ
2) 2019.02.05 + 1/12/(60/30) = 2019๋ 2์ 5์ผ 1์
- 1/24 = 1์๊ฐ = 1์ผ(24์๊ฐ)์ 24๋ก ๋๋๊ธฐ(60๋ถ)
- 1/24/60 = 1๋ถ = 1์ผ์ 24์๊ฐ์ผ๋ก ๋๋๊ณ 60๋ถ์ผ๋ก ๋๋๊ธฐ
- 1/24/(60/10) = 10๋ถ = 1์ผ์ 24์๊ฐ์ผ๋ก ๋๋๊ณ 6๋ถ์ผ๋ก ๋๋๊ธฐ
- 1/12/(60/30) = 1์๊ฐ = 1์ผ์ 12์๊ฐ์ผ๋ก ๋๋๊ณ (2์๊ฐ) 2๋ถ์ผ๋ก ๋๋๊ธฐ
- 1.5/24 = 1์๊ฐ 20๋ถ
- 1.5/24/6 = 15๋ถ
8. JOIN์ ๋ํ ์ค๋ช
- ์ผ๋ฐ์ ์ผ๋ก ์กฐ์ธ์ PK์ FK์ ์ฐ๊ด์ฑ์ ์ํด ์ฑ๋ฆฝ๋๋ค
- DBMS์ตํฐ๋ง์ด์ ๋ FROM์ ์ ๋์ด๋ ํ ์ด๋ธ์ ์์๋ก 2๊ฐ์ ๋์ฉ ๋ฌถ์ด์ ์กฐ์ธ์ ์ฒ๋ฆฌํ๋ค
- EQUI JOIN์ ์กฐ์ธ์ ๊ด์ฌํ๋ ํ ์ด๋ธ ๊ฐ์ ์นผ๋ผ๋ค์ด ์ ํํ๊ฒ ์ผ์นํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์ด๋ค
- EQUI JOIN์ '=' ์ฐ์ฐ์์ ์ํด์๋ง ์ํ๋๋ฉฐ, ๊ทธ ์ด์ธ์ ๋น๊ต ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๋ชจ๋ NON EQUI JOIN์ด๋ค
- ๋๋ถ๋ถ NON EQUI ์กฐ์ธ์ ์ํํ ์ ์์ง๋ง, ๋๋ก๋ ์ค๊ณ์์ ์ด์ ๋ก ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ ์๋ค
9.
[์ ํ] ์ ํ์ฝ๋ |
[์์ฐ์ ํ] ๋ผ์ธ๋ฒํธ(FK) ์ ํ์ฝ๋(FK) |
[์์ฐ๋ผ์ธ] ๋ผ์ธ๋ฒํธ |
์ ํ๋ช
์ ํ์ ํ์ฝ๋ ๋จ์ |
์ต์ข ๊ฐ๋์ผ์ง |
- ์ ํ, ์์ฐ๋ผ์ธ, ์์ฐ์ ํ ์ํฐํฐ๋ฅผ inner joinํ๊ธฐ ์ํด์๋ ์์ฐ์ ํ ์ํฐํฐ๋ where์ ์ ์ต์ 2๋ฒ ๋ํ๋์ผ ํ๋ค
- ์ ํ๊ณผ ์์ฐ๋ผ์ธ ์ํฐํฐ๋ฅผ join์ ์ ์ ํ join์กฐ๊ฑด์ด ์์ผ๋ฏ๋ก ์นดํฐ์์ ๊ณฑ์ด ๋ฐ์ํ๋ค
- * ์นดํฐ์์๊ณฑ = FROM์ ์ 2๊ฐ ์ด์์ ํ ์ด๋ธ์ด ์์ ๋ ๋ ํ ์ด๋ธ ์ฌ์ด์ ์ ํจํ join์กฐ๊ฑด์ ์ ์ง ์์์๋ ํด๋นํ ์ด๋ธ์ ๋ํ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ถ ๊ฒฐํฉํ์ฌ ํ ์ด๋ธ์ ํ ๊ฐฏ์๋ฅผ ๊ณฑํ ๋งํผ์ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋๋ค -> ์กฐ์ธ์กฐ๊ฑด์ ์๋ต/์กฐ์ธ์กฐ๊ฑด์ด ์๋ชป๋จ ๋ฑ
- * cross ์กฐ์ธ = ์นดํฐ์์๊ณฑ์ ํ์คํํ์ฌ ๋ง๋ ์กฐ์ธ
- ํน์ ์์ฐ๋ผ์ธ๋ฒํธ์์ ์์ฐ๋๋ ์ ํ์ ์ ํ๋ช ์ ์๊ธฐ ์ํด์๋ ์ ํ, ์์ฐ๋ผ์ธ๊น์ง 2๊ฐ์ ์ํฐํฐ๋ง ์กฐ์ธํ๋ฉด ๋๋ค
10.cross ์กฐ์ธ
ํ ์ด๋ธ๊ฐ ์กฐ์ธ ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ ์๊ธธ ์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ์ ์กฐํฉ(M*N)
#[1]
select ename, dname
from emp, dept
#[2]
select ename, dname
from emp cross join dept
11. ๋์ผํ join ๊ฒฐ๊ณผ
# using ์ -> using์ ์๋ ๋ณ์นญ X
select t.region-name, t.team_name, t.stadium_id, s.stadium_name
from team t inner join stadium s
using(stadium_id)
# on์ -> ๋ณ์นญ์ฌ์ฉ๊ฐ๋ฅ
select team.region-name, team.team_name, team.stadium_id, stadium.stadium_name
from team inner join stadium
on team.stadium_id = stadium.stadium_id
# where ์ -> ๋ณ์นญ
select t.region-name, t.team_name, t.stadium_id, s.stadium_name
from team t , stadium s
where t.stadium_id = s.stadium_id
# where ์
select team.region-name, team.team_name, team.stadium_id, stadium.stadium_name
from team , stadium
where team.stadium_id = stadium.stadium_id
#natural join -> ๋ํ
์ด๋ธ๊ฐ ๋์ผํ ์นผ๋ผ์ด stadium_id๋ฐ์ ์๋ ๊ฒฝ์ฐ
select region-name, team_name, stadium_id, stadium_name
from team natural join stadium
*USING = on์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก where์ ๋์ join์ ๋ํ ์กฐ๊ฑด์ ์ธ๋ ์ฌ์ฉ, join์ ๋ง์กฑํ๋ ์ปฌ๋ผ๋ง ๊ดํธ์ ์ ๋ ฅ
-- where ์
select a.name, b,age
from student a, data b
where a.id = b.id;
-- on ์
select a.name, b,age
from student a join data b
on a.id = b.id;
-- using ์
select a.name, b,age
from student a join data b
using (id);
11. outer join๊ณผ union
#[1]
select a.id, b.id
from tbl a full outer join tbl2 b
on a.id = b.id
#[2]
select a.id, b.id
from tbl a left outer join tbl2 b
on a.id = b.id
union
select a.id, b.id
from tbl a right outer join tbl2 b
on a.id = b.id
#[3]
select a.id, b.id
from tbl a , tbl2 b
where a.id = b.id # inner
union all
select a.id, null
from tbl a
where not exists(select 1 from tbl2 b where a.id = b.id) #a-b์ฐจ์งํฉ
union all
select b.id, null
from tbl b
where not exists(select 1 from tbl2 a where a.id = b.id) #b-a์ฐจ์งํฉ
0. SQL ์ค๋ฅ
select ์ง์ญ, sum(๋งค์ถ๊ธ์ก)
from ์ง์ญ๋ณ๋งค์ถ
group by ์ง์ญ
order by ๋
desc #์ง์ญ๋ณ๋ก ๊ทธ๋ฃนํ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ select ์ ์ ๊ธฐ์ ๋์ง ์๋ '๋
'์ผ๋ก ์ ๋ ฌ๋ ์ ์๋ค
'์๊ฒฉ์ฆ > SQLD' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ค๋ต๋ ธํธ] 1. ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ์ดํด2 (0) | 2024.03.09 |
---|---|
SQL ๋์ผ์ฐ์ฐ (0) | 2024.03.04 |
[์ค๋ต๋ ธํธ] 2-2. SQL ํ์ฉ (0) | 2024.03.04 |
[์ค๋ต๋ ธํธ] 2-3. ๊ด๋ฆฌ๊ตฌ๋ฌธ (0) | 2024.03.02 |
[์ค๋ต๋ ธํธ] 1. ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ์ดํด (0) | 2024.03.02 |