lafee 2019. 8. 1. 16:51
반응형

 

 

DML : 데이터 조작어

  • SELECT
  • INSERT
  • DELETE
  • UPDATE
  • MERGE

 

SELECT 

 

  • 하나 또는 그 이상의 테이블에서 데이터를 추출하는 데이터 조작 명령어.
  • SELECT (칼럼명, 칼럼명...) FROM (추출할 테이블)

 

emp_hir에 있는 전체 테이블을 출력했다.

 

emp_hir에 있는 empno, ename 속성만 출력하였다.

 

 

INSERT 

 

  • 테이블에 데이터를 입력하는 데이터 조작 명령어.
  • 새로운 데이터를 입력할 수 있다.

 

dept02 테이블에 열을 하나 추가하였다.

 

NUMBER(2)인데, 세 자리 숫자를 넣어 주었기 때문에 해당 INSERT문은 실행되지 않는다. 

 

 

 

열 개수와 같다면 컬럼 명을 지정해 주지 않아도 괜찮다.

 

 

해당 테이블 안에 있는 내용 전체 / 칼럼을 지정해 INSERT 할 수도 있다.

 

 

INSERT ALL 

  • 하나의 쿼리로 여러 테이블에 데이터를 입력할 수 있다.

 

INSERT ALL
WHEN 조건식A THEN
	INTO 테이블명A VALUES(컬럼명, 컬럼명, ...)
WHEN 조건식B THEN
	INTO 테이블명B VALUES(컬럼명, 컬럼명, ...)
SELECT 컬럼명, 컬럼명, ...
FROM 테이블명;

 

 

INSERT ALL INTO emp_hir VALUES(empno, ename, hiredate)

INTO emp_mgr VALUES(empno, ename, mgr)

SELECT empno, ename, hiredate, mgr FROM emp WHERE deptno=20;

 

EMP 테이블에서 deptno이 20인 값만 emp_hir / emp_mgr에 하나의 쿼리로 넣어 주었다.

 

 

 

 

INSERT ALL

WHEN hiredate > '1982/01/01' THEN INTO emp_hir01 VALUES(empno, ename, hiredate)

WHEN sal>=2000 THEN INTO emp_sal VALUES(empno, ename, sal)

SELECT empno, ename, hiredate, sal FROM emp;

입사일이 1982년 이후인 emp 테이블의 값은 emp_hir01에 넣어 주고, sal 값이 2000 이상이면 emp_sal 테이블에 넣어 주는 쿼리이다.  

 

 

DELETE 

  • 존재하는 데이터를 삭제할 수 있다.
  • 데이터만 삭제되고 공간은 남아 있다는 점을 유의. - DELETE vs TRUNCATE vs DROP

 

존재하는 행의 데이터를 전부 지우나, 쓰고 있던 데이터 상의 공간은 그대로 남아 있다. 

 

 

UPDATE

  • 기존의 데이터를 수정할 수 있다.

 

UPDATE 테이블명

SET 컬럼명1=, 컬럼명2=, 

WHERE 조건식;

 

 

 

UPDATE emp06
SET deptno=30;

emp06 테이블에 있는 모든 deptno 값을 30으로 변경하였다.

 

 

 


 


UPDATE emp07
SET sal=sal*1.1
WHERE job = 'MANAGER';

job 컬럼의 값이 MANAGER인 컬럼에만 SAL 컬럼의 값에 1.1을 곱해 주었다.

 

 

 


 

 

UPDATE emp07
SET hiredate=sysdate
WHERE SUBSTR(hiredate, 0, 2)='87';

입사 날짜에서 년도만 잘라 해당 문자가 87인 값에 대해 오늘 날짜로 바꿔 주었다.

 

 


 


UPDATE emp08
SET hiredate=sysdate, sal=7000, comm=2000
WHERE ename='JAMES';

ename이 'JAMES'인 값에 대해 hiredate를 오늘 날짜, sal을 7000, comm을 2000으로 바꿔 주었다.

 

 


 

 

 UPDATE dept04
SET loc  = (SELECT loc FROM dept04 WHERE deptno=40)
WHERE deptno=20;

dept04 테이블에서 deptno을 20으로 가지는 loc 컬럼 값에 대해 deptno이 40인 열의 loc 값으로 바꿔 주었다.  

 

 

DELETE

  • 데이터를 삭제하는 명령어
  • 하나의 테이블 안에 있는 데이터를 전체 삭제할 수도 있지만,
  • WHERE 조건절로 어떤 데이터를 삭제할지 지정할 수도 있다.

 

DELETE FROM dept07;

dept07에 있는 데이터를 전부 삭제하였다.

 

 

 

DELETE FROM dept06
WHERE deptno=40;

dept06에서 deptno이 40인 값만 삭제하였다. 

 

 

DELETE FROM emp09
WHERE deptno = (SELECT deptno FROM dept WHERE dname = 'SALES');

 

SALES 부서의 deptno을 단일 서브쿼리로 받아서 (30) SALES 부서에 근무하는 사람만 삭제하였다.

 

 

MERGE

 

  •    구조가 같은 테이블을 병합하는 명령어   

 

MERGE INTO 테이블명A

USING 테이블명B

ON(테이블명A.컬럼1=테이블명B.컬럼1)

--기준 테이블에 자료가 존재하는 경우

WHEN MATCHED THEN

UPDATE SET 테이블명A.컬럼1=테이블명B.컬럼1,

테이블명A.컬럼2=테이블명B.컬럼2,

테이블명A.컬럼3=테이블명B.컬럼3,

...

테이블명A.컬럼n=테이블명B.컬럼n,

--기준 테이블에 자료가 존재하지 않는 경우

WHEN NOT MATCHED THEN

INSERT VALUES(테이블명B.컬럼명, 테이블명B.컬럼명, ...);

 

 

 

아래에 해당 코드에 대한 설명이 있다.

 

emp10에 emp11에 있는 컬럼 값을 합쳐서 두 테이블을 병합하는데,

emp10의 empno와 emp11의 empno를 비교해서

해당 값이 존재하면 (두 개가 같은) emp10의 모든 컬럼 값을 emp11의 값으로 변경하고,

해당 값이 존재하지 않으면 emp11에 있는 값을 emp10에 넣는다.

 

 

 

반응형