Search

이 내용은 2011년 6월 현재 SQL2011(코드명 Denali) Beta를 기준으로 작성 되었으며 SQL2011(코드명 Denali) 공식버전(RTM) 발표까지 꾸준히 업데이트 예정입니다.
아울러, 현재 Beta버전이지만 강좌를 따라해 보시는데 아무 문제 없으실거에요. 도움 되시길 바랍니다.
==================================================================================================


안녕하세요이스트럭 강동운입니다.

 

이번에는 DISTINCT, UNION, UNION ALL 대해서 살펴보도록 하겠습니다.

 

1. DISTINCT

 

DISTINCT 키워드는 중복을 제거하는 명령어 입니다중복을 제거하기 때문에 GROUP BY 비슷하게   있지만 다른 점이 분명히 있습니다.

 

이제 예제를 통해 살펴보도록 하겠습니다.

예제를 사용하기 위해 데이터를 넣도록 하겠습니다.

 

USE tempdb

GO

IF OBJECT_ID('test','U') IS NOT NULL

                  DROP TABLE test

GO

 

CREATE TABLE test(number INT NOT NULL, name VARCHAR(10))

GO

 

INSERT INTO test(number, name) VALUES(1, '')

INSERT INTO test(number, name) VALUES(1, '')

INSERT INTO test(number, name) VALUES(1, '')

INSERT INTO test(number, name) VALUES(2, '')

INSERT INTO test(number, name) VALUES(2, '')

INSERT INTO test(number, name) VALUES(2, '')

INSERT INTO test(number, name) VALUES(3, '')

INSERT INTO test(number, name) VALUES(4, '')

INSERT INTO test(number, name) VALUES(5, '')

INSERT INTO test(number, name) VALUES(6, '')

 

 

기존에 배웠던 number  GROUP BY  묶는 방법

 


SELECT

                  number

FROM test

GROUP BY number

 

 

하지만  경우는 DISTINCT로도 가능합니다.


SELECT

                  DISTINCT

                  number

FROM test

하지만 DISTINCT 중복을 제거만 할뿐중복된  수에 대해서는  수가 없기 때문에 아래 쿼리는 에러가 발생합니다.

 

 


SELECT

                  DISTINCT

                  number

,                 COUNT(*)

FROM test

에러!!

 

바로 이게 DISTINCT  GROUP BY 차이라고 보시면 되겠습니다.

 

 

2. UNION  UNION ALL

 

UNION 두개 이상의 테이블을 결합할  주로 사용합니다이는 조인이랑 다소 똑같다고생각을   있겠지만~! 조인은 반드시(CROSS JOIN 제외두개의 테이블에 공통된 KEY 있어야 하지만, UNION 다른 테이블이라도 나열된 컬럼의 속성이 같다면 합칠  있습니다.

 

예제를 사용하기 위해 데이터를 넣도록 하겠습니다.

 

USE tempdb

GO

IF OBJECT_ID('testA','U') IS NOT NULL

                  DROP TABLE testA

GO

IF OBJECT_ID('testB','U') IS NOT NULL

                  DROP TABLE testB

GO

 

CREATE TABLE testA(number INT NOT NULL, name VARCHAR(10))

GO

 

CREATE TABLE testB(idx INT NOT NULL, name VARCHAR(10))

GO

 

INSERT INTO testA(number, name) VALUES(1, '')

INSERT INTO testA(number, name) VALUES(2, '')

INSERT INTO testA(number, name) VALUES(3, '')

 

INSERT INTO testB(idx, name) VALUES(2, '')

INSERT INTO testB(idx, name) VALUES(3, '')

INSERT INTO testB(idx, name) VALUES(4, '')

INSERT INTO testB(idx, name) VALUES(5, '')

 

 

 

TestA 테이블과 TestB 테이블을 만들고  데이터를 넣었습니다.

 

 

 

 

나열되는 컬럼이 다르다면??.. 당연히 에러가 발생합니다.

 

 

SELECT number FROM testA

UNION

SELECT idx, name FROM testB

 

에러!!

 

 

 

컬럼명은 다르지만타입이 맞고 순서가 맞다면..

 

 

SELECT number FROM testA

UNION

SELECT idx FROM testB

 1.png

 

 

testA 테이블에는 1~3, testB 테이블에는 2~5 데이터가 들어가 있었지만중복이 제거된 1,2,3,4,5 추가 되있는 것을   있습니다.

 

UNION 으로 두개의 테이블을 결합하게 되면중복을 제거하는 연산을 한번  수행하기 때문에 그렇습니다.

 

만약 중복 제거 없이 모두 출력하기 위해서는 어떻게 해야 할까요?

이때 UNION ALL  사용하면 됩니다.

 

SELECT number FROM testA

UNION ALL

SELECT idx FROM testB

2.png 

 

 

대용량의 테이블끼리 서로 UNION 시킨다면테이블을 결합하고 중복된 행을 제거하기 위한 작업을 내부적으로  수행하게 됩니다. (내부적으로는 데이터를 정렬을 시킨 뒤에 중복을 제거하는 형태로 진행을 합니다.)

결국 결합하는 테이블이 중복되지 않는다고 가정을 하면 불필요한 중복 제거작업을 시키지않기 위해 UNION ALL  사용 하시 것이 좋습니다.

 

감사합니다.


[출처] SQLER.COM http://www.sqler.com/390126


 


SQL2011(코드명 Denali) 시리즈 강좌 리스트

                           [SQL2011강좌] 1. 코드명 Denali 설치 방법
[SQL2011강좌] 2. SSMS 접속 및 간단한 쿼리 실행
[SQL2011강좌] 3. SQL Server 의 MDF, LDF 그리고 데이터베이스 생성하기
[SQL2011강좌] 4. DDL 1탄: 테이블 생성
[SQL2011강좌] 5. DDL 2탄: 쿼리를 이용한 테이블 컬럼 추가 및 삭제
[SQL2011강좌] 6. Primary key와 Unique 제약조건
[SQL2011강좌] 7. DML 1탄 INSERT
[SQL2011강좌] 8. DML 1탄 INSERT(identity 속성)
[SQL2011강좌] 9. Sequence
[SQL2011강좌] 10. pubs, northwind Database 예제 설치
[SQL2011강좌] 11. SELECT(단일 테이블)
[SQL2011강좌] 12. SELECT(JOIN)
[SQL2011강좌] 13. UPDATE, DELETE 절
[SQL2011강좌] 14. DISTINCT, UNION, UNION ALL 키워드
[SQL2011강좌] 15. ORDER BY, GROUP BY, HAVING
[SQL2011강좌] 16. SubQuery(서브쿼리)
[SQL2011강좌] 17. 뷰에 대한 이해 및 생성, 수정, 삭제
[SQL2011강좌] 18. 저장 프로시저에 대한 이해, 생성, 수정, 삭제
[SQL2011강좌] 19. 인덱스에 대한 이해
[SQL2011강좌] 20. 클러스터드 인덱스와 넌 클러스터드 인덱스
[SQL2011강좌] 21. 트랜잭션에 대한이해
[SQL2011강좌] 22. 트랜잭션의 격리수준 4가지
[SQL2011강좌] 23. 잠금에 대한 이해
[SQL2011강좌] 24. 백업과 복구에 대한 이해(풀백업, 차등백업, 트랜잭션 로그 백업)
[SQL2011강좌] 25. 백업과 복구 전략
 
[SQL2011강좌] 26. 커서란?



SQL2011(코드명 Denali) 시리즈 동영상 강좌 리스트
[SQL2011 동영상 강좌] 1. 코드명 Denali 설치 방법
[SQL2011 동영상 강좌] 2. SSMS 접속 및 간단한 쿼리 실행
[SQL2011 동영상 강좌] 3. SQL Server 의 MDF, LDF 그리고 데이터베이스 생성하기
[SQL2011 동영상 강좌] 4. DDL 1탄: 테이블 생성
[SQL2011 동영상 강좌] 5. DDL 2탄: 쿼리를 이용한 테이블 컬럼 추가 및 삭제
[SQL2011 동영상 강좌] 6. Primary key와 Unique 제약조건
[SQL2011 동영상 강좌] 7. DML 1탄 INSERT
[SQL2011 동영상 강좌] 8. DML 1탄 INSERT(identity 속성)
[SQL2011 동영상 강좌] 9. Sequence
[SQL2011 동영상 강좌] 10. pubs, northwind Database 예제 설치
[SQL2011 동영상 강좌] 11. SELECT(단일 테이블)
[SQL2011 동영상 강좌] 12. SELECT(JOIN)
[SQL2011 동영상 강좌] 13. UPDATE, DELETE 절
[SQL2011 동영상 강좌] 14. DISTINCT, UNION, UNION ALL 키워드
[SQL2011 동영상 강좌] 15. ORDER BY, GROUP BY, HAVING
[SQL2011 동영상 강좌] 16. SubQuery(서브쿼리)
[SQL2011 동영상 강좌] 17. 뷰에 대한 이해 및 생성, 수정, 삭제
[SQL2011 동영상 강좌] 18. 저장 프로시저에 대한 이해, 생성, 수정, 삭제
[SQL2011 동영상 강좌] 19. 인덱스에 대한 이해
[SQL2011 동영상 강좌] 20. 클러스터드 인덱스와 넌 클러스터드 인덱스
[SQL2011 동영상 강좌] 21. 트랜잭션에 대한이해
[SQL2011 동영상 강좌] 22. 트랜잭션의 격리수준 4가지
[SQL2011 동영상 강좌] 23. 잠금에 대한 이해
[SQL2011 동영상 강좌] 24. 백업과 복구에 대한 이해(풀백업, 차등백업, 트랜잭션 로그 백업)
[SQL2011 동영상 강좌] 25. 백업과 복구 전략
[SQL2011 동영상 강좌] 26. 커서란?