조회한 다수의 SELECT 문을 하나로 합치고싶을때 유니온(UNION) 을 사용 할 수 있습니다.
UNION 은 결과를 합칠때 중복되는 행은 하나만 표시해줍니다.
UNION ALL 은 중복제거를 하지 않고 모두 합쳐서 보여줍니다.
UNION
두개의 SELECT 결과를 합칠수 있습니다. 합친 결과에서 중복되는 행은 하나만 표시합니다.
단, 컬럼의 개수가 같아야하고, 각 컬럼의 데이터타입이 같아야합니다.
사용법
SELECT * FROM A
UNION (ALL)
SELECT * FROM B
기본테이블인 COUNTRIES테이블과 REGION 테이블을 UNION 해보겠습니다.
두개의 테이블을 UNION 하기위한 조건으로 컬럼의 갯수와, 타입이 같아야합니다.
때문에 COUNTRIES에서는 COUNTRY_NAME 과 REGION_ID 를 SELECT 하고,
REGIONS 테이블은 REGION_NAME 과 REGION_ID를 조회하겠습니다.
SELECT COUNTRY_NAME, REGION_ID FROM COUNTRIES UNION SELECT REGION_NAME, REGION_ID FROM REGIONS | cs |
두개의 SELECT 가 합쳐져 하나의 결과를 도출했습니다.
또한, UNION 은 중복을 허용하지 않습니다.
따라서 아래와같이 중복이된 데이터가있으면 중복을 제거하여줍니다.
SELECT COUNTRY_NAME FROM COUNTRIES WHERE REGION_ID IN (1,2) | cs |
SELECT COUNTRY_NAME FROM COUNTRIES WHERE REGION_ID IN (2,3) | cs |
위 두개의 조회결과를 UNION하게되면
SELECT COUNTRY_NAME FROM COUNTRIES WHERE REGION_ID IN (1,2) UNION SELECT COUNTRY_NAME FROM COUNTRIES WHERE REGION_ID IN (2,3) | cs |
중복이 제거되어 나옵니다.
UNION ALL
UNION ALL 은 중복을 제거하지 않습니다.
위 두개의 SELECT 를 UNION ALL 하면
SELECT COUNTRY_NAME FROM COUNTRIES WHERE REGION_ID IN (1,2) UNION ALL SELECT COUNTRY_NAME FROM COUNTRIES WHERE REGION_ID IN (2,3) | cs |
중복된 결과도 포함시킵니다.
'DB\SQL' 카테고리의 다른 글
[Oracle] 자리수 채우기(LPAD,RPAD) (0) | 2019.08.06 |
---|---|
[Oracle] 조건에 따른 값변경(CASE문 사용법) (1) | 2019.08.05 |
[Oracle]오라클 위,아래ROW값 가져오기(LAG,LEAD) (3) | 2019.03.12 |
[Oracle]오라클 데이터타입 변경(TO_CHAR,TO_NUMBER,TO_DATE) (0) | 2019.03.11 |
[Oracle]오라클 AS별칭(Alias) 숫자로 주기 (0) | 2019.03.04 |