[DB][SQL][국비교육] Day 26

Ga02·2023년 2월 2일

국비교육

목록 보기
24/82

🔍 INSERT 구문

테이블에 새로운 데이터를 삽입할 때 사용

  • 컬럼을 지정하고 컬럼에 맞는 데이터의 항목으로 구성된 한 행을 삽입
    👉🏻 지정하지 않은 컬럼은 null로 채움
INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
VALUES (1001, 'ALICE', 'CLERK', 1003, '17/6/9', 800, null, 30 );
  • 컬럼을 지정하지 않고 모든 컬럼에 맞게 데이터의 항목을 채움
    👉🏻 VALUES의 모든 값은 COLUMN_ID 순서에 맞게 입력해야 함
INSERT INTO emp
VALUES ( 1002, 'MORRIS', 'CLERK', 1003, '17/01/02', 800, NULL, 30 );
  • VALUES 절을 대신하여 SELECT 구문을 작성
    👉🏻 SELECT 구문의 조회결과를 삽입
INSERT INTO emp
SELECT 1003, 'MATHEW', 'SALESMAN', NULL, sysdate, 1500, 100, 30 FROM dual;

🔍 INSERT ALL 구문

SELECT 구문의 조회결과를 조건에 따라서 INSERT되도록 하는 SQL구문 👉🏻 여러 개의 INSERT구문으로 작성해야할 쿼리를 한 개의 쿼리로 수행할 수 있게 해줌

  • THEN절의 컬럼명 리스트는 생략 가능 👉🏻 모든 컬럼에 값을 삽입
  • VALUES절 생략 가능 👉🏻 SELECT절 수행결과의 모든 행을 삽입
INSERT ALL
    WHEN deptno = 20
    THEN INTO emp_research
    
    WHEN deptno = 30
    THEN INTO emp_research (empno, ename)
    VALUES (empno, ename)
SELECT * FROM emp;

🔍 DELETE 구문

테이블의 데이터(행)을 삭제할 때 사용하는 sql구문

  • FROM 생략 가능
  • WHERE절 없이 DELETE 가능 👉🏻 ❗ 전체 행이 삭제되므로 주의
DELETE emp_research;

🔍 UPDATE 구문 - DML

테이블의 데이터(행)을 수정하는 SQL구문

  • 행의 특정 컬럼값을 골라서 변경할 수 있음
  • WHERE절 없이 사용하면 모든 행의 데이터를 일괄적으로 변경
SELECT * FROM emp
UPDATE emp SET ename = 'Burger', job = 'King'
WHERE empno = 1001;

🔍 MERGE구문 - DML

💡 오라클 전용 구문
SELECT의 조회 결과 중에서 조건절에 맞는 데이터가
존재할 경우 : UPDATE 또는 DELETE 수행
존재하지 않을 경우 : INSERT 수행

  • INTO절 : 병합(MERGE)이 이루어질 대상 테이블을 지정
  • USING절 : 조건값을 비교할 기준 테이블 또는 서브쿼리
  • ON절 : WHEN절에서 반응할 조건문을 작성
  • WHEN MATCHED절 : ON절의 조건을 만족하는 데이터가 USING테이블의 조회결과로 존재할 때 수행하는 영역 👉🏻 UPDATE / DELETE
  • WHEN NOT MATCHED절 : ON절의 조건을 만족하는 데이터가 USING테이블의 조회결과로 존재하지 않을 때 수행하는 영역 👉🏻 INSERT
MERGE INTO emp_merge M
USING (
    SELECT empno, ename, sal, deptno
    FROM emp
    WHERE deptno IN (20, 30)
) E
ON (M.empno = E.empno)
WHEN MATCHED THEN
    UPDATE SET sal = sal*1.3
--    WHERE sal < 2000      --WHERE절로 UPDATE 조건 설정 가능
WHEN NOT MATCHED THEN
    INSERT (M.empno, M.ename, M.sal, M.deptno)
    VALUES (E.empno, E.ename, E.sal, E.deptno);
--    WHERE E.sal > 1000    --WHERE절로 INSERT 조건 설정 가능

🔍 트랜잭션, Transaction

DB 클라이언트마다 작업한 내역을 임시로 보관하는 것
👉🏻 다른 클라이언트의 작업 상황에 방해되지 않도록 작업한 내역을 원본 테이블에 즉시 반영하지 않음

  • INSERT, UPDATE, DELETE 작업내역만 보관 👉🏻 SELECT 작업 내역은 보관하지 않음
  • DBMS입장에서는 트랜잭션을 작업의 단위로 인식
  • 한번의 트랜잭션에는 여러개의 DML코드로 구성됨
    DML 코드 : SELECT INSERT UPDATE DELETE

➰ TCL, Transaction Control Language

트랜잭션을 제어(관리)하는 sql구문 👉🏻 DCL로 분류됨

  • COMMIT : 작업내역을 물리적으로 영구반영
    • Auto Commit(자동반영)
      DDL, DCL이 완료되는 시점 / SQL PLUS의 정상종료 시점에 수행됨
  • ROLLBACK : 작업내역을 반영하지 않고 원상복구(되돌림)
    • Auto Rollback(자동 원상복구)
      시스템의 비정상적 복구 / SQL PLUS의 비정상적 종료시 수행됨
profile
IT꿈나무 댓츠미

0개의 댓글