주요 키워드: SELECT, INSERT, DELETE, UPDATE
테이블에 데이터를 추가함
INSERT INTO 테이블명 (컬럼1, 컬럼2)
VALUES (값1, 값2);
insert into course values ('437', 'Advanced Databases', 'CS', 4);
insert into course (cID, title, deptName, credit)
values ('777', 'Undecided', 'CS', null);
INSERT INTO 테이블명 (컬럼1, 컬럼2)
SELECT 컬럼1, 컬럼2
FROM 다른테이블
WHERE 조건;
SELECT 절로 데이터를 가져올 수는 있지만,
그 안에 GROUP BY, HAVING, DISTINCT 같은 복잡한 연산은 제한적임 (DBMS마다 다름)
보통은 하나 이상의 행을 그대로 복사하는 용도로 사용
null 값도 넣어줄 수 있음 (예약어)
서브쿼리 기반 삽입도 가능
insert into professor select * from professor;
테이블의 데이터를 삭제함
DELETE FROM 테이블명
WHERE 조건;
WHERE 절에서 서브쿼리는 가능GROUP BY, HAVING, DISTINCT는 사용 불가ORDER BY는 SQL 표준에서 불delete from professor; -- 전체 삭제
delete from professor where deptName = 'EE';
delete from professor where deptName in
(select deptName from department where building = 'Vision Hall');
집계함수를 사용하는 등의 서브쿼리 사용 가능
delete from professorwhere salary < (select avg(salary) from professor);
테이블에 데이터를 갱신함
UPDATE 테이블명
SET 컬럼 = 값
WHERE 조건;
SET 뒤에는 단일 컬럼 값 또는 서브쿼리(단일 결과) 만 올 수 있음GROUP BY, HAVING, DISTINCT, ORDER BY 사용 불가WHERE절에 SELECT 서브쿼리는 가능Update professor
set salary = salary*1.03
where salary > 7000;
Update professor
set salary = salary*1.05
where salary <= 7000;
서브쿼리 갱신 (스칼라 서브쿼리)
update student S
set totalCredit = (
select sum(credit)
from takes natural join course
where S.sID = takes.sID and grade <> 'F' and grade is not null
);
내부 쿼리에서 외부 쿼리를 사용(상관 서브쿼리)하므로 한 튜플마다 적용됨
| 구분 | 설명 |
|---|---|
| 독립 서브쿼리 | 내부 쿼리가 외부 쿼리와 무관 (한 번만 실행됨) |
| 상관 서브쿼리 | 내부 쿼리가 외부 쿼리의 튜플값을 참조 (각 행마다 실행됨) |
<>는 같지 않다는 기호임
이걸 수행하고 나면 sum(credit)이 null이면 null이 저장됨. 그래서 다음 수행
Update student
set totalCredit = 0
where totalCredit is null;