SQLShack (한국어)
이 기사에서는 구문을 포함한 SQL SELECT INTO 문을 다룹니다. 매개 변수 및 여러 테이블, 파일 그룹 및 WHERE 조건과 함께 사용
우리는 정기적으로 응용 프로그램에서 또는 SSMS에서 직접 SQL Server 테이블에 데이터를 삽입합니다. INSERT INTO 문을 사용하여 데이터를 삽입 할 수 있습니다. 이렇게하려면 Insert into the statement를 사용하여 테이블을 만들 수 없으므로 데이터를 삽입 할 테이블이 이미 있어야합니다.
INSERT INTO 문을 사용하여 다음 작업을 수행해야합니다.
p>
- 적절한 데이터 유형으로 테이블 구조 만들기
- 데이터 삽입
하지만 좋은 소식은 두 가지 작업을 모두 수행 할 수 있다는 것입니다. 함께 우아하게 SQL SELECT INTO 문을 사용합니다. Select 문에서 반환 된 열에 대한 테이블 구조를 만듭니다.
테이블의 많은 레코드를 업데이트한다고 가정 해보십시오. SELECT INTO 문을 사용하여 원본 테이블의 기존 구조로 백업 테이블을 만들 수 있습니다. 이 기사에서 SELECT INTO를 살펴 보겠습니다.
SELECT INTO 문 구문
1
2
3
4
|
SELECT column1, column2 .. .ColumnN
INTO New_table
FROM 테이블
;
|
SELECT INTO 문의 매개 변수
- 열 목록 : 검색 할 열을 지정하고 새 테이블에 삽입해야합니다.
- New_table : 여기에서 새 테이블 이름을 지정할 수 있습니다. SQL Server는 열 목록에 언급 된 열이있는 새 테이블을 만듭니다. 이것을 사용하여 기존 테이블을 바꿀 수 없습니다. 테이블 이름은 고유해야합니다.
- 테이블 : 레코드를 가져 오려는 테이블이 포함되어 있습니다. 적절한 Join 절을 사용하여 여기에 여러 테이블을 정의 할 수 있습니다.
- WHERE 조건 : Where 절을 사용하여 레코드를 필터링 할 수 있습니다. 선택적 절입니다.
예제를 사용하여 SQL SELECT INTO 문을 살펴 보겠습니다.
환경 :
이 예제에서는 다음을 사용합니다. 샘플 데이터베이스 AdventureWorks2017. 테이블에서 레코드를 선택하고 SELECT INTO 문을 사용하여 새 테이블을 생성한다고 가정합니다. 새 테이블에서만 선택한 열을 원합니다. 원하는 열이있는 Employee 테이블에서 select 문을 실행하겠습니다.
SQL SELECT INTO를 실행하기 전에 sp_help 명령을 사용하여 Employee_Demo 테이블이 AdventureWorks2017 데이터베이스에 존재하지 않음을 확인할 수 있습니다.
1
|
sp_help “..”
|
다음 스크린 샷에서 Employee_Demo 테이블이 내 데이터베이스에 존재하지 않음을 확인할 수 있습니다.
다음 쿼리를 실행하여 SELECT INTO 문을 사용하여 새 테이블을 만듭니다.
Azure Data Studio에서 다음과 같은 출력 메시지가 표시됩니다. 영향을받는 행 수가 10 개라는 것을 알 수 있습니다. 쿼리에서 Employee 테이블에서 상위 10 개 레코드를 선택했습니다.
새로 생성 된 Employee_Demo 테이블의 데이터에 액세스하여 이전 select 문과 동일한 레코드가 포함되어 있는지 확인할 수 있습니다.
SQL SELECT INTO 문에 열 속성을 지정하지 않았습니다. 소스 및 대상 테이블 열과 해당 속성을 비교해 보겠습니다.
Employee 및 Employee_Demo 테이블 모두에서 sp_help‘tablename’명령을 실행할 수 있습니다. Excel에서 두 테이블의 출력을 복사했습니다 (선택한 열에 대해). 다음 스크린 샷에서 열 데이터 유형과 해당 속성이 유사한 것을 볼 수 있습니다.
이전 SQL SELECT INTO 문에서 , 소스 테이블 (Employee)의 몇 열에서 대상 테이블 (Employee_Demo)을 준비했습니다.
다음 쿼리를 사용하여 Employee 테이블의 모든 열이있는 다른 테이블을 만들어 보겠습니다.
출력에서 Employee_All 테이블에 290 개의 행이 삽입 된 것을 볼 수 있습니다.
SELECT INTO 문은 열 목록에 지정된 열이있는 새 테이블을 만듭니다. 대상 테이블에서도 유사한 데이터 유형을 생성합니다.
소스 테이블에 기본 및 외래 키가 있다고 가정합니다. 소스 테이블과 유사하게 기본 키와 외래 키를 생성합니까? 아니요, SQL SELECT INTO 문은 대상 테이블에 키를 생성하지 않습니다. 원하는 경우 대상 테이블에 키를 정의 할 수 있습니다. 다음 섹션에서이를 확인하겠습니다.
이전 예에서 Employee 테이블에는 기본 및 외래 키가 정의되어 있습니다. INFORMATION_SCHEMA 뷰를 사용하여 기존 키 목록을 가져올 수 있습니다. 다음 코드를 실행하면 Employee 테이블에 기존 Primary 및 Foreign 키가 반환됩니다.
Employee 테이블에 기본 및 외래 키가 포함되어 있습니다.
Employee 테이블에서 Employee_All의 모든 열을 복사했습니다. 이제 대상 테이블에서 기본 및 외래 키를 확인해야합니다.
대상 테이블에 키가 포함되어 있지 않음을 알 수 있습니다. 대상 테이블에서 키를 유연하게 정의 할 수 있습니다.
SQL SELECT INTO – 여러 테이블에서 데이터 삽입
이전 예제에서는 테이블을 만들었습니다. 단일 테이블 Employee에서 SELECT INTO 문을 사용합니다. 또한 여러 테이블을 조인하고 SELECT INTO 문을 사용하여 데이터가있는 새 테이블을 만들 수도 있습니다. 이 섹션에서는 여러 테이블을 함께 조인하려고합니다. 다음 쿼리에서는 AdventureWorks2017에서 다음 테이블을 조인했습니다.
다음 쿼리를 실행합니다. 조인 조건과 언급 된 열을 기반으로 여러 테이블의 결과를 제공합니다.
쿼리를 실행하면 SQL SELECT INTO 문의 출력을 따릅니다.
위의 테이블을 사용하여 반환 된 데이터로 테이블을 만들고 싶습니다. SQL SELECT INTO 문을 실행 해 보겠습니다.
. 테이블에 데이터를 삽입하십시오. select 문으로이 테이블의 레코드를 확인할 수 있습니다.
여러 테이블을 함께 결합하고 출력을 생성 할 수 있음을 알 수 있습니다. SELECT INTO 문을 사용하는 테이블.
대상 테이블에 대한 데이터 유형을 정의 할 필요가 없습니다. 수동으로 테이블을 생성하려면 각 열의 데이터 유형을 확인하고 그에 따라 데이터 유형을 정의해야합니다. 데이터 유형이 일치하지 않으면 다음과 같은 오류 메시지가 표시 될 수 있습니다.
오류 1 : 데이터 유형 불일치로 인해
Msg 245, Level 16, State 1 , 라인 1
varchar 값 GG를 데이터 유형 int로 변환 할 때 변환에 실패했습니다.
오류 2 : Msg 8152, 레벨 16, 상태 30, 라인 2
문자열 또는 바이너리 데이터가 잘립니다.
SQL SELECT INTO 문을 사용하여 데이터를 삽입하는 동안 이러한 오류가 발생하지 않습니다. 그러나이 방법을 사용하여 기존 테이블에 데이터를 삽입 할 수는 없습니다.
SELECT INTO – 파일 그룹 지정
이전 섹션에서는 새 테이블을 생성하고 여기에 데이터를 삽입 할 수 있는지 살펴 보았습니다. 기존 테이블에서 SQL SELECT INTO 문을 사용합니다. 기본 파일 그룹에만 테이블을 만듭니다. SQL Server 2016까지 특정 파일 그룹을 지정할 수 없습니다. SQL Server 2017에서는 새 테이블을 만들어야하는 특정 파일 그룹을 지정할 수 있습니다. SQL Server는 특정 Verify 테이블 파일 그룹에 새 테이블을 만듭니다. SQL Server 2017 이상에서 파일 그룹을 지정하지 않으면 기본 파일 그룹에 테이블이 생성됩니다.
참고 : SQL Server 2016 및 이전 버전에서는 SQL SELECT INTO에서 파일 그룹을 지정할 수 없습니다.
AdventureWorks2017 데이터베이스에 새 파일 그룹을 추가하겠습니다. 데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 파일 그룹으로 이동합니다.
이 파일 그룹 페이지에서 파일 그룹 추가를 클릭하고 파일 그룹의 이름을 지정합니다.
이제 파일을 클릭하면 기존 데이터베이스 파일 (데이터 및 로그 파일)이 나열됩니다.이 페이지에서 새 데이터 파일을 추가하고 드롭 다운 목록에서 FileGroup을 지정합니다. 방금 만든 파일 그룹이어야합니다.
INSERTFILE 파일 그룹에 SQL 테이블을 만들려고합니다. 이 파일 그룹을 기본 파일 그룹으로 설정하지 않았습니다.
다음 쿼리에서 ON 절을 사용하여 파일 그룹 이름을 지정한 것을 볼 수 있습니다. 파일 그룹에 차이가있는 일반 SQL SELECT INTO 문과 유사하게 작동합니다.
1
2
3
|
select * into person.person_temp
ON INSERTFILE –FILEGROUP NAME
from person.person
|
테이블이 생성되면 새로 생성 된 테이블에서 sp_help 명령을 실행합니다. 다음 스크린 샷에서 테이블이 INSERTFILE FileGroup에 있는지 확인할 수 있습니다. 이전에 만든 파일 그룹입니다.
테이블 속성에서도이를 확인할 수 있습니다. SSMS에서 테이블을 마우스 오른쪽 버튼으로 클릭합니다. 저장소 섹션에서 원하는 파일 그룹을 볼 수 있습니다.
Where 조건으로 INTO 선택
레코드가 거의없는 SQL SELECT INTO 문이있는 테이블을 생성한다고 가정합니다. select 문과 유사한 Where 절을 사용할 수 있습니다.다음 쿼리에서 성이 % Duf %와 같은 사람에 대한 person.person_WC 테이블을 생성하려고합니다.
1
2
3
4
|
선택 * into person.person_WC
ON INSERTFILE-테이블 파일 그룹
from person.person
여기서 성은 “% Duf %”
|
결론
이 기사에서는 SQL에 대해 살펴 보았습니다. SELECT INTO 문 및 사용 시나리오. 데이터 유형을 지정하지 않고 테이블의 사본을 작성하는 데 유용한 명령입니다.
- 저자
- 최근 게시물
그는 SQL Server Always On 가용성 그룹에 대한 50 부작 시리즈를 통해 단일 주제에 대한 가장 큰 무료 온라인 기사 모음 중 하나를 작성했습니다. SQL Server 커뮤니티에 대한 공헌을 바탕으로 2020 년과 2021 년 SQLShack에서 지속적으로 권위있는 “올해의 최우수 작가”등 다양한 상을 수상했습니다.
Raj는 항상 새로운 도전에 관심이 있으므로 컨설팅이 필요한 경우 그의 글에서 다루는 주제에 대한 도움은 [email protected]으로 연락 할 수 있습니다.
Rajendra Gupta의 모든 게시물보기
- AWS에 대한 마이너 및 메이저 버전 업그레이드 수행 RDS SQL Server-2021 년 1 월 29 일
- AWS RDS PostgreSQL 인스턴스 배포-2021 년 1 월 27 일
- AWS DMS를 사용하여 온 프레미스 SQL 데이터베이스를 AWS RDS SQL Server로 마이그레이션-1 월 25 일 , 2021