[MSSQL - UNION ALL을 이용했을때 테이블명 가져오기]
UNION [ALL] 연산자는 두개 이상의 쿼리의 결과값을 하나로 합쳐서 반환해주는 아주 유용한 연산자입니다. 간혹 내가 몇백줄짜리 몇천줄짜리 쿼리를 만든적 있다고 말하는 분이 계시면 십중팔구는 UNION [ALL] 을 이용한 보고서용 쿼리를 만들었다고 봐도 무방합니다.
- UNION [ALL] 연산자
UNION ALL 과 UNION 연산자에 대한 간단한 차이는 쿼리의 결과 값중 중복을 허용하느냐, 중복을 허용하지 않느냐의 차이입니다. 다음의 간단한 실 예를 보시기 바랍니다.
아래와 같이 testA, testB 두개의 테이블이 있고, 쿼리 분석기를 통해서 column1 컬럼의 값을 출력해 보았습니다.
testA 테이블에 column1 값은 ㄱ, ㄴ, ㄷ, ㄹ, ㅁ, ㅂ, ㅅ 이 있고, testB 테이블의 column1 에는 ㄱ, ㄴ, ㄷ, ㄹ, ㅁ 이 있습니다. 위가 testA 테이블의 출력 결과이고 아래가 testB 테이블의 출력 결과인 것은 누구나 아실것으로 사료됩니다.
이제 이 두개의 쿼리 결과 값을 UNON 과 UNION ALL 로 묶어 보겠습니다.
위에 UNION 으로 묶었을 때와 아래의 UNION ALL 로 묶은 결과 값의 갯수가 다릅니다. 자세히 살펴 보시면 UNION으로 묶었을때는 중복이 제거 되었고, UNION ALL 은 두 테이블의 값들을 중복제거 없이 그대로 출력하고 있슴을 알수 있을 것입 니다.
- UNION ALL을 이용했을 때 테이블명 가져오기
정확히 말해서 UNION ALL 을 이용했을 때 테이블 명을 가져 온다는 것은 거짓입니다. UNION ALL 이 제대로 완성된 쿼리를 UNION ALL 이란 연산자를 이용해서 묶는 것을 이용해 해당되는 쿼리에 테이블 명을 미리 적어 놓는 것입니다. 아래의 쿼리문을 살펴보시기 바랍니다.
--UNION ALL SELECT column1, 'testA' AS tblName FROM testA UNION ALL SELECT column1, 'testB' AS tblName FROM testB | |
위의 쿼리문처럼 해당되는 SELECT 문에 'testA', 'testB' 는 테이블 명을 미리 적어두면 실행 결과는 아래와 같이 해당 레코드가 어느 테이블에서 가져온 레코드인지 확인이 가능하게 됩니다. 주로 여러개의 테이블을 검색해서 가져온 데이타가 어느 테이블에 속한 데이타인지 확인하기 위해서 사용합니다.
작성자: 다자래(mfcchang@naver.com) 웹제작 토탈 커뮤니티 http://www.webmadang.net | | | |
|
|