참고.
(자격증에서는 DML의 범주를 INSERT,UPDATE,DELETE + SELECT로 보기도 한다.)
INSERT INTO 테이블명[(칼럼1,칼럼2...)]VALUES(값1,값2 ...);
순차적으로 증가하는 일련의 번호를 생성하는 DB객체 (EX 번호표 기계)
CREATE SEQUENCE 시퀀스명
[INCREMENT BY N]--N씩 증감
[START WITH N]--시작값 N
[MAXVALUE N|NOMAXVALUE]--최댓값N|최댓값 없음
[MINVALUE N|NOMINVALUE]--최소값N|최소값 없음
[CYCLE|NOCYCLE]--번호순환O|번호순환X
[CACHE N|NOCACHE]--메모리케시사용O|메모리케시 사용X(N만큼 미리 준비해둠 )
[ORDER|NOORDER]--,순차번호사용O|순차번호사용X
CURRVAL :
-생성한 현재 번호확인
-NEXTVAL 호출이 한번도 없는경우 사용불가
-시퀀스명.CURRVAL
NEXTVAL :
-시퀀스로 새로운 번호를 생성
-최초 시퀀스 사용시 반드시 NEXTVAL 함수를 먼저 사용
-시퀀스명.NEXTVAL
CURVAL,NEXTVAL :
-INSERT문이나 UPDATE문에서 사용
-서브쿼리,GROUP BY,HAVING ,ORDERBY,DISTINCT 와 함께 사용 불가
-DB에서 처리되는 여러 SQL 명령들을 하나의 논리적 작업 단위로 처리하는 것
-작업이 시작되면 중간에 멈추지 않고 ,반드시 종료해하는 작업단위
-작업 도중 하나라도 실패하면 모두 철회.
트랜잭션내의 모든 SQL 실행으로 인해 변경된 작업 내용을 디스크에 영구적으로 저장하고 트랜잭션을 종료
트랜잭션내의 모든 SQL 실행으로 인해 변경된 작업 내용을 모두 취소하고 트랜잭션을 종료
COMMIT이 필요한 SQL>INSERT,UPDATE,DELETE(커밋을 하지 않으면 데이터베이스에 저장되지 않음)
-- 테이블 삭제
DROP TABLE EMPLOYEE_T;
DROP TABLE DEPARTMENT_T;
-- DEPARTMENT_T 테이블 생성
CREATE TABLE DEPARTMENT_T (
DEPT_NO NUMBER NOT NULL
, DEPT_NAME VARCHAR2(15 BYTE) NOT NULL
, LOCATION VARCHAR2(15 BYTE) NOT NULL
, CONSTRAINT PK_DEPART PRIMARY KEY(DEPT_NO)
);
-- EMPLOYEE_T 테이블 생성
CREATE TABLE EMPLOYEE_T (
EMP_NO NUMBER NOT NULL
, NAME VARCHAR2(20 BYTE) NOT NULL
, DEPART NUMBER NULL
, POSITION VARCHAR2(20 BYTE) NULL
, GENDER CHAR(2 BYTE) NULL
, HIRE_DATE DATE NULL
, SALARY NUMBER NULL
, CONSTRAINT PK_EMPLOYEE PRIMARY KEY(EMP_NO)
, CONSTRAINT FK_DEPART_EMP FOREIGN KEY(DEPART) REFERENCES DEPARTMENT_T(DEPT_NO) ON DELETE SET NULL
);
DROP SEQUENCE DEPT_SEQ;
CREATE SEQUENCE DEPT_SEQ
INCREMENT BY 1 -- 1씩 증가하는 번호를 만든다.(디폴트)
START WITH 1 -- 1부터 번호를 만든다.(디폴트)
NOMAXVALUE -- 번호의 상한선이 없다.(디폴트)
NOMINVALUE -- 번호의 하한선이 없다.(디폴트)
NOCYCLE -- 번호 순환이 없다.(디폴트)
CACHE 20 -- 20개씩 번호를 미리 만들어 둔다.(디폴트)
NOORDER -- 번호를 순서대로 사용하지 않는다.(디폴트) - 번호를 순서대로 사용하는 ORDER 옵션으로 바꿔서 시퀀스를 생성한다.
;
INSERT INTO DEPARTMENT_T(DEPT_NO, DEPT_NAME, LOCATION) VALUES(DEPT_SEQ.NEXTVAL, '영업부', '대구');
INSERT INTO DEPARTMENT_T(DEPT_NO, DEPT_NAME, LOCATION) VALUES(DEPT_SEQ.NEXTVAL, '인사부', '서울');
INSERT INTO DEPARTMENT_T(DEPT_NO, DEPT_NAME, LOCATION) VALUES(DEPT_SEQ.NEXTVAL, '총무부', '대구');
INSERT INTO DEPARTMENT_T(DEPT_NO, DEPT_NAME, LOCATION) VALUES(DEPT_SEQ.NEXTVAL, '기획부', '서울');
COMMIT;
DROP SEQUENCE EMP_SEQ;
CREATE SEQUENCE EMP_SEQ
START WITH 1001
ORDER;
INSERT INTO EMPLOYEE_T(EMP_NO, NAME, DEPART, POSITION, GENDER, HIRE_DATE, SALARY) VALUES(EMP_SEQ.NEXTVAL, '구창민', 1, '과장', 'M', '95-05-01', 5000000); -- 날짜는 하이픈(-) 또는 슬래시(/)로 구분
INSERT INTO EMPLOYEE_T(EMP_NO, NAME, DEPART, POSITION, GENDER, HIRE_DATE, SALARY) VALUES(EMP_SEQ.NEXTVAL, '김민서', 1, '사원', 'M', '17-09-01', 2500000); -- 날짜는 하이픈(-) 또는 슬래시(/)로 구분
INSERT INTO EMPLOYEE_T(EMP_NO, NAME, DEPART, POSITION, GENDER, HIRE_DATE, SALARY) VALUES(EMP_SEQ.NEXTVAL, '이은영', 2, '부장', 'F', '90/09/01', 5500000); -- 날짜는 하이픈(-) 또는 슬래시(/)로 구분
INSERT INTO EMPLOYEE_T(EMP_NO, NAME, DEPART, POSITION, GENDER, HIRE_DATE, SALARY) VALUES(EMP_SEQ.NEXTVAL, '한성일', 2, '과장', 'M', '93/04/01', 5000000); -- 날짜는 하이픈(-) 또는 슬래시(/)로 구분
COMMIT;
작성형식
UPDATE 테이블
SET 업데이트할내용, 업데이트할내용, ...
WHERE 조건식
UPDATE 예시
-- 1. 부서번호가 3인 부서의 지역을 '인천'으로 변경하시오.
UPDATE DEPARTMENT_T
SET LOCATION = '인천' -- SET절의 등호(=)는 대입연산자
WHERE DEPT_NO = 3; -- WHERE절의 등호(=)는 동등비교연산자
-- 2. 부서번호가 2인 부서에 근무하는 모든 사원들의 연봉을 500000 증가시키시오.
UPDATE EMPLOYEE_T
SET SALARY = SALARY + 500000
WHERE DEPART = 2;
DELETE 형식
DELETE
FROM 테이블
WHERE 조건식
DELETE 예시
-- 1. 지역이 '인천'인 부서를 삭제하시오. ('인천'에 근무하는 사원이 없다.)
DELETE
FROM DEPARTMENT_T
WHERE LOCATION = '인천';
-- 2. 지역이 '서울'인 부서를 삭제하시오. ('서울'에 근무하는 사원이 있다. -> ON DELETE SET NULL 외래키 옵션에 의해서 해당 사원들의 부서정보가 NULL 값으로 처리된다.)
DELETE
FROM DEPARTMENT_T
WHERE LOCATION = '서울';
티스토리
-DML(학생,교수,강의,수강신청,과목)
https://hyeonju50.tistory.com/18