Notice
Recent Posts
Recent Comments
Link
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

brograming

[Oracle] 8강_Day16 본문

Kosta

[Oracle] 8강_Day16

brograming 2023. 3. 8. 12:44

데이터 질의어 - select

DDL - 데이터 정의어. db 객체 생성, 수정, 삭제 (테이블 구조, 테이블 자체)

          creat table,alter table, drop table ...

          DDL 명령어 하나가 트랜잭션 하나다

 

DML - 데이터 조작어. 추가, 수정, 삭제 (테이블에 들어가 있는 데이터)

           insert, update, delete ...

 

DCL - 데이터 제어어. 권한 부여, 빼앗는 명령. grant, revoke ...

 

1. INSERT

 

--Table emp 생성, 테이블 구조만 복사해서 만들기
create table emp
as
select employee_id emp_id, last_name name, salary, hire_date, department_id dept_id
from employees
where 1 = 0; -- 줄은 복사 x, 값이 복사가 안됨.

desc emp;
select * from emp; -- 값이 복사가 안된걸 확인 할 수 있음

 

 

기본키, 외래키 추가

기본 키 추가
외래 키 추가

 

행 삽입

 

salary, dept_id 값을 안넣을 때. ( emp_id 4번,5번 )

 

다른 테이블에서 행 복사. 직무에 REP 들어가는 사람들 찾아서 서브쿼리(select, from, where)로 emp에 복사.

 

2. UPDATE

수정

 

3. delete

 

 

4. 커밋 / 롤백

 

 

- 코드

 

--Table emp 생성, 테이블 구조만 복사해서 만들기
create table emp
as
select employee_id emp_id, last_name name, salary, hire_date, department_id dept_id
from employees
where 1 = 0; -- 줄은 복사 x, 값이 복사가 안됨.

desc emp;
select * from emp; -- 값이 복사가 안된걸 확인 할 수 있음

insert into emp values(1, 'aaaa', 1000, sysdate, 10);
insert into emp values(2, 'aaaa', 1000, sysdate, 10);
insert into emp values(3, 'bbb', 2000, sysdate, 30);
insert into emp values(4, 'ccc', null, sysdate, null );
insert into emp(emp_id, name, hire_date) values(5, 'ddd', sysdate);
insert into emp values(6, 'eee', 4500, '22/10/05', 50);

-- 서브쿼리 이용해서 행 복사
insert into emp
select employee_id emp_id, last_name name, salary, hire_date, department_id dept_id
from employees
where job_id like '%REP%';

-- 수정
-- where절 없으면 모든 행 salary를 3000원으로 수정
update emp set salary = 3000 where emp_id = 4;  -- pk로 조건 검색
update emp set salary = 5000 where name = 'aaaa'; -- name으로 조건 검색

-- 여러 데이터 한번에 수정
update emp set emp_id = 10, name = 'asdf', salary = 3500, hire_date = '12/08/23', dept_id = 40
where emp_id = 1;

update emp set salary = 6500, dept_id = 20
where emp_id = 5;

-- 서브쿼리 이용해서 2열 수정
/*emp의 10번 사원 dept_id, salasry를
employees의 사번 205번 사람과 동일하게 수정 */
update emp
set dept_id = (select department_id
               from employees
               where employee_id = 205),
    salary = (select salary
              from employees
              where employee_id = 205)    
where emp_id = 10;


--삭제
delete from emp where emp_id = 10;

select * from emp;

commit; -- 트랜잭션을 쓰기 완료.

-- 새 트랜잭션 실행 -------

delete from emp; -- 롤백가능
rollback; -- 현재 트랜잭션의 쓰기 작업 취소
select * from emp;

delete emp where dept_id = 80;

select * from departments;

insert into departments values(280,  'dept1', 100, 2500);
insert into departments values(290,  'dept2', 205, 1700);

insert into emp values(11, 'abc', 1000, sysdate, 280);

delete departments where department_id = 280; -- emp에 참조하는 행이 있어서 삭제 안됨
delete departments where department_id = 290; -- emp에 참조하는 행이 없어서 삭제 됨

'Kosta' 카테고리의 다른 글

[JAVA, Oracle] emp vo, dao, main Day16  (0) 2023.03.08
[Oracle]JDBC_Day16  (0) 2023.03.08
[Oracle] 4 ~ 6장_Day15  (0) 2023.03.07
[Oracle]1 ~ 3장_Day14  (0) 2023.03.06
[JAVA] 예외처리, 입출력 스트림_Day12  (0) 2023.03.02