Database/Oracle

Oracle DB) 데이터 조작어(DML)- insert, update, delete

luana_eun 2022. 2. 24. 11:53
728x90

데이터 조작어( Data Manipulation Languageinsert )

insert      새로운 행 추가

update    기존 행 수정

delete     기존 행 삭제

 

 

다음과 같은 테이블이 있다고 하자. 

<사원 테이블 emp_table>

depart_name emp_name emp_age phone_number salary
A apple 25 010.1111 170

 

create table emp_table (
    depart_name	varchar(10),
    emp_name varchar(7) not null,
    emp_age	number,
    phone_number varchar(13),
    salary	number
);

<insert> 

INSERT INTO 테이블명(컬럼명) VALUES (값)

값을 추가하는 데이터 조작어로, 데이터를 추가할때는 컬럼 순서에 맞게 지정해야한다. 

[desc 테이블명]을 하면 컬럼명이 쭉 뜨는데,

                    출력되는 순서는 DB를 설계한때 지정한 순서로, 테이블의 기본 순서다. 

 

문제1) 사원 테이블에 B사원을 전체 추가

         전체추가는 컬럼명을 일일히 적어주지 않고, 값을 순서대로 적으면 된다. 

insert into employees
values ('B', 'banana', 30, '010.2222', 230);

 

 

 

문제 2) 사원 테이블에 C사원의 부서명, 이름 2개 정보만 추가. 

          정보를 2개만 넣으니 나머지 3개는 null값이 들어가야한다. 

 

널 값을 넣는 방법 #1) 추가할 컬럼명을 직접 지정

insert into emp_table(depart_name, emp_name) values('C', 'orange');

널 값을 넣는 방법 #2) vlaues()에 null을 직접 적기

insert into emp_table values('C', 'orange', null, null, null);

 

만약, not null 제약조건이 있는 컬럼인데 값을 안넣으면?

       NULL을 할 수 없다고 오류메시지가 뜬다 

      > Cannot insert NULL into ("로그인유저이름", "테이블명", "컬럼명")

      해당 컬럼명에는 null을 넣을 수 없다는 뜻, 즉 값이 꼭 있어야 한다는 뜻이다.  

 

 

문제 3) 다른 테이블의 값을 그대로 복사해서 넣기(조건: 테이블 구조가 같아야 한다!!)

       emp_table과 구조가 똑같은 emp_table2 테이블이 있고, emp_table2에는 grape사원이 있다. 

       emp_table2에 있는 모든 사원을 emp_table에 복사해서 추가하자. 

insert into emp_table
select * from emp_table2;

결과: table2에 있던 grape사원이 table에 그대로 복사되어 들어왔다.

 

 

 


<update>

데이터 수정

UPDATE 테이블명 SET 컬럼명=값 WHRER 조건문;

where조건문을 쓰지 않으면, 테이블 해당 컬럼의 모든값이 변경되니까 주의해야한다. 

 

 

문제 1) apple사원의 전화번호를 010.1111에서 011.1111으로 변경

update emp_table
set phone_number = '011.1111'
where emp_name = 'apple';

010에서 011로 바꼈다

 

문제 2) 모든 직원의 월급을 10만원 인상.

           현재 A는 170, B는 230, C는 350인데, 여기서 10을 더해서 수정하자.

           where조건문을 안쓰면 전체에 적용된다. 

update emp_table
set salary = salary + 10;

 

예외 문제) 사원 아이디가 113인 직원의 부서를 50으로 변경하고 바꼈는지 확인

update employees
set department_id = 50
where employee_id = 113;

select employee_id, department_id from employees
where employee_id = 113;

 

문제 3) (서브쿼리) apple사원의 월급을 banan사원의 월급과 같도록 변경하라. 

          apple사원의 월급을 바꿀려면 먼저 banana사원의 월급이 얼마인지 알아야한다. 

 update emp_table 
 set salary = (select salary from emp_table where emp_name='banana') 
 where emp_name = 'apple';

 

 


<delete>

한 행을 삭제

DELETE FROM 테이블명 WHERE 조건문;

 

문제 1) grape사원을 삭제.

delete from emp_table
where emp_name = 'grape';

 

문제 2) emp_table2 값 전체 삭제

delete from emp_table2;

delete구문은 값만 삭제하는 명령어다.

따라서 테이블 안의 모든 값이 삭제되는거지, 테이블 구조는 그대로 남아있다. 

 

 

 


<문법 재정리>

 

insert into 테이블명

values (값...);

 

update 테이블명

set 컬럼명 = 값

where 조건문;

 

delete from 테이블명

where 조건문;

728x90