SQL Select Into
SQL SELECT INTO: 데이터를 새 테이블로 복사
SQL SELECT INTO 구문은 기존 테이블의 데이터를 새 테이블로 복사하는 데 사용됩니다. 이를 통해 새 테이블을 생성하고, SELECT 쿼리의 결과를 그 테이블에 삽입할 수 있습니다. 이 방법은 주로 테이블 백업, 특정 데이터를 기반으로 한 새로운 테이블 생성 등에 사용됩니다.
1. 기본 SELECT INTO 문법
SELECT 열이름
INTO 새_테이블
FROM 기존_테이블
WHERE 조건;
- SELECT: 기존 테이블에서 선택할 열.
- INTO: 새로운 테이블을 생성할 때 사용.
- 새_테이블: 데이터를 복사할 새로운 테이블의 이름.
- FROM: 데이터를 가져올 기존 테이블.
- WHERE: 조건에 맞는 데이터만 선택.
2. SQL SELECT INTO 예제
2.1 기존 테이블 데이터를 새 테이블로 복사
다음은 employees
테이블에서 모든 직원 정보를 새로운 백업 테이블인
employees_backup
으로 복사하는 예제입니다.
SELECT *
INTO employees_backup
FROM employees;
이 쿼리는 employees
테이블의 모든 데이터를 employees_backup이라는 새로운 테이블에 복사합니다.
결과:
- 새 테이블 employees_backup이 생성되고, employees 테이블의 모든 데이터가 복사됩니다.
2.2 조건을 만족하는 데이터만 새 테이블로 복사
다음은 Sales 부서의 직원 정보만 새로운 테이블로 복사하는 예제입니다.
SELECT *
INTO sales_employees
FROM employees
WHERE department = 'Sales';
이 쿼리는 Sales 부서에 속한 직원들만 sales_employees라는 새로운 테이블에 복사합니다.
결과:
- 새 테이블 sales_employees가 생성되고, Sales 부서에 속한 직원들만 복사됩니다.
3. 특정 열만 선택하여 복사
SELECT INTO를 사용할 때, 특정 열만 선택하여 복사할 수 있습니다. 이렇게 하면 필요하지 않은 데이터를 제외하고 중요한 데이터만 새 테이블로 가져올 수 있습니다.
예제: 직원 이름과 급여만 복사
SELECT name, salary
INTO employees_salaries
FROM employees;
이 쿼리는 name과 salary 열만 employees_salaries라는 새로운 테이블로 복사합니다.
결과:
- 새 테이블 employees_salaries가 생성되고, 직원 이름과 급여 정보만 복사됩니다.
4. SELECT INTO와 JOIN 결합
SELECT INTO는 JOIN을 사용하여 여러 테이블에서 데이터를 결합한 후 새로운 테이블로 복사할 수 있습니다.
예제: 직원과 부서 정보를 결합하여 새 테이블로 복사
SELECT e.name, e.salary, d.department_name
INTO employees_department_info
FROM employees e
JOIN departments d ON e.department_id = d.id;
이 쿼리는 employees
와 departments
테이블을 JOIN하여 직원 이름, 급여, 부서
이름을 employees_department_info라는 새로운 테이블로 복사합니다.
결과:
- 새 테이블 employees_department_info가 생성되고, 직원과 부서 정보가 결합된 데이터가 복사됩니다.
5. 기존 테이블의 구조만 복사 (데이터 없이)
기존 테이블의 구조만 복사하고 데이터를 포함하지 않는 새 테이블을 만들려면, 조건을 FALSE로 설정하여 데이터를 제외할 수 있습니다.
예제: 테이블 구조만 복사
SELECT *
INTO employees_structure
FROM employees
WHERE 1 = 0;
이 쿼리는 employees
테이블의 구조만 복사하여 employees_structure라는 새로운 테이블을 생성하지만,
데이터는 복사하지 않습니다.
결과:
- 새 테이블 employees_structure가 생성되지만, 데이터는 포함되지 않습니다.
6. SELECT INTO와 데이터베이스 간 복사
SELECT INTO는 한 데이터베이스에서 다른 데이터베이스로 데이터를 복사할 때도 사용할 수 있습니다. 복사할 데이터베이스의 이름을 지정하여 데이터를 다른 데이터베이스로 전송할 수 있습니다.
예제: 다른 데이터베이스로 데이터 복사
SELECT *
INTO other_database.dbo.employees_backup
FROM employees;
이 쿼리는 employees
테이블의 데이터를 other_database라는 데이터베이스의 employees_backup
테이블에 복사합니다.
7. SELECT INTO와 성능
- SELECT INTO는 대량의 데이터를 복사할 때 성능에 영향을 미칠 수 있습니다. 특히, 데이터베이스 간 복사나 여러 테이블을 결합하는 경우 성능이 저하될 수 있으므로, 필요한 열만 선택하여 복사하거나 적절한 인덱스를 사용하는 것이 중요합니다.
- 대규모 데이터 복사 작업에서는 복사 시간과 시스템 리소스를 고려해야 하며, 트랜잭션 관리와 인덱스 생성에 주의를 기울여야 합니다.
8. SELECT INTO의 주의 사항
- 테이블이 이미 존재하면 오류 발생: SELECT INTO는 새로운 테이블을 생성하기 때문에, 동일한 이름의 테이블이 이미 존재하면 오류가 발생합니다. 기존 테이블에 데이터를 추가하려면 INSERT INTO SELECT 구문을 사용해야 합니다.
- 인덱스 및 제약 조건: 새 테이블은 원본 테이블의 인덱스, 제약 조건(Constraints), 기본 키를 상속하지 않으므로, 필요한 경우 수동으로 설정해야 합니다.
9. SELECT INTO vs INSERT INTO SELECT
- SELECT INTO: 새로운 테이블을 생성하고, 데이터를 복사합니다.
- INSERT INTO SELECT: 이미 존재하는 테이블에 데이터를 삽입할 때 사용됩니다.
예제: INSERT INTO SELECT 사용
INSERT INTO employees_backup (name, department, salary)
SELECT name, department, salary
FROM employees;
이 쿼리는 기존 테이블 employees_backup에 데이터를 삽입합니다.
10. 실전 예제
예제 1: 부서별로 직원 정보 복사
SELECT *
INTO engineering_employees
FROM employees
WHERE department = 'Engineering';
이 쿼리는 Engineering 부서의 직원만 새로운 테이블에 복사합니다.
예제 2: 다른 데이터베이스로 데이터 복사
SELECT *
INTO newdb.dbo.employee_backup
FROM employees;
이 쿼리는 employees 테이블을 newdb 데이터베이스로 복사합니다.
예제 3: 테이블 구조만 복사
SELECT *
INTO empty_employees
FROM employees
WHERE 1 = 0;
이 쿼리는 employees 테이블의 구조만 복사합니다.
11. 요약
- SQL SELECT INTO 구문은 기존 테이블의 데이터를 새로운 테이블로 복사하는 데 사용됩니다.
- 데이터뿐만 아니라, 테이블 구조만 복사할 수도 있습니다.
- 여러 테이블의 데이터를 결합하거나, 특정 조건에 맞는 데이터를 복사할 수 있습니다.
- SELECT INTO는 새로운 테이블을 생성할 때 사용되며, 기존 테이블에 데이터를 추가하려면 INSERT INTO SELECT 구문을 사용해야 합니다.
- 인덱스, 제약 조건, 기본 키는 자동으로 복사되지 않으므로, 필요한 경우 수동으로 설정해야 합니다.