[Oracle] rownum, insert, update, delete, truncate
< 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 테이블명 ...