• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 1. 데이터 정의 문
    2. 데이터 조작 문
    1. CALL 구문
    2. DELETE 구문
    3. DO 구문
    4. HANDLER 구문
    5. INSERT 구문
    6. LOAD DATA INFILE 구문
    7. LOAD XML 구문
    8. REPLACE 구문
    9. SELECT 구문
    1. SELECT ... INTO 구문
    2. JOIN 구문
    3. UNION 구문
    4. 인덱스 힌트 구문
    10. 서브 쿼리 구문
    11. UPDATE 구문
    3. MySQL 트랜잭션과 잠금 문
    4. 복제 문
    5. Prepared Statements위한 SQL 구문
    6. MySQL 복합문 구문
    7. 데이터베이스 관리 문
    8. MySQL 유틸리티 문
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

13.2.9.3 UNION 구문

 SELECT ...
 UNION [ALL | DISTINCT] SELECT ...
 [UNION [ALL | DISTINCT] SELECT ...]

UNION 은 여러 SELECT 문에서 결과를 하나의 결과 집합으로 결합하는 데 사용됩니다.

첫 번째 SELECT 문에서 컬럼 이름이 반환되는 결과의 컬럼 이름으로 사용됩니다. 각 SELECT 문에서 해당 위치에 나열되어있는 선택되는 열은 데이터 형식이 동일하도록합니다. (예를 들어, 첫 번째 명령문에 의해 선택되는 첫 번째 컬럼이 다른 문에 의해 선택되는 첫 번째 컬럼과 형태가 같도록합니다.)

해당 SELECT 컬럼의 데이터 형식이 일치하지 않는 경우, UNION 의 결과에서 컬럼의 형태와 길이는 모든 SELECT 문에 의해 취득 된 값을 고려하여 결정됩니다. 예를 들어, 다음의 예를 생각해 보겠습니다.

mysql> SELECT REPEAT('a',1) UNION SELECT REPEAT('b',10);
+---------------+
| REPEAT('a',1) |
+---------------+
| a             |
| bbbbbbbbbb    |
+---------------+

이러한 SELECT 문은 일반적인 선택 문이지만 다음과 같은 제한이 있습니다.

  • INTO OUTFILE 을 사용할 수있는 것은 마지막 SELECT 문뿐입니다. (단, UNION 의 결과 전체 파일에 기록됩니다.)

  • HIGH_PRIORITY 를 UNION 의 일부인 SELECT 문에서 사용할 수 없습니다. 그것을 첫 번째 SELECT 에 지정해도 아무런 효과도 없습니다. 그것을 이후 중 하나의 SELECT 문에 지정하면 구문 오류가 발생합니다.

UNION 의 기본 동작은 중복 행이 결과에서 제거됩니다. 옵션 DISTINCT 키워드는 이것도 중복 행 삭제를 지정하기위한 기본 이외의 효과는 아무것도 없습니다. 옵션의 ALL 키워드를 지정하면 중복 행 삭제는 실행되지 않고, 그 결과는 모든 SELECT 문에서 일치하는 모든 행이 포함됩니다.

UNION ALL 와 UNION DISTINCT 를 같은 쿼리에서 혼합 할 수 있습니다. 혼합 된 UNION 유형은 DISTINCT 합집합 그 왼쪽에있는 ALL 합집합을 무시하도록 처리됩니다. DISTINCT 합집합은 UNION DISTINCT 을 사용하여 명시 적으로 또는 그 후에 DISTINCT 또는 ALL 키워드없이 UNION 을 사용하여 암시 적으로 생성 할 수 있습니다.

개별 SELECT 에 ORDER BY 또는 LIMIT 를 적용하려면이 절을 SELECT 를 둘러싸는 괄호 안에 넣습니다.

 (SELECT a FROM t1 WHERE a = 10 AND B = 1 ORDER BY a LIMIT 10)
 UNION
 (SELECT a FROM t2 WHERE a = 11 AND B = 2 ORDER BY a LIMIT 10);

그러나 개별 SELECT 문에 ORDER BY 를 사용하여도 UNION 가 기본적으로 정렬되지 않은 행 세트를 생성하기 때문에 최종 결과에 행이 나타나는 순서에는 아무런 영향을주지 없습니다. 따라서 이런 상황에서는 일반적으로 ORDER BY 는 LIMIT 와 함께 사용됩니다. 이에 따라 선택된 행의 UNION 의 최종 결과에 순서에 반드시 영향을 미치는 것은 아님에도 불구하고 SELECT 로 취득하기 위해서 이러한 행의 부분 집합을 결정하는 데 사용되는 것입니다 합니다. ORDER BY 가 SELECT 에 LIMIT 없이 나타나는 경우이 절은 어쨌든 아무것도 효과가 없기 때문에 최적화에 의해 삭제됩니다.

ORDER BY 또는 LIMIT 절을 사용하여 UNION 의 결과 전체를 정렬하거나 제한하려면 개별 SELECT 문을 괄호로 묶고 마지막 문 뒤에 ORDER BY 또는 LIMIT 를 배치합니다. 다음 예제에서는이 두 어구를 사용하고 있습니다.

 (SELECT a FROM t1 WHERE a = 10 AND B = 1)
 UNION
 (SELECT a FROM t2 WHERE a = 11 AND B = 2)
 ORDER BY a LIMIT 10;

괄호가없는 문은 지금 나타낸 괄호로 둘러싸인 문과 동일합니다.

이런 종류의 ORDER BY 는 테이블 이름 (즉, tbl_name . col_name 형식의 이름)을 포함한 열 참조를 사용할 수 없습니다. 대신 첫 번째 SELECT 문에 열 별칭을 지정하고 그 별칭을 ORDER BY 에서 참조합니다. (또는 ORDER BY 에서 열을 그 컬럼 위치를 사용하여 참조합니다. 그러나 컬럼 위치의 사용은 비추천입니다.)

또한 정렬 된 컬럼에 별칭이 지정된 경우 ORDER BY 절은 컬럼 이름 대신 별칭을 참조해야합니다. 다음 중 첫 번째 문은 작동하지만, 두 번째는 Unknown column 'a' in 'order clause' 라는 오류와 함께 실패합니다.

 (SELECT a AS b FROM t) UNION (SELECT ...) ORDER BY b;
 (SELECT a AS b FROM t) UNION (SELECT ...) ORDER BY a;

UNION 의 결과의 행이 각 SELECT 에 의해 하나씩 취득 된 행 세트로 구성되게하려면 정렬 컬럼으로 사용하는 각 SELECT 의 추가 컬럼을 선택하고 마지막 SELECT 의 뒤에 ORDER BY 를 추가합니다.

 (SELECT 1 AS sort_col, col1a, col1b ... FROM t1)
 UNION
 (SELECT 2, col2a, col2b ... FROM t2) ORDER BY sort_col;

또한 개별 SELECT 결과의 정렬 순서를 유지하려면 ORDER BY 절에 보조 열을 추가합니다.

 (SELECT 1 AS sort_col, col1a, col1b ... FROM t1)
 UNION
 (SELECT 2, col2a, col2b ... FROM t2) ORDER BY sort_col, col1a;

또한 추가 컬럼을 사용하면 각 행이 어떤 SELECT 에서 검색되는지를 결정할 수도 있습니다. 추가 컬럼은 테이블 이름을 나타내는 문자열 등의 다른 식별 정보도 지정할 수 있습니다.

서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved