Oracle에서 INSERT INTO 문법과 사용법 및 예제 5가지

Oracle 데이터베이스에서 데이터를 테이블에 삽입할 때 사용하는 SQL 문이 바로 INSERT INTO입니다. 이 명령은 테이블에 새로운 행(Row)을 추가하는 데 사용되며, 여러 가지 방식으로 활용할 수 있습니다.


기본 문법

INSERT INTO는 두 가지 형태로 사용할 수 있습니다:

1️⃣ 컬럼 이름을 명시한 형태

INSERT INTO 테이블명 (컬럼1, 컬럼2, ...) 
VALUES (값1, 값2, ...);
  • 장점: 컬럼 순서를 명확히 지정할 수 있어, 데이터가 잘못 삽입될 가능성이 낮음.
  • 컬럼 이름 생략 불가 조건: 테이블에 DEFAULT 값이 없는 컬럼이 있다면 반드시 값을 지정해야 합니다.

2️⃣ 컬럼 이름을 생략한 형태

INSERT INTO 테이블명
VALUES (값1, 값2, ...);
  • 제약: 테이블의 모든 컬럼에 값을 넣어야 하며, 순서는 테이블에 정의된 컬럼 순서를 따라야 합니다.
  • 사용 시 주의가 필요하며, 실무에서는 잘 사용되지 않는 방식입니다.

INSERT INTO 사용 예제

1️⃣ 단일 행 삽입

테이블 생성
CREATE TABLE employees (
employee_id NUMBER(10),
first_name VARCHAR2(50),
last_name VARCHAR2(50),
hire_date DATE,
salary NUMBER(10, 2)
);
값 삽입
INSERT INTO employees (employee_id, first_name, last_name, hire_date, salary) 
VALUES (1, 'John', 'Doe', TO_DATE('2024-11-15', 'YYYY-MM-DD'), 5000.00);
  • 결과:
    employees 테이블에 새로운 행이 추가됩니다.

2️⃣ 다중 행 삽입

방법 1: 여러 INSERT INTO 문 실행
INSERT INTO employees (employee_id, first_name, last_name, hire_date, salary) 
VALUES (2, 'Jane', 'Smith', TO_DATE('2024-11-16', 'YYYY-MM-DD'), 4500.00);

INSERT INTO employees (employee_id, first_name, last_name, hire_date, salary)
VALUES (3, 'Robert', 'Brown', TO_DATE('2024-11-17', 'YYYY-MM-DD'), 5500.00);
방법 2: INSERT ALL 사용
INSERT ALL
INTO employees (employee_id, first_name, last_name, hire_date, salary)
VALUES (4, 'Alice', 'Green', TO_DATE('2024-11-18', 'YYYY-MM-DD'), 6000.00)
INTO employees (employee_id, first_name, last_name, hire_date, salary)
VALUES (5, 'David', 'Taylor', TO_DATE('2024-11-19', 'YYYY-MM-DD'), 4000.00)
SELECT * FROM DUAL;
  • INSERT ALL: 다중 행을 한 번의 SQL로 삽입.
  • DUAL: Oracle의 가상 테이블로, 단순히 SQL 실행을 위한 도구로 사용됩니다.

3️⃣ 서브쿼리 결과를 이용한 데이터 삽입

특정 조건을 만족하는 데이터를 한 테이블에서 다른 테이블로 복사할 때 유용합니다.

INSERT INTO employees (employee_id, first_name, last_name, hire_date, salary) 
SELECT customer_id, first_name, last_name, SYSDATE, 3000.00
FROM customers
WHERE country = 'USA';
  • 설명:
    customers 테이블에서 country가 ‘USA’인 데이터를 가져와 employees 테이블에 삽입합니다.

4️⃣ DEFAULT 값을 사용하는 삽입

테이블에서 기본값이 설정된 컬럼은 삽입 시 값을 생략할 수 있습니다.

테이블 생성
CREATE TABLE orders (
order_id NUMBER(10),
order_date DATE DEFAULT SYSDATE,
total_amount NUMBER(10, 2)
);
값 삽입
INSERT INTO orders (order_id, total_amount) 
VALUES (1, 150.75);
  • 결과:
    order_date는 설정된 기본값(SYSDATE)이 자동으로 삽입됩니다.

5️⃣ MERGE를 활용한 INSERT (UPSERT)

MERGE 문을 사용하면 데이터를 삽입하거나 업데이트할 수 있습니다.

MERGE INTO employees e
USING (SELECT 1 AS employee_id, 'Michael' AS first_name, 'Johnson' AS last_name FROM DUAL) src
ON (e.employee_id = src.employee_id)
WHEN MATCHED THEN
UPDATE SET e.salary = 5500.00
WHEN NOT MATCHED THEN
INSERT (employee_id, first_name, last_name, hire_date, salary)
VALUES (src.employee_id, src.first_name, src.last_name, SYSDATE, 5500.00);
  • 설명:
    employees 테이블에 employee_id = 1이 존재하면 업데이트, 존재하지 않으면 새로 삽입합니다.

실수 방지 및 성능 팁

  1. 트랜잭션 관리:
    • 여러 INSERT 문을 실행할 때는 트랜잭션을 명시적으로 관리합니다.
    sql코드 복사BEGIN; INSERT INTO employees ...; INSERT INTO orders ...; COMMIT;
    • 실패 시 ROLLBACK으로 되돌릴 수 있습니다.
  2. 데이터 확인:
    • SELECT *로 데이터 삽입 전후 상태를 확인하여 잘못된 값 삽입을 방지합니다.
  3. 대량 삽입 시 성능 최적화:
    • 대량 데이터 삽입에는 INSERT /*+ APPEND */를 사용하거나 배치 처리를 고려하세요.

마무리

INSERT INTO는 Oracle에서 데이터를 추가할 때 필수적으로 사용되는 명령입니다. 단일 행, 다중 행, 서브쿼리 등을 통해 다양한 방식으로 활용할 수 있으며, MERGE나 기본값을 조합하여 더 유연한 데이터 처리도 가능합니다. SQL을 작성할 때는 트랜잭션 관리와 데이터 검증을 통해 정확성과 성능을 동시에 유지하는 것이 중요합니다

Leave a Comment