본문 바로가기
DataBase

[Oracle]DML(Data Manipulation Languagu)-INSERT, UPDATE, DELETE문

by 바까 2020. 4. 21.
반응형


데이터 조작어(DML)

테이블에 새로운 데이터를 삽입하거나 기존의 데이터를 수정 및 삭제하기 위한 명령어의 집합이다.


테이블에 내용을 추가하는 INSERT문

테이블에 데이터를 입력하기 위한 명령어 

--문법

INSERT INTO
  table_name

(column_name1,..., column_namaN) //콜럼이름은 생략 가능

VALUES(column_value1,..., column_valueN);

- 한 번에 하나의 로우 INTO 다음에 명시한 테이블에 삽입한다.

- 테이블 명 다음에 기술한 칼럼에 VALUES 절에서 지정한 컬럼 값을 순서대로 입력한다.

- INTO 절에 칼럼을 명시하지 않으면 테이블을 생성할 때 정의한 컬럼 순서와 동일한 순서대로 VALUES 이하의 값이 입력되기 때문에 테이블에. 존재하는 모든 칼럼에 대해서 값을 모두 지정해야 한다.

- 입력되는 데이터 타입은 칼럼의 데이터 타입과 동일해야 하며 입력되는 데이터 크기는 컬럼의 크기보다 작거나 동일해야 한다.

- 삽입할 컬럼의 데이터 타입이 문자와 날짜일 경우에는 반드시 작은따옴표(' ')를 사용해야 함을 유의

**

빈테이블에 내용 추가 하기

컬럼명 명시 안 했을 때 문법

--ACCOUNTING 부서의 정보 입력하기(컬럼명 명시 안했을 때)
INSERT INTO dept_copy
VALUES(10, 'ACCOUNTING','NEW YORK');

결과

SELECT *
FROM dept_copy;

로 값을 확인해보면

순서에 맞게 값이 잘 들어갔다.

컬럼명 명시했을 때 문법

--RESEARCH 부서의 정보 입력하기(컬럼명 명시했을 때)
INSERT INTO dept_copy
(dno, dname, loc) --당연히 콜럼이름에 맞춰서 값순서, 갯수를 1대1로 맞춰줘야한다.
VALUES(20, 'RESEARCH','DALLAS');

마찬가지로

1행씩 삽입되며 삽입 후 결과를 확인해보면

값이 잘 들어갔음을 볼 수 있다.


NULL 값을 갖는 로우 삽입

데이터를 입력하는 시점에서 해당 칼럼 값을 모르거나 확정되지 않았을 경우에는 칼럼의 값으로 NULL을 입력한다.

**

--명시적으로 NULL값 사용하기
INSERT INTO dept_copy
(dno, dname, loc)
VALUES(30,'OPERATION', NULL);
--공백문자사용하기
INSERT INTO dept_copy
VALUES (50, 'COMPUTING', ''); --공백에 NULL 값이 삽입된다

COMMIT;

만약 테이블을 생성할 때 NOT NULL 값을 디폴트 값으로 설정했다면 NULL값은 입력되지 않고, 설정을 다시 해야한다.


다른 테이블에서 데이터 복사하기

INSERT INTO table[(column1,..., columnN)]
SUBquery;

INSERT 절의 칼럼수와 쿼리의 칼럼수가 일치해야 한다. 

**

INSERT INTO dept_copy
SELECT *
FROM department;

테이블의 내용을 수정하는 UPDATE문

테이블에 저장된 데이터를 수정하기 위한 DML

WHERE 절을 생략하면 테이블에 있는 모든 행이 수정된다.

UPDATE  table_name
SET           column_name1=value1,...,column_nameN=valueN
WHERE    conditions;

**

다음과 같은 결과 값을 가지고 있는 테이블에서 특정 로우면 수정하고 싶다면

--특정 로우만 수정하기

UPDATE dept_copy
SET dname='PROGRAMING'
WHERE dno=10;

라는 결과가 나오고 내용을 확인해보면

DNO=10 의 DNAME 값이 바뀐 것을 볼 수 있다.

모든 로우를 수정하고 싶다면 WHERE절을 생략하면 되고

--모든 로우 수정하기

UPDATE dept_copy
SET dname='HR';

1행이 아닌 모든 행이 다 업데이트 된 것을 확인 할 수 있다.

내용을 확인해보면

모든 DNAME 값이 수정 된 것을 볼 수 있다.

여러 값을 수정하고 싶다면 콤마(,)로 구분한다.

--여러개 한번에 수정하기

UPDATE dept_copy
SET dname='PROGRAMMING' , loc='SEOUL'
WHERE dno=10;

서브 쿼리 이용하기

--10번 부서의 지역명을 20번 부서의 지역명으로 변경하기

UPDATE dept_copy
SET loc = (
                    SELECT loc
                    FROM dept_copy
                    WHERE dno=20
                    )
WHERE dno=10;

 


테이블의 내용을 삭제하는 DELETE 문

테이블에서 기존에 저장되어 있던 데이터를 삭제

DELETE [FROM] table_name
WHERE  conditons;

**

--특정 로우만 삭제하기

DELETE dept_copy
WHERE dno=10;
--모든 로우 삭제하기

DELETE dept_copy;

서브 쿼리 이용하기

--영업부에 근무하는 사원삭제
DELETE emp_copy
WHERE dno=(
                        SELECT  dno
                        FROM    department
                        WHERE  dname='SALES'
);

 


[2020/04/21-화요일(28일 차)]

반응형

댓글