SQL
โ ๋ฐ์ดํฐ ์ ์ ์ธ์ด(Data Definition Language; DDL)
- ๋ฐ์ดํฐ ์ ์ฅ ๊ตฌ์กฐ๋ฅผ ๋ช ์ํ๋ ์ธ์ด
- ํ ์ด๋ธ ์คํค๋ง์ ์ ์, ์์ , ์ญ์ ๋ฅผ ์ํ ๋ช ๋ น๋ฌธ ์ ๊ณต
โ
โ ๋ฐ์ดํฐ ์กฐ์ ์ธ์ด(Data Manipulation Language; DML)
- ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ๊ณ ์กฐ์ํ ์ ์๊ฒ ํ๋ ์ธ์ด
- ๋ ์ฝ๋์ ๊ฒ์(search), ์ฝ์ (insert), ์ญ์ (delete), ์์ (update)์ ์ํ ๋ช ๋ น๋ฌธ ์ ๊ณต
โ
๋ฐ์ดํฐ ์ ์ ์ธ์ด(DDL)
โฝ ํ ์ด๋ธ ์์ฑ(create table) - ๊ธฐ๋ณธํค, ์ธ๋ํค ์ค์
โฝ ํ ์ด๋ธ ์ญ์ (drop table)
โฝ ํ ์ด๋ธ ์์ (alter table)
โ
ํ ์ด๋ธ ์์ฑ
ํ์ : create table <ํ ์ด๋ธ ์ด๋ฆ> (<ํ๋๋ฆฌ์คํธ>)
โฝ<ํ๋๋ฆฌ์คํธ>๋ '<ํ๋๋ช > <๋ฐ์ดํฐํ์ >'์ ๋์ด
โ
์) department ํ ์ด๋ธ์ ์์ฑํ๋ SQL๋ฌธ
create table department(
dept_id varchar2(10) not null,
dept_name varchar2(14) not null,
office varchar2(10)
)
→ not null์ ํด๋น ํ๋์ ๋์ ํ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธ
โ
๊ธฐ๋ณธํค ์ค์
- ํ ์ด๋ธ์์ ๊ธฐ๋ณธํค ์ญํ ์ ํ ํ๋๋ฅผ ์ง์
- constraint <์ ์ฝ์กฐ๊ฑด ์ด๋ฆ> primary key(<๊ธฐ๋ณธํค ํ๋๋ช >)
create table department(
dept_id varchar2(10) not null,
dept_name varchar2(14) not null,
office varchar2(10)
constraint pk_department primary key(dept_id)
)
create table department(
dept_id varchar2(10) primary key
dept_name varchar2(14) not null,
office varchar2(10)
)
์์ ์ง์ ๋๋ค ๊ฐ๋ฅ, dept_id ํ๋๋ฅผ ๊ธฐ๋ณธํค๋ก ์ง์
<์ ์ฝ์กฐ๊ฑด ์ด๋ฆ>์ ๋ค ๋ค๋ฅด๊ฒ ์ง์
โ
์ธ๋ํค ์ค์
- ํ ์ด๋ธ ์์ฑ ์ ์ธ๋ํค ์ญํ ์ ํ ํ๋๋ฅผ ์ง์
- constraint <์ ์ฝ์กฐ๊ฑด ์ด๋ฆ> foreign key (<์ธ๋ํค ํ๋๋ช >) references <์ฐธ์กฐ๋ ํ ์ด๋ธ๋ช >(<๊ธฐ๋ณธํค ํ๋๋ช >)
create table student(
stu_id varchar2(10),
resident_id varchar2(14) not null,
name varchar2(10) not null,
year int,
address varchar2(10),
dept_id varchar2(10),
constraint pk_student primary key(stu_id)
constraint fk_student foreign key(dept_id) references department(dept_id)
)
stu_id ํ๋๋ฅผ ๊ธฐ๋ณธํค๋ก ์ง์ , dept_id๋ฅผ ์ธ๋ํค๋ก ์ง์ ํจ
โ
ํ ์ด๋ธ ์ญ์
ํ์: drop table <ํ ์ด๋ธ ์ด๋ฆ>
โ ๋ค๋ฅธ ํ ์ด๋ธ์์ ์ธ๋ํค๋ก ์ฐธ์กฐ๋๋ ๊ฒฝ์ฐ์๋ ์ญ์ ํ ์ ์์
โ
ํ ์ด๋ธ ์์
- ๊ธฐ์กด ํ ์ด๋ธ์ ์๋ก์ด ํ๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด ํ๋๋ฅผ ์ญ์
ํ๋ ์ถ๊ฐ ํ์: alter table <ํ ์ด๋ธ ์ด๋ฆ> add <์ถ๊ฐํ ํ๋๋ช ๋ฐ์ดํฐ ํ์ >
์) student ํ ์ด๋ธ์ age ํ๋๋ฅผ ์ถ๊ฐ
alter table student add age int
ํ๋ ์ญ์ ํ์: alter table <ํ ์ด๋ธ ์ด๋ฆ> drop column <์ญ์ ํ ํ๋๋ช >
์) student ํ ์ด๋ธ์ age ํ๋๋ฅผ ์ถ๊ฐ
alter table student drop column age
๊ธฐ๋ณธํค, ์ธ๋ํค ์ฃผ์์ฌํญ
โ ์ธ๋ํค๋ฅผ ๊ฐ๋ ํ ์ด๋ธ์ ์์ฑํ ๋ ์ธ๋ํค๊ฐ ์ฐธ์กฐํ๋ ํ ์ด๋ธ์ ๋จผ์ ์์ฑํด์ผํจ
โ ํ ์ด๋ธ์ ์ญ์ ํ ๋๋ ์ธ๋ํค๋ก ์ฐธ์กฐ๋๋ ํ ์ด๋ธ์ ์ญ์ ํ ์ ์์
โ ์ธ๋ํค๋ฅผ ํด์ ํ๊ฑฐ๋ ์ธ๋ํค๋ฅผ ์ฐธ์กฐํ๋ ํ ์ด๋ธ์ ๋จผ์ ์ญ์ ํด์ผํจ
โ
๋ฐ์ดํฐ ์กฐ์ ์ธ์ด(DML)
โ
๋ ์ฝ๋ ์ฝ์
ํ์ : insert into <ํ ์ด๋ธ์ด๋ฆ>(<ํ๋ ๋ฆฌ์คํธ>) values (<๊ฐ ๋ฆฌ์คํธ>)
<ํ๋ ๋ฆฌ์คํธ>
โฝ ์๋ก์ด ๋ ์ฝ๋๊ฐ ์ฝ์ ๋ ํ ์ด๋ธ์ ํ๋๋ค์ ๋์ด
<๊ฐ ๋ฆฌ์คํธ>
โฝ <ํ๋ ๋ฆฌ์คํธ>์ ์์์ ๋ง์ถฐ ์ฝ์ ๋ ๊ฐ๋ค์ ๋์ด
โ
โ <ํ๋ ๋ฆฌ์คํธ>์ ๋์ด๋์ง ์์ ํ๋์ ๋ํด์๋ NULL์ด ์ ๋ ฅ
โ NULL์ด ํ์ฉ๋์ง ์๋๋ก ์ ์๋ ํ๋์๋ ๋ฐ๋์ ๊ฐ์ ์ง์ ํด์ผํจ
โ <ํ๋ ๋ฆฌ์คํธ>๋ฅผ ์๋ตํ ๊ฒฝ์ฐ <๊ฐ ๋ฆฌ์คํธ>์๋ ํ ์ด๋ธ์ ์ ์ํ ๋ ์ฌ์ฉํ ํ๋๋ค์ ์์์ ๋ง์ถฐ์ ๋ชจ๋ ๊ฐ์ ๋์ดํด์ผํจ
โ์)
insert into department(dept_id, dept_name, office)
values ('920', '์ปดํจํฐ๊ณตํ๊ณผ', '210ํธ')
<ํ๋๋ฆฌ์คํธ>๋ฅผ ์๋ตํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ ์
insert into department
values ('923', '์ฐ์
๊ณตํ๊ณผ', '207ํธ')
๋ ์ฝ๋ ์ฝ์ ์ ์ฃผ์์ฌํญ
์ธ๋ํค ํ๋๋ฅผ ํฌํจํ๋ ๋ ์ฝ๋๋ฅผ ์ฝ์ ํ ๋ ์ฐธ์กฐํ๋ ํ ์ด๋ธ์ ํด๋น ํ๋์ ๊ทธ ๊ฐ์ ๊ฐ๋ ๋ ์ฝ๋๊ฐ ์กด์ฌํด์ผํจ
โ ์ฐธ์กฐ ํ ์ด๋ธ์ ๊ทธ๋ฐ ๋ ์ฝ๋๋ฅผ ๋จผ์ ์ฝ์ ํด์ผํจ
โ
๋ ์ฝ๋ ์์
ํ์ : update <ํ ์ด๋ธ ์ด๋ฆ> set <์์ ๋ด์ญ> where <์กฐ๊ฑด>
<์์ ๋ด์ญ>
โฝ ๋์ ํ ์ด๋ธ์ ํ๋์ ์ ์ฅ๋๋ ๊ฐ์ ์์ ํ๊ธฐ ์ํ ์ฐ์ ์
โฝ ',' ์ ์ด์ฉํ์ฌ ์ฌ๋ฌ ํ๋์ ๋ํ ์์ ๋ด์ญ์ ์ง์ ๊ฐ๋ฅ
<์กฐ๊ฑด>
โฝ ์์ ๋์์ด ๋ ๋ ์ฝ๋๋ฅผ ์ ํํ๊ธฐ ์ํ ์กฐ๊ฑด์ ๊ธฐ์
โฝ ๊ด๊ณ๋์์์ ์ ํ ์ฐ์ฐ(σ)์ ์กฐ๊ฑด์๊ณผ ๊ฐ์ ์๋ฏธ
โฝ where์ ์ ์๋ตํ ๊ฒฝ์ฐ, ํ ์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ์์
โ
์) student ํ ์ด๋ธ์์ ๋ชจ๋ ํ์๋ค์ ํ๋ ์ ํ๋์ฉ ์ฆ๊ฐ
update student
set year = year + 1
์) professor ํ ์ด๋ธ์์ '๊ณ ํฌ์' ๊ต์์ ์ง์๋ฅผ '๊ต์'๋ก ์์ ํ๊ณ ํ๊ณผ๋ฒํธ๋ฅผ '923'์ผ๋ก ์์
update professor
set position = '๊ต์', dept_id = '923'
where name = '๊ณ ํฌ์'
update professor set position = '๊ต์', dept_id = '923' where name = '๊ณ ํฌ์'
๋ ์ฝ๋ ์์ ์ ์ฃผ์์ฌํญ
โ ์ธ๋ํค๋ก ์ง์ ๋ ํ๋์ ๊ฐ์ ์์ ํ ๋ ์ธ๋ํค๊ฐ ์ฐธ์กฐํ๋ ํ ์ด๋ธ์ ์กด์ฌํ๋ ๊ฐ์ผ๋ก๋ง ์์ ๊ฐ๋ฅ
โ
๋ ์ฝ๋ ์ญ์
ํ์ : delete from <ํ ์ด๋ธ ์ด๋ฆ> where <์กฐ๊ฑด>
โฝ where ์ ์ ์ง์ ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ ์ฝ๋๋ค์ ๋ชจ๋ ์ญ์
โฝ where ์ ์ด ์๋ต๋๋ฉด ํ ์ด๋ธ์ ์๋ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ์ญ์
โ
์) professor ํ ์ด๋ธ์์ ์ด๋ฆ์ด '๊นํ์'์ธ ๊ต์๋ฅผ ์ญ์
delete from professor
where name = '๊นํ์'
โ delete๋ฌธ์ ์ด์ฉํ์ฌ ํ ์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ์ญ์ ํ๋๋ผ๋ ํ ์ด๋ธ์ ์ญ์ ๋์ง ์์
โ
๋ ์ฝ๋ ์ญ์ ์ ์ฃผ์์ฌํญ
โ ๋ค๋ฅธ ํ ์ด๋ธ์ ์ธ๋ํค์ ์ํด ์ฐธ์กฐ๋๋ ํ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ํ ์ด๋ธ์์ ๋ ์ฝ๋๋ฅผ ์ญ์ ํ ๊ฒฝ์ฐ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ
โ
๋ ์ฝ๋ ๊ฒ์
select ๋ฌธ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํ๋ ๋ ์ฝ๋๋ฅผ ์ฐพ๊ธฐ ์ํ ์ง์ ๋ฌธ์ฅ์ ํํ
- SQL์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋จ
ํ์ : select <ํ๋ ๋ฆฌ์คํธ> from <ํ ์ด๋ธ ๋ฆฌ์คํธ> where <์กฐ๊ฑด>
select
โฝ ์ง์ ๊ฒฐ๊ณผ๋ก ์ถ๋ ฅํ ํ๋๋ค์ ์ง์
โฝ ๊ด๊ณ๋์์ ์ถ์ถ(project)์ฐ์ฐ(π)์ ํด๋น
from
โฝ ์ง์ ์คํ๊ณผ์ ์ ํ์ํ ํ ์ด๋ธ๋ค์ ์ง์
โฝ ์ฌ๋ฌ ํ ์ด๋ธ๋ค์ด ๋์ด๋ ๊ฒฝ์ฐ, ๊ด๊ณ๋์์ ์นดํฐ์ ํ๋ก๋ํธ๋ฅผ ์๋ฏธ
where
โฝ ๊ฒ์๋์ด์ผ ํ๋ ๋ ์ฝ๋์ ๋ํ ์กฐ๊ฑด ๊ธฐ์
โฝ ๊ด๊ณ๋์์ ์ ํ ์ฐ์ฐ(σ)์์ ์ฌ์ฉ๋๋ ์กฐ๊ฑด์๊ณผ ๊ฐ์ ์๋ฏธ
โฝ ํน๋ณํ ์กฐ๊ฑด์ด ์์ ๊ฒฝ์ฐ ์๋ต ๊ฐ๋ฅ
select name, dept_name
from deparment, student
where department.dept_id = student.dept_id
์) student ํ ์ด๋ธ์์ ๋ชจ๋ ํ์๋ค์ ์ฃผ์๋ฅผ ๊ฒ์
select address from student
๊ฒ์ ๊ฒฐ๊ณผ์์ ์ค๋ณต๋ ๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด select ์ ์์ distinct ํค์๋๋ฅผ ์ฌ์ฉํด์ผํจ
โ
์) ๋ชจ๋ ํ์๋ค์ ์ฃผ์๋ฅผ ๊ฒ์ํ๋ ์ค๋ณต์ ์ ๊ฑฐํ๊ณ ์ถ๋ ฅ
select distinct address
from student
from ์ ์ ๋ํ๋ ํ ์ด๋ธ์์ ๋ชจ๋ ํ๋์ ๊ฐ์ ์ถ์ถํ ๊ฒฝ์ฐ, select ์ ์ ๋ชจ๋ ํ๋๋ฅผ ๋ช ์ํ ํ์ ์์ด '*' ์ฌ์ฉ
์) ํ์๋ค์ ๋ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ฒ์
select * from student
โ ํ๋๋ค์ ์ถ๋ ฅ ์์๋ ํ ์ด๋ธ์ ์ ์๋ ์์๋๋ก ์ถ๋ ฅ
โ
๋ ์ฝ๋์ ์์ ์ง์ (order by)
- ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํ์ฌ ์ถ๋ ฅํ๋ ๊ธฐ๋ฅ
ํ์ : select๋ฌธ ๋ง์ง๋ง์ ๋ค์๊ณผ ๊ฐ์ order by์ ์ ์ถ๊ฐ
order by <ํ๋๋ฆฌ์คํธ>
- ์ค๋ฆ์ฐจ์์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ฉฐ <ํ๋๋ฆฌ์คํธ>์ ์ฌ๋ฌ ๊ฐ์ ํ๋๋ฅผ ๋์ดํ ๊ฒฝ์ฐ ๋์ด๋ ์์๋๋ก ์ ๋ ฌ
โ
์) 3, 4ํ๋ ํ์๋ค์ ์ด๋ฆ๊ณผ ํ๋ฒ์ ๊ฒ์ํ๋, ํ์ ์ด๋ฆ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ ๊ฐ์ ์ด๋ฆ์ ๋ํด์๋ ํ๋ฒ์ ์ค๋ฆ์ฐจ์์ผ๋ก
select name, stu_id
from student
where year = 3 or year = 4
order by name, stu_id
๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ ํด๋น ํ๋ ์ด๋ฆ ๋ค์ desc ํค์๋๋ฅผ ์ฝ์
โ
์) ์์ ์ง์์์ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ ์ด๋ฆ์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ
select name, stu_id
from student
where year = 3 or year = 4
order by name desc, stu_id
์ฌ๋ช ๋ช ์ฐ์ฐ
- ํ ์ด๋ธ์ด๋ ํ๋์ ๋ํ ์ฌ๋ช ๋ช
- ๊ธด ์ด๋ฆ์ ์ค์ด๊ฑฐ๋ ๋์ผ ์ด๋ฆ์ด ์ฌ๋ฌ ๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ ๋ค๋ฅธ ์ด๋ฆ ์ฌ์ฉ
- ํ๋์ ์ง์๋ฅผ ์ฒ๋ฆฌํ๋ ๋์๋ง ์ผ์์ ์ผ๋ก ์ฌ์ฉ
โ
์) ํ์๋ค์ ์ด๋ฆ๊ณผ ์์ ํ๊ณผ ์ด๋ฆ์ ๊ฒ์
select student.name, department.dept_name
from student, department
where student.dept_id = department.dept_id
โฌโฌโฌโฌโฌ
select s.name, d.dept_name
from student s, department d
where s.dept_id = d.dept_id
๋์ผ ํ ์ด๋ธ์ด ๋ ๋ฒ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ(self-join)
โ
์) '๊น๊ด์' ํ์๊ณผ ์ฃผ์๊ฐ ๊ฐ์ ํ์๋ค์ ์ด๋ฆ๊ณผ ์ฃผ์๋ฅผ ๊ฒ์
select s2.name
from student s1, student s2
where s1.address = s2.address and s1.name = '๊น๊ด์'
LIKE ์ฐ์ฐ์
๋ฌธ์์ด์ ๋ํด์ ์ผ๋ถ๋ถ๋ง ์ผ์นํ๋ ๊ฒฝ์ฐ๋ฅผ ์ฐพ์์ผ ํ ๋
- '=' ์ฐ์ฐ์ ๋์ 'like' ์ฐ์ฐ์๋ฅผ ์ด์ฉ
- '=' ๋ ๋ฌธ์์ด์ด ์ ํํ ์ผ์นํ ๊ฒฝ์ฐ์๋ง ์ฐธ(true)
ํ์ : where <ํ๋ ์ด๋ฆ> like <๋ฌธ์์ด ํจํด>
โฝ <ํ๋ ์ด๋ฆ>์ด <๋ฌธ์์ด ํจํด>์ ๋ฐ๋ฅด๋์ง ์ฌ๋ถ๋ฅผ ๊ฒ์ฌ
๋ฌธ์์ด ํจํด ๊ตฌ์ฑ์์
โฝ _ : ์์์ ํ ๊ฐ ๋ฌธ์์ ๋์
โฝ % : ์์์ ์ฌ๋ฌ ๊ฐ์ ๋ฌธ์๋ค์ ๋์
โ
์) ๊น์จ ์ฑ์ ๊ฐ์ง ํ์๋ค์ ์ ๋ณด๋ฅผ ์ฐพ๋ ์ง์
select *
from student
where name like '๊น%'