[SQL] DML - 데이터 조작
[SQL] DDL - 데이터 정의와 내용이 이어집니다.
DDL (Data Defintion Language) - 데이터 조작 언어
데이터베이스 사용자 또는 응용 프로그램 소프트웨어가 컴퓨터 데이터베이스에 대해 데이터 검색, 등록, 삭제, 갱신 수행
insert
데이터를 삽입한다.
insert into 테이블명( 속성 ) values( 값... );
insert into student(sid, name, age, birth) values('10101', '강대순', 17, '07/05/21');
# 속성은 안 적어도 된다 (값을 전부 순서에 맞게 넣을 경우)
insert into student values('10102', '김동기', 17, '07/05/11');
insert into student values('10103', '민정호', 19, '07/12/03');
insert into student values('30707', '박상호', 19, '05/04/21');
insert into student values('30708', '박승훈', 19, '05/01/07');
학번(sid) , 이름(name) , 나이(age) , 생일(birth) 에 맞는 4개의 데이터를 삽입했다. 이제 이를 이용해 다른 DML 명령어를 설명하겠다.
select
데이터를 조회, 검색한다.
select 검색항목 from 테이블명 where 조건 ;
# 모든 데이터 검색
select * from student;
( * ) 은 모든 데이터를 뜻한다.
where
where를 사용해 조건에 맞는, 필요한 데이터만 추출할 수 있다.
select sid, name, age, birth
from student
where name = '박상호';
# 이름 = '박상호'인 튜플을 검색
like
like를 사용해 특정 문자열이 포함된 데이터를 추출할 수 있다.
_ (한글자) , %(모든글자)를 이용해 범위를 잡는다
ex) '_종대_' '%대왕'
select sid, name, age, birth
from student
where sid like '1%';
학번(sid) 문자열 맨 앞에 ' 1 '이 들어간(age = 17) 데이터를 추출했다.
order by
특정 속성을 기준으로 내림차순(desc), 오름차순으로(asc) 으로 정렬할 수 있다.
select 검색항목 from 테이블명 order by 속성명 sc
select *
from student
order by age, birth asc; # asc는 생략 가능
정렬할 속성을 2개로도 정할수 있다.
집계함수
sum(덧셈) avg(평균) count(수) max(최댓값) min(최소값)
속성에 함수를 적용해 값을 추출할 수 있다.
select 집계함수(속성) as 표현문
select avg(age) as 나이평균
from student;
group by
특정 속성을 기준으로 집계함수를 사용하여 계성 데이터를 추출할 수 있다.
select 검색항목 from 테이블명 order by 나눌속성;
select age, count(*) as 학생수
from student
group by age;
select age와 age별 count(*)로 --- 나이별 학생수를 알 수 있다.
having
group by와 함께 사용되며 그룹으로 묶인 튜플에 조건을 걸수 있다.
having을 설명하기 위해 student 테이블에 score(학점) 속성과 값을 추가했다.
이제 score(학점)이 '80점' 이상인 학생이 2명 이상 있는 학년을
나이 그룹과 학생 수로 나타내겠다
select age, count(*) as B등급학생수
from student
where score >= 80 # 점수 80점 이상
group by age
having count(*) >= 2; # 80점 이상 학생이 2명 이상인 나이만
이렇게 where로는 튜플에 대한 조건을 걸고 having으로 그룹에 대한 조건을 건다
19살 중에는 80점 이상이 1명밖에 없기 때문에 having에 걸러져서 추출되지 않는다.
update
데이터를 수정한다.
update 테이블명 set 수정내용 where 조건 ;
update student
set age = 17
where birth like '_7%';
#like 학습을 위해 _를 사용했다
그전에 age가 19였던 민정호가 age가 17로 바뀌었다.
(_7년도에 태어난 학생은 17살이기 때문이다)
delete
데이터를 삭제한다.
delete from 테이블명 where 조건 ;
delete from student
where age = 19;
1학년이 아닌 '박상호'와 '박승훈'의 튜플을 삭제했다.