-
Oracle에서 INSERT INTO 사용법 및 실용적인 예제 5가지데이터 엔지니어링/SQL 2024. 11. 15. 21:27반응형
데이터베이스를 다루다 보면 새로운 데이터를 추가해야 할 때가 많습니다. 이때 사용하는 기본 SQL 명령어가 바로 **INSERT INTO**입니다. Oracle Database에서 INSERT INTO는 데이터를 테이블에 삽입하기 위한 가장 기본적인 방법입니다. 단일 행에서부터 다중 행, 서브쿼리까지 다양한 방식으로 활용 가능합니다.
INSERT INTO 기본 문법
1️⃣ 컬럼을 지정하는 방식
INSERT INTO 테이블명 (컬럼1, 컬럼2, ...) VALUES (값1, 값2, ...);
- 특정 컬럼에만 값을 지정하며 삽입합니다.
- 컬럼 순서를 지정해 명확성을 높이고, 실수를 방지할 수 있습니다.
2️⃣ 컬럼을 생략하는 방식
INSERT INTO 테이블명 VALUES (값1, 값2, ...);
- 테이블의 모든 컬럼에 값을 넣어야 하며, 컬럼 순서를 반드시 테이블 구조와 동일하게 맞춰야 합니다.
- 컬럼 생략은 실수의 여지가 있어 잘 사용되지 않는 방식입니다.
예제: Oracle에서 INSERT INTO 사용하기
1️⃣ 단일 행 데이터 삽입
테이블 생성
CREATE TABLE students ( student_id NUMBER(5), name VARCHAR2(50), age NUMBER(3), enrollment_date DATE );
데이터 삽입
INSERT INTO students (student_id, name, age, enrollment_date) VALUES (1001, 'Alice', 20, TO_DATE('2024-11-15', 'YYYY-MM-DD'));
- 결과:
students 테이블에 새로운 행이 추가됩니다.
2️⃣ 기본값을 사용하는 삽입
테이블에 기본값이 설정된 컬럼이 있다면 삽입 시 해당 값을 생략할 수 있습니다.
기본값 설정된 테이블 생성
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 (2001, 500.50);
- 설명:
order_date는 명시적으로 값을 입력하지 않아도 기본값으로 현재 날짜(SYSDATE)가 자동 삽입됩니다.
3️⃣ 다중 행 삽입
방법 1: 여러 개의 INSERT INTO 문 실행
INSERT INTO students (student_id, name, age, enrollment_date) VALUES (1002, 'Bob', 22, TO_DATE('2024-11-16', 'YYYY-MM-DD')); INSERT INTO students (student_id, name, age, enrollment_date) VALUES (1003, 'Cathy', 23, TO_DATE('2024-11-17', 'YYYY-MM-DD'));
방법 2: INSERT ALL 사용
INSERT ALL INTO students (student_id, name, age, enrollment_date) VALUES (1004, 'David', 21, SYSDATE) INTO students (student_id, name, age, enrollment_date) VALUES (1005, 'Eve', 20, SYSDATE) SELECT * FROM DUAL;
- 설명:
INSERT ALL을 사용하면 한 번의 실행으로 여러 행을 삽입할 수 있습니다.
DUAL은 Oracle의 가상 테이블로, 데이터를 직접 삽입하지 않고 명령 실행을 위한 도구로 활용됩니다.
4️⃣ 서브쿼리를 사용한 삽입
서브쿼리를 통해 다른 테이블의 데이터를 기반으로 행을 삽입할 수 있습니다.
INSERT INTO students (student_id, name, age, enrollment_date) SELECT customer_id, customer_name, customer_age, SYSDATE FROM customers WHERE status = 'active';
- 설명:
customers 테이블에서 status가 'active'인 데이터를 students 테이블로 복사합니다.
5️⃣ MERGE를 활용한 삽입과 업데이트
Oracle의 MERGE 문은 데이터가 이미 존재하는지 확인 후 업데이트하거나, 존재하지 않으면 **삽입(INSERT)**하는 동작을 수행합니다.
MERGE INTO students s USING (SELECT 1006 AS student_id, 'Frank' AS name, 25 AS age FROM DUAL) src ON (s.student_id = src.student_id) WHEN MATCHED THEN UPDATE SET s.age = src.age WHEN NOT MATCHED THEN INSERT (student_id, name, age, enrollment_date) VALUES (src.student_id, src.name, src.age, SYSDATE);
- 설명:
- student_id가 이미 존재하면 나이를 업데이트합니다.
- 존재하지 않을 경우 새로운 데이터를 삽입합니다.
INSERT INTO 사용 시 주의사항
1️⃣ NOT NULL 제약 조건 확인
INSERT 시 테이블의 특정 컬럼이 NOT NULL로 설정되어 있다면 해당 컬럼에 반드시 값을 제공해야 합니다. 값이 없으면 오류가 발생합니다.
2️⃣ 데이터 타입 일치
각 값의 데이터 타입이 테이블의 컬럼 데이터 타입과 맞지 않으면 삽입이 실패할 수 있습니다. 예를 들어, 숫자 컬럼에 문자열 값을 삽입하려고 하면 오류가 발생합니다.
3️⃣ 성능 최적화
대량의 데이터를 삽입할 때는 INSERT /*+ APPEND */ 힌트를 사용하거나 배치 처리를 통해 성능을 개선할 수 있습니다.
실무에서의 INSERT INTO 활용 사례
- 로그 데이터 삽입
실시간으로 로그 데이터를 기록하는 경우:sql코드 복사INSERT INTO logs (log_id, message, created_at) VALUES (LOG_SEQ.NEXTVAL, 'Application started', SYSDATE); - 백업 테이블 생성 및 데이터 복사
데이터를 다른 테이블로 백업하는 경우:sql코드 복사INSERT INTO students_backup SELECT * FROM students; - 조건부 데이터 삽입
특정 조건에 맞는 데이터만 추가:sql코드 복사INSERT INTO high_achievers (student_id, name) SELECT student_id, name FROM students WHERE grade > 90;
결론
Oracle의 INSERT INTO는 데이터 삽입의 핵심 명령어로, 단일 행, 다중 행, 서브쿼리, 조건부 삽입 등 다양한 활용이 가능합니다. 실무에서는 데이터 일관성과 효율성을 유지하기 위해 트랜잭션 관리와 성능 최적화 기법을 함께 사용하는 것이 중요합니다.
반응형'데이터 엔지니어링 > SQL' 카테고리의 다른 글
Oracle 문자열 분리 Split: 방법과 활용 예시 (0) 2024.11.15 DB Isolation(데이터베이스 격리)란? (0) 2024.11.15 Oracle UPDATE 문 사용법과 다양한 예제 모음 (0) 2024.11.14 [Oracle] 오류 해결 ORA-00933: SQL 명령어가 올바르게 종료되지 않았습니다. (0) 2021.02.24 MSSQL 로그파일 트랜잭션 내용 정리 (오류 해결 :트랜잭션 로그가 꽉 찼습니다.) (0) 2021.02.22