시퀀스 (Sequence)



1. 자동 번호 부여하는 기능을 가진 객체. nextVal 명령에 의해서 자동으로 일련번호를 리턴받는다. 번호는 기본적인 상태에서는 1부터 1씩 증가한다.

- 한번 사용할때마다 반환되는 숫자는 유니크하므로 생성한 시퀀스를 다른 목적으로 사용한 경우 그때 리턴된 번호 다음 번호부터 사용할 수 있다.



2. 형식

CREATE SEQUENCE 시퀀스명; -- 1부터 1씩 증가하는 일련번호


CREATE SEQUENCE 시퀀스명

START WITH 시작번호; -- 시작번호부터 1씩 증가하는 일련번호


CREATE SEQUENCE 시퀀스명

INCREMENT BY 증가분 

START WITH 시작번호; -- 시작번호부터 증가분만큼씩 증가하는 일련번호


DROP SEQUENCE 시퀀스명; -- 시퀀스 삭제


select 시퀀스명.currVal from dual; -- 현재 사용할 수 있는 번호 확인 명령. (nextVal 명령대신 currVal 을 사용한다)


Sequence 예제)

create sequence test15Seq;


CREATE TABLE test15 (

col1 NUMBER

,col2 varchar2(10)

);


alter table test15

add constraint test15_col1_pk primary key (col1);



insert into test15 (col1, col2) values (test15Seq.nextVal, 'kim'); -- 1, kim

insert into test15 (col1, col2) values (test15Seq.nextVal, 'park'); -- 2, park

insert into test15 (col1, col2) values (test15Seq.nextVal, 'choi'); -- 3, choi



문제) city, buseo, jikwi 테이블에서 기본 테이블을 입력한다. 시퀀스 사용.









자료 수정 (UPDATE), 삭제(DELETE)



1. 형식

UPDATE 테이블명 SET 컬럼 = 신규자료, 컬럼 = 신규자료,....

WHERE 조건식;


UPDATE 테이블명 SET 컬럼 = (서브쿼리의 결과값), 컬럼 = 신규자료,....

WHERE 조건식(조건식대신 서브쿼리 이용가능);


DELETE 테이블명

WHERE 조건식(조건식대신 서브쿼리 이용가능);


※ 조건식이 없으면 모든 행이 대상으로 되어 모든 행이 변경되므로 반드시 주의할것~



2. INSERT, UPDATE, DELETE  실행 후 영구적인 적용은 COMMIT;

취소하려면 ROLLBACK;



3. 참조당하는 테이터(PK 지정된 컬럼이면서 FK에 의해 참조 당하는 컬럼)인 경우 수정, 삭제가 안될 수 있다.



자료수정 및 삭제 예제)

******************


create table test17 (

col1 number

,col2 varchar2(10)

);


insert into test17 (col1, col2) values (1, 'kim');

insert into test17 (col1, col2) values (2, 'choi');


select * from test17;


commit;


update test17 set col2 ='kang' where col1 = 2;


select * from test17;


commit;


delete test17 where col1 = 2;


select * from test17;


commit;





서브쿼리를 이용한 DML 예제)


-- EMPLOYEES 테이블 직원들의 SALARY 를 10% 인상합니다. 단, 부서명(department_name)이 'IT'인 경우만 실행.


update employees set salary = (salary * 1.1)

where department_id = (select department_id

from departments

where department_name = 'IT'

      );




문제) employees 테이블에서 jobs.job_title이 'Sales Manager' 인 직원들의 salary를 해당 직무의 최고 급여(jobs.max_salary)로 수정.

단, 입사일(employees.hire_date)가 2005년 이전(해당 년도 포함) 입사자만 적용.


update employees set salary = ( select max_salary from jobs where jobs_title = 'Sales Manager')

where to_char(hire_date, 'yyyy') <= '2005';



데이터베이스 모델링 작업


1. ERD


2. CREATE TABLE


3. 제약조건


4. 기초코드입력


5. 뷰 생성

-- 조인 기반 쿼리문 작성시 뷰로 생성하면 편리하게 작업이 가능.


6. SQL 파일 작성


WRITTEN BY
빨강꼬마

,