개발/Oracle

[Oracle] rownum, insert, update, delete, truncate

뉴NEW 2022. 10. 11. 17:51

< rownum 컬럼 >

테이블의 검색 데이터에 대한 행번호를 붙여주는 가상의 컬럼(의사 컬럼)

 

출력하는 행의 수를 제한, 처음부터 1, 3, 5

select * from employee where rownum <=3;

 

행번호를 출력하려면 인라인뷰를 사용

인라인뷰(inline veiw): 검색결과에 알리아스를 붙여서 사용하는 것

select * from (select * from employee) a;

처음부터 5

select * from (select rownum list, ename from employee) where list <= 5

 

 

 

3. 행번호를 출력하고, 중간에서부터 몇 번부터 몇 번까지, 중간의 범위 검색

select * from (select rownum list, ename from employee)

where list between 6 and 10; -> 6번에서 10번까지 범위 검색

 

 

select * from (select rownum list, eno, ename, job, manager, hiredate, salary, commission, dno from employee)

where list between 6 and 10

 

< insert 명령 >

테이블에 데이터를 추가(삽입)하는 명령

insert into 테이블명(컬럼명, ...) values(, ...);

 

모든 컬럼을 명시하고, 값을 입력하는 경우

insert into emp(eno, ename, job, manager, hiredate, salary, commission, dno)

values(8001,'STEVE', 'MANAGER', 7839, to_date('1990/06/13'), 3300, null, 40);

 

2. 모든 컬럼을 누락없이 순서대로 값을 입력하는 경우 테이블명 뒤 컬럼명 생략 할 수 있음

insert into emp

values(8002, 'TOM', 'SALESMAN', 7698, to_date('1991/9/20'), 2200, 1000, 30);

 

3. 생략한 컬럼이 있고, 순서가 바뀐 경우 컬럼명과 값을 정확하게 일치해야 함

생략가능한 컬럼은 null인 경우이고, not null은 생략불가

1 insert into emp(eno, ename, dno, job, hiredate, salary, manager)

2* values(8003,'JERRY',10, 'CLERK', to_date('1992/12/12'),1800, 7788)

 

< insert 할 때 발생하는 에러 >

데이터 타입이 일치하지 않을 때

insert into emp(eno,ename,job,salary)

values(8004, EMMA, 'ANALYST', 3300); EMMA 홀따옴표로 감싸지 않아서

 

2. 데이터의 길이가 길 때(문자열)

ename: 10 입력한 데이터 15글자

insert into emp(eno, ename)

values(8005, 'Kristen Stewart');

ename: 10 입력한 데이터 12글자, 한글자는 3바이트

insert into emp(eno, ename)

values(8005,'최다니엘');

 

제약조건 에러

Primary Key: Not Null, Unique

3. Not Null(PK) 데이터를 입력하지 않은 경우

insert into emp(ename, job)

values('KRISTEN', 'MANAGER')

 

4. 유일한 데이터를 입력하지 않은 경우 PK:Unique 제약조건 위배

insert into emp(eno, ename)

values(8004, ‘MCADAM’);

 

5. 참조하는 dept 테이블에 없는 부서번호를 입력하는 경우 참조 무결성을 위배

insert into emp(eno, ename, dno)

values(8005.‘STONE’,50)

--------------------------------------------------------

< update 명령 >

테이블의 데이터를 수정(변경)하는 명령

update 테이블명 set 변경할 값 where 조건

 

문제1) emp 테이블에서 ‘SCOTT’ 사원의 급여를 3500로 변경

SQL> update emp set salary = 3500

2 where ename = 'SCOOTT';

문제2) emp 테이블에서 업무가 ‘SALESMAN’인 사원의 급여를 200씩 인상

SQL> update emp set salary = salary+200

2 where job = 'SALESMAN';

문제3) emp 테이블에서 사원번호가 7566인 사원인 입사일을 일주일 전으로 수정

 

문제4) emp 테이블에서 이름이 ‘A’로 시작하는 사원의 부서번호를 40으로 수정

SQL> update emp set dno = '40'

2 where ename like 'A%';

 

문제5) dept 테이블에서 40번 부서의 부서명을 ‘PROGRAMMING’, 지역명을 ‘SEOUL’로 변경

1 update dept set dno = '40'

2* where dname = 'PROGRAMMING' and loc = 'SEOUL'

문제6) dept 테이블에서 50번 부서의 지역명을 10부서의 지역명으로 변경

1 update dept set loc = (select loc from dept where dno = '10')

2* where dno = '50';

문제7) dept 테이블에서 30번 부서의 부서명과 지역명을 20번 부서의 지역명과 부서명으로 변경

1 update dept set (dname, loc) = (select dname, loc from dept where dno = '20')

2* where dno = '30'

문제8) emp 테이블에서 사번이 7788인 사원의 업무 및 급여를 사번이 7499인 사원의 업무와 급여로 갱신

1 update emp set (job, salary) = (select job, salary from emp where eno = '7499')

2* where eno = '7788'

문제9) emp 테이블에서 사번이 7369인 사원과 업무가 같은 모든 사원의 부서번호를 사번이 7369인 부서번호로 갱신

 

문제10) dept 테이블에서 모든 지역명을 ‘SEOUL’로 변경

SQL> update dept set loc = 'SEOUL';

 

<< delete 명령 >>

- 테이블에서 데이터를 삭제하는 명령

- delete (from) 테이블명 where 조건;

 

<< truncate 명령 >>

- 테이블의 모든 데이터를 삭제하는 명령, 공간도 삭제, 초기화

- truncate table 테이블명;

- DDL 명령, rollback이 되지 않음.

 

--

1. 트랜잭션(Transaction)

- 여러가지 단위로 구성된 작업이 모두 완료되었을 때, 최종적으로 확정이 되는 하나의 작업 단위.

- 중간에 문제가 발생한다면, 하나의 작업 단위 이전으로 되돌아감.

- All or Nothing

- ) 은행, 결제 ...

 

2. TCL (Transaction Control Language)

- 트랜잭션을 제어하는 명령어

- commit, rollback, savepoint

- 데이터의 추가, 수정, 삭제 시에 발생하는 명령

- DML 명령에서만 발생

 

(1) commit - 작업을 최종적으로 확정하는 명령

(2) rollback - 이전 작업단위로 되돌리는 명령

(3) savepoint - 트랜잭션하는 시점을 정하는 명령

 

##########

DDL (Data Definition Language)

- 테이블을 생성, 구조를 변경, 테이블을 삭제, 제약조건 추가, 수정, 삭제

- create table 테이블명, alter table 테이블명, drop table 테이블명 ...