이미지09
Coding Story/DATABASE

[ Oracle ] 오라클 Sql UNION과 UNION ALL?

반응형

 

 

이번 포스팅에선 UNION 과 UNION ALL 을 사용해보고 간단하게 어떤 차이가 있나정도만 알아보도록하자.

 

 

 

본 포스팅에서 다룰 STUDENT TABLE 을 먼저 생성했다.

CREATE TABLE STUDENT 
( 
    ID     VARCHAR2(4000 BYTE), 
    NAME   VARCHAR2(200 BYTE), 
    ADDR   VARCHAR2(200 BYTE) ,
    GENDER VARCHAR2(200 BYTE)
); 

INSERT INTO STUDENT (ID, NAME, ADDR, GENDER) VALUES ('1', 'AAA', 'SEOUL', 'MAN'); 
INSERT INTO STUDENT (ID, NAME, ADDR, GENDER) VALUES ('2', 'BBB', 'BUSAN', 'MAN'); 
INSERT INTO STUDENT (ID, NAME, ADDR, GENDER) VALUES ('3', 'CCC', 'SEOUL', 'WOMAN'); 
INSERT INTO STUDENT (ID, NAME, ADDR, GENDER) VALUES ('4', 'CCC', 'SEOUL', 'WOMAN'); 
INSERT INTO STUDENT (ID, NAME, ADDR, GENDER) VALUES ('5', 'DDD', 'BUSAN', 'WOMAN'); 
INSERT INTO STUDENT (ID, NAME, ADDR, GENDER) VALUES ('6', 'EEE', 'DAEGU', 'WOMAN'); 
INSERT INTO STUDENT (ID, NAME, ADDR, GENDER) VALUES ('7', 'FFF', 'SEOUL', 'MAN'); 

 

 

STUDENT TABLE

포스팅 이미지 01

 

 

자, 이제 이 STUDENT TABLE 에서 서울에 사는 여성과, 부산에 사는 남성을 조회해야한다면?

 

아래의 쿼리로도 충분히 조회될 것이다.

SELECT NAME, ADDR, GENDER
  FROM STUDENT
 WHERE (ADDR = 'SEOUL' AND GENDER = 'WOMAN')
    OR (ADDR = 'BUSAN' AND GENDER = 'MAN');

 

 

 

 

하지만 본 포스팅은 UNION 을 다루는 포스팅이기에 우리는 UNION 을 사용해 이를 조회해볼 것이다.

 

먼저 쉽게 말해 UNION 을 번역하자면 결합, 말 그대로 결과를 결합해주는 것이다.

 

예를 들어 어떤 조건으로 어떤 데이터를 조회하는 쿼리가 각각 두 개가 있다고 치면,

 

이 조회 결과에 UNION 을 사용하면 두 개의 조회 결과가 합쳐지게 된다.

 

 

이제 본론으로 들어가, 위에서 서울에 사는 여성과 부산에 사는 남성을 조회하고자 했었다.

 

 

먼저 서울에 사는 여성을 조회하는 쿼리는 다음과 같다.

SELECT NAME, ADDR, GENDER
  FROM STUDENT
 WHERE ADDR = 'SEOUL'
   AND GENDER = 'WOMAN';

 

결과는 다음과 같다.

포스팅 이미지 02

 

 

그리고 부산에 사는 남성을 조회하는 쿼리는 다음과 같다.

SELECT NAME, ADDR, GENDER
  FROM STUDENT
 WHERE ADDR = 'BUSAN'
   AND GENDER = 'MAN';

 

이 또한 결과는 다음과 같다.

포스팅 이미지 03

 

 

이러한 쿼리 두 개를 UNION 을 적용해 하나로 합쳐 보도록 하자.

 

먼저 UNION 과 UNION ALL 의 차이를 알기 위해 UNION ALL 부터 사용해 보았다.

 

UNION ALL 적용 예제

SELECT NAME, ADDR, GENDER
  FROM STUDENT
 WHERE ADDR = 'SEOUL'
   AND GENDER = 'WOMAN'

 UNION ALL

SELECT NAME, ADDR, GENDER
  FROM STUDENT
 WHERE ADDR = 'BUSAN'
   AND GENDER = 'MAN';

 

그 결과 각 쿼리의 조회 결과가 아래와 같이 합쳐져 조회되는 걸 볼 수 있다.

포스팅 이미지 04

 

 

여기서 결과를 보면 대강 짐작이 가는 사실, 바로 UNION ALL 은 중복을 허용한다는 것이다.

 

 

그럼 UNION 은?

 

UNIONDEFAULT 로 중복을 제거하는 DISTINCT 를 가지고 있다.

 

 

즉, UNION 은 중복을 제거한 쿼리 결과를 합쳐 보여주고,

 

UNION ALL 은 중복을 허용한 쿼리 결과를 합쳐 보여준다는 것이다.

 

 

UNION 또한 이전의 UNION ALL 예제와 사용방법은 동일하다.

 

UNION ALL 적용 예제

SELECT NAME, ADDR, GENDER
FROM STUDENT
WHERE ADDR = 'SEOUL'
AND GENDER = 'WOMAN'

UNION

SELECT NAME, ADDR, GENDER
FROM STUDENT
WHERE ADDR = 'BUSAN'
AND GENDER = 'MAN';

 

UNION 예제의 결과는 다음과 같다.

포스팅 이미지 05

 

 

 

 

 

반응형