분류방식 1
분류방식2
relational database language
intro
history
특징
domain types
relation(=table)들의 집합 specification 뿐 아니라, 각 relation에 대한 정보도 specificate
// foreign table 변형
Create table department(
deptName varchar(20) primary key,
chairman char(5)
building varchar(30),
budget numeric(10,0),
foreign key (chairman) references professor(pID) // 참조하는 테이블 뿐만 아니라 속성을 명시해도 된다
// foreign key임을 나중에 명시
);
// 특정값 Constraint
Create table student (
sID char(5) primary key,
name varchar(20) not null, // null 값이 들어갈 수 없다
gender char(1),
deptName varchar(20),
GPA numeric(3,2),
totalCredit integer,
foreign key (deptName) references department),
check (gender in (‘F’, ‘M’))) // student 관계의 gender 속성은 반드시 “F” 또는 “M” 값을 가져야 하는 제약
;
// primary key는 2개 속성 이상으로 조합 가능
// primary key는 외부 key 도 가능
// foreign key는 나중에 명시해줘도 됨
Create table teaches (
pID char(5),
cID char(5),
semester char(10),
year numeric(4,0),
classroom char(5),
primary key (pID, cID, semester, year), // 여러 속성이 primary key가 된다
foreign key (pID) references professor, // foreign key임을 나중에 명시
foreign key (cID) references course,
foreign key (classroom) references room);
기본 : Insert .. into ..
// 새로운 튜플을 추가한다
Insert into course values (’437’, ’Advanced Databases’, ’CS’, 4);
// null 사용 가능
Insert into course values ('777', 'undecided', 'CS', null);
// select-from-where절을 사용가능하다!!
Insert into professor select * from professor; // professor 테이블의 모든 튜플을 professor 테이블에 삽입한다.
// 튜플 갯수가 2배가 됨
기본 : Delete from ...
// 모든 튜플 삭제
Delete from professor; // professor 테이블의 모든 튜플 삭제
// where절 사용 가능
Delete from professor where deptName='EE'; // professor 테이블에서 EE학과의 교수를 모두 삭제해라
// in : in() 괄호에 포함이 되면 true
Delete from professor where deptName in (select deptName from department where building='Vision Hall');
// 해당 조건에 만족하는 professor 테이블의 모든 튜플을 삭제해라 : 'vision hall'에 위치한 학과(department 테이블에서 확인) 소속의 교수
// 기호 사용
Delete from professor where salary < (select avg(salary) from professor) // professor 테이블의 Salary들의 평균값보다 더 작은 연봉을 가진 튜플들을 Professor 테이블에서 삭제
교수가 삭제됨에 따라 평균 봉급 값도 변할 수가 있는데,
SQL 시스템에서는 터플 삭제에 따른 평균값이 변하지 않는다. 그 대신 query 초기에 평균값을 계산하고 이를 근거로 삭제할 터플을 구한 다음 평균값 재계산 없이 터플을 삭제한다. (=똑똑하다)
기본 : Update 테이블이름 set 요소이름=... (where 조건)
예제1) Increase salaries of professors whose salary is over 7000 by 3% and all others receive a 5% raise
// 기본
Update professor
set salary = salary*1.03
where salary > 7000;
Update professor
set salary = salary*1.05
where salary <= 7000;
// case - end 활용
Update professor
set selary = case
when salary <= 7000 then salary*1.05
else salary*1.03
end;
예제2) Update totalCredit values for all students
//방법1)
Update student S
set S.totalCredit =
(select sum(credit)
from takes natural join course
where S.sID=takes.sID and grade <> 'F' and grade is not null); // grade 속성이 'F' | NULL 이 아닌 과목의 crdit 속성값의 합을 구하여, totalCredit 속성 값으로 갱신
// 보정작업
Update student
set totalCredit = 0
where totalCredit is null;