코딩 스쿨 SQL

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

SQL Insert Into

SQL INSERT INTO SELECT: 다른 테이블의 데이터를 복사하여 삽입

SQL INSERT INTO SELECT 구문은 한 테이블의 데이터를 다른 테이블에 복사하여 삽입하는 데 사용됩니다. 기존의 데이터를 기반으로 새로운 테이블에 추가하거나, 특정 조건을 만족하는 데이터만 선택하여 삽입할 수 있습니다. INSERT INTO SELECT는 주로 데이터를 테이블 간 이동이나 백업, 필터링된 데이터 삽입에 유용합니다.

1. 기본 INSERT INTO SELECT 문법

INSERT INTO 대상_테이블 (열1, 열2, ...)
SELECT 열1, 열2, ...
FROM 원본_테이블
WHERE 조건;
  • 대상_테이블: 데이터를 삽입할 테이블.
  • 열1, 열2, ...: 삽입할 열의 이름. 원본 테이블과 대상 테이블의 열 개수와 데이터 유형이 일치해야 합니다.
  • SELECT: 원본 테이블에서 선택한 열.
  • FROM: 데이터를 가져올 원본 테이블.
  • WHERE: 삽입할 데이터를 필터링하는 선택적 조건.

2. SQL INSERT INTO SELECT 예제

2.1 모든 데이터를 다른 테이블에 삽입

다음은 employees 테이블에서 모든 데이터를 employees_backup 테이블로 복사하여 삽입하는 예제입니다.

INSERT INTO employees_backup (name, department, salary)
SELECT name, department, salary
FROM employees;

이 쿼리는 employees 테이블의 모든 데이터를 employees_backup 테이블에 삽입합니다.

결과:

  • employees_backup 테이블에 employees 테이블의 데이터가 추가됩니다.

2.2 조건을 만족하는 데이터만 삽입

다음은 Sales 부서의 직원들만 sales_employees 테이블에 삽입하는 예제입니다.

INSERT INTO sales_employees (name, department, salary)
SELECT name, department, salary
FROM employees
WHERE department = 'Sales';

이 쿼리는 Sales 부서에 속한 직원들만 sales_employees 테이블에 삽입합니다.

결과:

  • sales_employees 테이블에 Sales 부서의 직원들만 추가됩니다.

3. 열을 선택하여 삽입

대상 테이블의 특정 열만 선택하여 삽입할 수 있습니다. 이 경우, SELECT 문에서 선택한 열의 순서대상 테이블의 열 순서와 일치해야 합니다.

예제: 특정 열만 삽입

INSERT INTO employees_backup (name, salary)
SELECT name, salary
FROM employees;

이 쿼리는 employees 테이블의 namesalaryemployees_backup 테이블에 삽입합니다.

결과:

  • employees_backup 테이블에 namesalary 값만 추가됩니다.

4. 다른 데이터베이스 간 데이터 삽입

INSERT INTO SELECT를 사용하여 하나의 데이터베이스에서 다른 데이터베이스로 데이터를 복사할 수 있습니다.

예제: 다른 데이터베이스로 데이터 복사

INSERT INTO other_database.dbo.employees_backup (name, department, salary)
SELECT name, department, salary
FROM employees;

이 쿼리는 employees 테이블의 데이터를 other_database에 있는 employees_backup 테이블로 복사합니다.

결과:

  • other_database에 있는 employees_backup 테이블에 데이터가 추가됩니다.

5. JOIN을 사용한 INSERT INTO SELECT

INSERT INTO SELECTJOIN을 사용하여 여러 테이블에서 데이터를 결합하고, 그 결과를 새로운 테이블에 삽입할 수 있습니다.

예제: 직원과 부서 정보를 결합하여 삽입

INSERT INTO employees_department_info (name, salary, department_name)
SELECT e.name, e.salary, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.id;

이 쿼리는 employeesdepartments 테이블을 JOIN하여 직원 이름, 급여, 부서 이름employees_department_info 테이블에 삽입합니다.

결과:

  • employees_department_info 테이블에 결합된 직원과 부서 정보가 삽입됩니다.

6. 기존 테이블에 데이터 추가 삽입

INSERT INTO SELECT는 이미 데이터가 있는 테이블에 새로운 데이터를 추가하는 데 주로 사용됩니다. 테이블이 이미 존재하고, 그 구조에 맞는 데이터를 삽입해야 합니다.

예제: 데이터가 있는 테이블에 새로운 데이터 추가

INSERT INTO employees_backup (name, department, salary)
SELECT name, department, salary
FROM employees
WHERE hire_date > '2023-01-01';

이 쿼리는 employees 테이블에서 2023년 이후에 입사한 직원의 정보를 employees_backup 테이블에 추가로 삽입합니다.

결과:

  • employees_backup 테이블에 2023년 이후 입사한 직원 데이터가 추가됩니다.

7. NULL 값을 처리하여 삽입

데이터를 삽입할 때, NULL 값을 처리하는 것이 중요합니다. 예를 들어, 어떤 값이 NULL일 경우 기본값을 설정하려면 COALESCE() 함수를 사용할 수 있습니다.

예제: NULL 값을 기본값으로 대체하여 삽입

INSERT INTO employees_backup (name, department, salary)
SELECT name, department, COALESCE(salary, 0)
FROM employees;

이 쿼리는 employees 테이블에서 salary 값이 NULL인 경우 0으로 대체하여 employees_backup 테이블에 삽입합니다.

결과:

  • employees_backup 테이블에 salary 값이 NULL인 경우 0이 삽입됩니다.

8. INSERT INTO SELECT와 성능 고려

INSERT INTO SELECT는 대량의 데이터를 처리할 때 성능에 영향을 미칠 수 있습니다. 데이터가 많을 경우, 트랜잭션 처리, 인덱스 사용, 데이터베이스 락 등을 고려해야 합니다. 데이터를 효율적으로 삽입하기 위해서는 필요한 데이터만 선택하고, 불필요한 데이터를 제거하는 것이 중요합니다.

성능 향상 팁:

  • 필요한 열만 선택: 모든 열을 복사하는 대신 필요한 열만 선택하여 삽입.
  • 트랜잭션 관리: 대량의 데이터를 처리할 때는 트랜잭션을 적절히 관리하여 성능을 향상시킴.
  • 인덱스 사용: 인덱스를 적절히 사용하여 검색 및 삽입 속도를 높일 수 있음.

9. INSERT INTO SELECT의 주의 사항

  • 열의 데이터 유형 일치: 삽입하려는 열과 원본 테이블의 열 데이터 유형이 일치해야 합니다.
  • 테이블 구조: 대상 테이블이 이미 존재해야 하며, 삽입하려는 데이터의 구조와 일치해야 합니다.
  • 기본 키 및 제약 조건: 대상 테이블에 기본 키나 제약 조건이 있는 경우, 중복된 데이터나 규칙에 맞지 않는 데이터는 삽입되지 않을 수 있습니다.

10. 실전 예제

예제 1: 다른 데이터베이스에 직원 정보 복사

INSERT INTO backup_database.dbo.employees_backup (name, department, salary)
SELECT name, department, salary
FROM employees
WHERE hire_date > '2023-01-01';

이 쿼리는 employees 테이블에서 2023년 이후에 입사한 직원의 정보를 backup_databaseemployees_backup 테이블로 복사합니다.

예제 2: 특정 조건을 만족하는 데이터만 삽입

INSERT INTO high_salary_employees (name, salary)
SELECT name, salary
FROM employees
WHERE salary > 5000;

이 쿼리는 급여가 5000 이상인 직원들high_salary_employees 테이블에 삽입합니다.

예제 3: 부서와 결합된 데이터를 삽입

INSERT INTO employees_department_info (name, salary, department_name)
SELECT e.name, e.salary, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.id;

이 쿼리는 employeesdepartments 테이블을 JOIN하여 결합된 데이터를 employees_department_info 테이블에 삽입합니다.

11. 요약

  • SQL INSERT INTO SELECT 구문은 한 테이블의 데이터를 다른 테이블에 복사하여 삽입하는 데 사용됩니다.
  • 조건에 맞는 데이터를 필터링하여 복사할 수 있으며, 다른 데이터베이스 간에도 데이터를 삽입할 수 있습니다.
  • JOIN을 사용하여 여러 테이블의 데이터를 결합한 후 삽입할 수 있습니다.
  • 삽입하는 데이터의 구조와 데이터 유형이 일치

해야 하며, 대량의 데이터를 처리할 때는 성능과 트랜잭션 관리를 고려해야 합니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com