본문 바로가기

자린고비 독학하기/자린고비 코딩하기

SQL - DML

반응형

 

 

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에 넣는다.

 

 

 

반응형

'자린고비 독학하기 > 자린고비 코딩하기' 카테고리의 다른 글

SQL - 뷰 (VIEW)  (0) 2019.08.05
SQL - 트랜잭션  (0) 2019.08.02
SQL - DATA DICTIONARY VIEW  (0) 2019.08.01
SQL - JOIN  (0) 2019.07.31
SQL - 그룹 함수 / GROUP BY / HAVING  (1) 2019.07.31