평범한 연구소

[오라클 SQL] 데이터 조작 언어 (DML) 본문

DB|SQL

[오라클 SQL] 데이터 조작 언어 (DML)

soyeonisgood 2022. 8. 21. 12:03

DML (Data Manipulation Language)

  • 사용자로 하여금 데이터를 처리할 수 있게 하는 도구로서, 사용자와 DBMS간의 인터페이스 제공
  • SELECT, INSERT, UPDATE, DELETE, MERGE
  • 응용프로그램을 통하여 사용자가 DB데이터를 실질적으로 조작할 수 있도록 하기 위해 다양한 언어에 DB기능을 추가해서 만든 언어
  • ROLLBACK 가능

 

트랜잭션 (Transaction)

  • DB의 상태를 변환시키는 하나의 논리적 기능 수행하기 위한 작업의 단위 또는 한 번에 모두 수행되어야할 일련의 연산들
  • DB시스템에서 병행제어 및 회복 작업 시 처리되는 작업의 논리적 단위
  • 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업 단위
  • 하나의 트랜잭션은 COMMIT 되거나 ROLLBACK 됨.

 

INSERT INTO ~ VALUES

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

INSERT INTO test1 (num,name,birth,memo)VALUES (5, '하하하', '05/05/90', '테스트'); -- 에러
					-- 에러. 날짜 형식 오류
                    
INSERT INTO test1 (num,name,birth,memo)VALUES (5, '하하하', 
						TO_DATE('05/05/90','MM/DD/RR'), '테스트'); 

-- 추가 -> num:7, name:이이이, birth:2000-09-09, reg_date:202208091544
INSERT INTO test1 (num, name, birth, reg_date)VALUES (7, '이이이',
		'2000-09-09', TO_TIMESTAMP('202208091544', 'YYYYDDMMHH24MISSFF3') );

서브쿼리(subquery)를 이용한 다중 행 입력

INSERT INTO 테이블명 [( 컬럼, 컬럼 )]  SELECT 문;

-- 존재하는 테이블에 서브쿼리를 이용하여 레코드 추가
INSERT INTO emp1 SELECT empNo, name, dept, pos FROM emp WHERE dept='개발부';

 

다중 테이블에 다중 행 추가

INSERT ALL
	INTO 테이블명1 [( 컬럼, 컬럼 )] VALUES (수식1,수식2)
    INTO 테이블명2 [( 컬럼, 컬럼 )] VALUES (수식1,수식2)
      ...
subquery;

// JAVA
INSERT ALL
	INTO member1(id, pwd, name) VALUES (?,?,?)
	INTO member2(id, birth, email, tel) VALUES(?,?,?,?)
SELECT * FROM dual;

INSERT ALL
	INTO emp2 (empNo, name, dept, pos) VALUES (empNo, name, dept, pos)
	INTO emp3 VALUES (empNo, sal, bonus)
SELECT * FROM emp WHERE dept='개발부';

특정 조건의 다중 행 추가

INSERT ALL
	WHEN 조건1 THEN
		INTO 테이블명1 [( 컬럼, 컬럼 )] VALUES (수식1,수식2)
    WHEN 조건2 THEN
        INTO 테이블명2 [( 컬럼, 컬럼 )] VALUES (수식1,수식2)
        ...
    ELSE
        INTO 테이블명n [( 컬럼, 컬럼 )] VALUES (수식1,수식2)
subquery;

 

SELECT ~ FROM ~ 

SELECT 컬럼 FROM 테이블;

SELECT 컬럼 FROM 테이블 WHERE 조건;

 

UPDATE ~ SET ~ WHERE

UPDATE 테이블명 SET 컬럼=값, 컬럼=값 WHERE 조건;

UPDATE 테이블명 SET 컬럼=값, 컬럼=값;   -- 모든레코드 수정

 

 

DELETE FROM ~ WHERE

DELETE FROM 테이블명 WHERE 조건;

DELETE FROM 테이블명;  -- 모든레코드 삭제

 

 

MERGE INTO ~ ON 

MERGE INTO 대상테이블명
	USING 비교할테이블 ON ( 조건 )
	WHEN MATCHED THEN
		UPDATE SET 컬럼=값, 컬럼=값
     WHEN NOT MATCHED THEN
        INSERT [ (컬럼, 컬럼) ] VALUES (값, 값)
;