검색결과 리스트
글
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
가끔은 SELECT 한 결과를 임시 테이블에 저장하고 싶은 경우가 있습니다. 예를 들어 UPDATE 작업을 한 테이블에 대해서 하려고 하는데 만일의 경우에 대비해서 현재의 내용을 다른 테이블로 잠시 복사해 두고 싶은 경우가 있습니다. SELECT INTO는 이러한 욕구를 만족시켜주는 방법입니다. SELECT INTO를 사용하면 CREATE TABLE 과 같이 테이블을 만드는 과정도 없이 SELECT의 결과를 갖는 테이블을 만들 수 있습니다. 참으로 편리한 기능입니다.
이와 비슷한 기능을 구현 할 수 있는 것이 INSERT INTO 인데, SELECT INTO와는 달리 이미 존재하는 테이블에 SELECT 한 결과를 삽입하게 됩니다.
1. SELECT INTO
만일 Pubs 데이터베이스의 Titles 테이블의 내용을 Titles2 테이블로 복사한다고 가정을 하겠습니다. 우선 Titles 테이블의 전체 내용을 검색하는 쿼리문은 다음과 같습니다.
이렇게 해서 검색된 결과를 Titles2 테이블에 복사를 하고자 한다면 다음과 같이 하면 됩니다.
이렇게 하면 Titles2 테이블이 만들어 지면서 SELECT 한 결과가 전부 삽입 됩니다. 이미 만들어진 테이블에 결과를 삽입하는게 아니고 존재하지 않는 테이블을 만들고 거기에 결과가 삽입된다는 사실을 기억하시기 바랍니다.
만일 위 결과로 Titles2 테이블이 만들어진 상황에서 다시 다음과 같이 동일한 작업을 수행하면 어떻게 될까요?
다음과 같은 오류가 발생합니다.
[예제1]
o 검색 결과를 #tbl1 이라는 임시 테이블로 저장합니다.
o #tbl1과 같이 앞에 '#' 이 붙은 테이블은 임시 테이블로서 해당 세션이 끊어지면 자동으로 제거되는 테이블입니다.
2. INSERT INTO
만일 Titles 테이블의 모든 내용을 Titles3 테이블로 복사하기 위해 INSERT INTO를 사용한다고 가정을 하겠습니다. 그럼 다음과 같은 쿼리문을 수행하게 됩니다.
"SELECT * FROM Titles" 의 수행 결과를 그대로 Titles3 테이블에 복사하려고 한 것인데 다음과 같은 오류가 발생하게 됩니다.
INSERT INTO 는 이미 존재하는 테이블에 행을 추가하는 기능이므로 Titles3 테이블이 없는 상황에서 INSERT INTO를 수행 했으므로 오류가 발생하는 것입니다. SELECT INTO 에 의해서 만들어진 TItles2 테이블은 이미 존재하고 있으므로 다음의 쿼리문은 오류가 나지 않습니다.
[예제2]
o TItles 테이블의 검색 결과를 다시 Titles 테이블에 추가하게 됩니다.
o 물론 위 쿼리문은 Titles 테이블에 설정된 PRIMARY KEY 제약 조건에 따라 삽입은 이루어지지 않고 오류가 발생합니다.
o 이 방법은 테스트를 위해 테이블의 행의 수를 무작정 늘려나갈 때 유용하게 사용 할 수 있습니다.
3. 정리
SELECT INTO와 INSERT INTO는 단순한 기능이지만 실제 업무에서 많이 사용 됩니다. 그러므로 사용 방법을 잘 익혀 두시면 많은 도움을 받을 수 있습니다.
좀더 자세한 사항은 온라인 설명서를 참고하여 주시기 바랍니다.
출처 : http://blog.naver.com/oyukihana?Redirect=Log&logNo=60002506884
이와 비슷한 기능을 구현 할 수 있는 것이 INSERT INTO 인데, SELECT INTO와는 달리 이미 존재하는 테이블에 SELECT 한 결과를 삽입하게 됩니다.
1. SELECT INTO
만일 Pubs 데이터베이스의 Titles 테이블의 내용을 Titles2 테이블로 복사한다고 가정을 하겠습니다. 우선 Titles 테이블의 전체 내용을 검색하는 쿼리문은 다음과 같습니다.
USE pubs SELECT * FROM Titles |
이렇게 해서 검색된 결과를 Titles2 테이블에 복사를 하고자 한다면 다음과 같이 하면 됩니다.
USE pubs SELECT * INTO Titles2 FROM Titles |
이렇게 하면 Titles2 테이블이 만들어 지면서 SELECT 한 결과가 전부 삽입 됩니다. 이미 만들어진 테이블에 결과를 삽입하는게 아니고 존재하지 않는 테이블을 만들고 거기에 결과가 삽입된다는 사실을 기억하시기 바랍니다.
만일 위 결과로 Titles2 테이블이 만들어진 상황에서 다시 다음과 같이 동일한 작업을 수행하면 어떻게 될까요?
USE pubs SELECT * INTO Titles2 FROM Titles |
다음과 같은 오류가 발생합니다.
서버: 메시지 2714, 수준 16, 상태 6, 줄 1 데이터베이스에 'titles2'(이)라는 개체가 이미 있습니다. |
[예제1]
USE pubs SELECT p.pub_id, p.pub_name, a.* INTO #tbl1 FROM publishers p INNER JOIN authors a ON p.city = a.city ORDER BY a.au_lname ASC, a.au_fname ASC |
o 검색 결과를 #tbl1 이라는 임시 테이블로 저장합니다.
o #tbl1과 같이 앞에 '#' 이 붙은 테이블은 임시 테이블로서 해당 세션이 끊어지면 자동으로 제거되는 테이블입니다.
2. INSERT INTO
만일 Titles 테이블의 모든 내용을 Titles3 테이블로 복사하기 위해 INSERT INTO를 사용한다고 가정을 하겠습니다. 그럼 다음과 같은 쿼리문을 수행하게 됩니다.
USE pubs INSERT INTO Titles3 SELECT * FROM Titles |
"SELECT * FROM Titles" 의 수행 결과를 그대로 Titles3 테이블에 복사하려고 한 것인데 다음과 같은 오류가 발생하게 됩니다.
서버: 메시지 208, 수준 16, 상태 1, 줄 1 개체 이름 'titles3'이(가) 잘못되었습니다. |
INSERT INTO 는 이미 존재하는 테이블에 행을 추가하는 기능이므로 Titles3 테이블이 없는 상황에서 INSERT INTO를 수행 했으므로 오류가 발생하는 것입니다. SELECT INTO 에 의해서 만들어진 TItles2 테이블은 이미 존재하고 있으므로 다음의 쿼리문은 오류가 나지 않습니다.
USE pubs INSERT INTOTitles2 SELECT * FROM Titles |
[예제2]
USE pubs INSERT INTOTitles SELECT * FROM Titles |
o TItles 테이블의 검색 결과를 다시 Titles 테이블에 추가하게 됩니다.
o 물론 위 쿼리문은 Titles 테이블에 설정된 PRIMARY KEY 제약 조건에 따라 삽입은 이루어지지 않고 오류가 발생합니다.
o 이 방법은 테스트를 위해 테이블의 행의 수를 무작정 늘려나갈 때 유용하게 사용 할 수 있습니다.
3. 정리
SELECT INTO와 INSERT INTO는 단순한 기능이지만 실제 업무에서 많이 사용 됩니다. 그러므로 사용 방법을 잘 익혀 두시면 많은 도움을 받을 수 있습니다.
좀더 자세한 사항은 온라인 설명서를 참고하여 주시기 바랍니다.
출처 : http://blog.naver.com/oyukihana?Redirect=Log&logNo=60002506884
'-- MSSQL' 카테고리의 다른 글
Passing lists to SQL Server 2005 with XML Parameters (0) | 2009.09.24 |
---|---|
MSSQL Server DBA 가이드 (0) | 2009.09.17 |
SQL Server 인덱스 설정의 효과 (0) | 2009.09.17 |
Top Tips for Effective Database Maintenance (0) | 2009.08.31 |
실행계획에서 쓰이는 Join (0) | 2009.08.31 |
RECENT COMMENT