: 테이블에 데이터 입력, 수정, 삭제, 병합하기 위한 명령어
insert into student
values (10110, '홍길동', 'hong', '1', '851011143098', '85/01/01',
'041)630-3114', 170, 70, 101, 9903);
TO-DATE('2006/01/01', 'YYYY/MM/DD') '2006/01/01'이라는 글자를 날짜로 입력. SYSDATE: 현재 날짜 데이터 반환INSERT INTO t-student(입력할 테이블 혹은 칼럼)
SELECT * FROM student(들고올 테이블 혹은 칼럼)
INSERT ALL
INTO height_info VALUES (studno, name, height) (입력할 테이블 혹은 칼럼)
INTO weight_info VALUES (studno, name, weight)
SELECT studno, name, height, weight (들고올 칼럼)
FROM student
WHERE grade >= '2';
INSERT ALL
WHEN height > 170 THEN (조건 TRUE인 행들만)
INTO height_info VALUES (studno, name, height) (입력할 테이블 혹은 칼럼)
WHEN weight > 70 THEN (조건 TRUE인 행들만)
INTO weight_info VALUES (studno, name, weight)
SELECT studno, name, height, weight (들고올 칼럼)
FROM student
WHERE grade >= '2';
INSERT FIRST
WHEN height > 170 THEN (170 넘는 사람 다 들어감)
INTO height_info VALUES (studno, name, height) (입력할 테이블 혹은 칼럼)
WHEN weight > 70 THEN (170 넘는 사람 빼고, 70kg 넘는 사람 다 들어감)
INTO weight_info VALUES (studno, name, weight)
SELECT studno, name, height, weight (들고올 칼럼)
FROM student
WHERE grade >= '2';
INSERT ALL
sales_data VALUES(sales_no, week_no, '1', sales_mon) (1이 월요일 표기. 기존의 sales_mon이란 칼럼의 값을 가져옴)
sales_data VALUES(sales_no, week_no, '2', sales_tue) (2이 화요일 표기. 기존의 sales_tue이란 칼럼의 값을 가져옴)
sales_data VALUES(sales_no, week_no, '3', sales_wed)
sales_data VALUES(sales_no, week_no, '4', sales_thu)
sales_data VALUES(sales_no, week_no, '5', sales_fri)
SELECT sales_no, week_no, sales_mon, sales_tue, sales_wed, sales_thu, sales_fri
FROM sales;
UPDATE student (업데이트할 테이블, 칼럼)
SET (grade, deptno) = (SELECT grade, deptno
FROM student
WHERE studno = 10103) (SET 뒤에 바꿀 값. 이 경우 subquery로 여러 개 들고 옴)
where position = '조교수' (조건. 칼럼 이름, 표현식, 상수, 서브쿼리, 비교연산자 등)
delete (from 생략 가능) student (테이블)
where studno = 20103; (조건)
delete from student
where deptno = (select deptno
from department
where dname = '컴퓨터공학과');
merge into professor p(합쳐질 결과 테이블)
using professor_temp f(위에 합칠 테이블)
on (p.profno = f.profno) (합칠 조건)
when matched then (조건이 맞을 땐)
update set p.position = f.position (이 값 업데이트)
when not matched then (조건이 안맞을 땐)
insert values(f.profno, f.name, f.userid, f.position, f.sal, f.hiredate
f.comm, f.deptno); (이 값 새로 입력)
begin; (트랜잭션 시작)
(데이터수정 ~~)
savepoint before_update; (세이브 포인트 지정)
(작업~~)
rollback; => savepoint로 롤백
commit; => 영구 저장
CREATE SEQUENCE s_seq (시퀀스 객체 이름)
INCREMENT by 1 (증가치. default는 1)
START WITH 1 (시작값, default는 1)
MAXVALUE 100 (최댓값)
MINVALUE 1 (만약 cycle이면 최댓값 뒤에 다시 최솟값으로 돌아옴)
CYCLE/NOCYCLE (둘 중 하나 선택)
CACHE 20; (메모리 캐쉬하는 시퀀스 개수. default는 20)
시퀀스이름.NEXTVAL
시퀀스이름.CURRVAL
CREATE SEQUENCE my_sequence (1에서 1씩 증가하는 시퀀스 생성)
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;
INSERT INTO my_table(id, name)
VALUES (my_sequence.NEXTVAL, 'john') (테이블에 시퀀스 다음값을 아이디로 넣음. 2가 들어감)
INSERT INTO my_table(id, name)
VALUES (my_sequence.NEXTVAL, 'tom') (테이블에 시퀀스 다음값을 아이디로 넣음. 3이 들어감)
SELECT my_sequence.CURRVAL (3이 나옴)
FROM dual;
ALTER SEQUENCE 시퀀스이름
INCREMENT ~~
START WITH ~~
MAXVALUE ~~
MINVALUE ~~
CYCLE/NOCYCLE
CACHE ~~;
로 똑같이 변경.
DROP SEQUENCE 시퀀스이름;