본문 바로가기

카테고리 없음

[데베개] SQL의 구성 : DML

  • 레코드 삽입

insert into 테이블이름  (필드리스트)  values  (값리스트)

필드리스트 : 새 레코드가 삽입될 테이블 필드 나열
-> 나열하지 않은 필드의 레코드값은 NULL
* NULL이 허용되지 않은 필드는 반드시 값 지정 (생략 시 오류 발생)
-> 필드리스트 자체를 생략할 경우, 값 리스트에 테이블 필드 순서에 맞춰 모두 작성해야 함.
-> 테이블 필드 순서와는 일치하지 않아도 된다. 단, 값 리스트를 부여할 때는 필드리스트 순어에 맞춰서 부여.
ex. 위 아래의 결과는 같음.
insert into department (dept_id, dept_name, office) values ( '920', '컴퓨터공학과', '201호')
insert into department (office, dept_id, dept_name) values ('201호', '920', '컴퓨터공학과')

값 리스트 : 필드리스트 순서에 맞춰 값 나열

*레코드 삽입 시 주의사항
- 외래 키 필드가 있는 레코드 삽입 할 때, 참조되는 테이블에 그 값을 가지는 레코드가 존재해야 함. -> 참조 테이블에 그 값을 가지는 레코드 먼저 삽입.

ex. 
department 테이블
dept_id        dept_name       office
920              컴퓨터공학과      201호
923              산업공학과          207호
925              전자공학과          308호
 
*student 테이블의 dept_id는 fk
<DML문>
insert into student values ('1292002', '900305-1730021', '김정현', 3, '서울', '933')
-> department에 dept_id 중 933이란 레코드 값이 없으므로 오류 발생

=> insert into deprtment values ('933', '유아교육과', '402호')
를 삽입한 후에 입력하면 실행됨 

 

  • 레코드 수정

update  테이블이름
set  수정내역
where  선택조건

* 수정내역
* 선택 조건
* where절 생략 시, 테이블 모든 레코드 수정

ex. student 테이블에서 모든 year 필드의 레코드 값들을 1씩 증가
update student
set year = year + 1

ex  professor 테이블애서 '고희석' 교수의 직위를 '교수'로 수정하고 학과본호를 '923'으로 수정

update professor
set position = '교수', dept_id='923'
where name = '고희석'

*레코드 수정 시 주의사항
외래 키로 지정된 필드의 값 수정할 때, 참조하는 테이블에 존재하는 값으로만 수정 가능

 

  • 레코드 삭제

delete from  테이블이름
where  선택조건

* where절 생략 시, 테이블의 모든 레코드 삭제 => 테이블은 삭제되지 않음.

ex. professor 테이블의 이름이 '김태석'인 교수를 삭제
delete from professor
where name='김태석'

* 레코드 삭제 시 주의사항
- 참조하고 있는 (자식레코드)가 있을 경우 삭제 불가능



  • 레코드 검색

- select문 : 레코드를 찾기 위한 표현
ㄴ 레코드 정렬, 재명명, LIKE, 집합, 외부 조인, 그룹화 및 집계 함수, 중첩 질의

select  필드리스트
from  테이블리스트
where  조건

select : 출력할 필드 지정 (추출연산)
from : 실행할 때 필요한 테이블 지정
 ㄴ 여러 테이블이 나열되면 캎티션 프로덕트 의미
where : 검색되어야 하는 레코드 조건 (선택 연산)
 ㄴ 생략 가능

ex. 
select  name, dept_name

from  department, student

where  department.dept_id = student.dept_id

 

- select : name필드와 dept_name필드 값을 추출

- from : department와 student 테이블을 카티션 프로덕트(×)

- where : 지정된 조건식을 만족하는 레코드만 선택 (같은 이름의 필드일 땐 . 을 사용)

- 관계대수 : 𝝅 name, dept_name ( σ depatment.dept_id = student.dept_id(student × department)