수색…


통사론

  • UNION DISTINCT - SELECT를 결합한 후의 dedups
  • UNION ALL - 비 dedup (더 빠름)
  • UNION - 디폴트는 DISTINCT입니다.
  • SELECT ... UNION SELECT ... - OK이지만 ORDER BY 모호합니다.
  • (SELECT ...) UNION (SELECT ...) ORDER BY ... - 모호성을 해결합니다.

비고

UNION은 다중 CPU를 사용하지 않습니다.

UNION은 항상 * 임시 테이블을 사용하여 결과를 수집합니다. * 5.7.3 / MariaDB 10.1부터 UNION의 일부 형식은 tmp 테이블을 사용하지 않고 결과를 제공합니다 (따라서 더 빠름).

SELECT 문을 UNION과 결합

동일하게 구조화 된 두 개의 쿼리 결과를 UNION 키워드와 결합 할 수 있습니다.

예를 들어 authorseditors 등 두 개의 별도 테이블에서 모든 연락처 정보 목록을 원한다면 UNION 키워드를 사용할 수 있습니다.

select name, email, phone_number 
from authors

union

select name, email, phone_number
from editors

union 으로 사용하면 중복을 제거 할 수 있습니다. 쿼리에서 중복을 유지해야하는 경우 ALL 키워드 (예 : UNION ALL 사용할 수 있습니다.

주문

UNION의 결과를 정렬해야하는 경우이 패턴을 사용하십시오.

( SELECT ... )
UNION
( SELECT ... )
ORDER BY

괄호가 없으면 마지막 ORDER BY는 마지막 SELECT에 속합니다.

OFFSET을 통한 페이지 매김

LIMIT를 UNION에 추가 할 때 사용할 패턴입니다.

( SELECT ... ORDER BY x  LIMIT 10 )
UNION
( SELECT ... ORDER BY x  LIMIT 10 )
ORDER BY x  LIMIT 10

"10"이 나오는 SELECT를 예측할 수 없으므로 각각 10을 얻은 다음 ORDER BYLIMIT 반복하여 목록을 아래로 내리십시오.

10 개 항목 중 4 번째 페이지에는 다음 패턴이 필요합니다.

( SELECT ... ORDER BY x  LIMIT 40 )
UNION
( SELECT ... ORDER BY x  LIMIT 40 )
ORDER BY x  LIMIT 30, 10

즉, 각 SELECT 에서 4 페이지의 가치를 수집 한 다음 UNION 에서 OFFSET 을 수행합니다.

다른 열과 데이터 결합하기

SELECT name, caption as title, year, pages FROM books 
UNION
SELECT name, title, year, 0 as pages FROM movies

2 개의 레코드 세트를 다른 열과 결합 할 경우 누락 된 레코드 세트를 기본값으로 에뮬레이션합니다.

UNION ALL 및 UNION

SELECT 1,22,44 UNION SELECT 2,33,55

여기에 이미지 설명을 입력하십시오.

SELECT 1,22,44 UNION SELECT 2,33,55 UNION SELECT 2,33,55

결과는 위와 같습니다.

UNION ALL 사용

언제

선택 1,22,44 UNION SELECT 2,33,55 UNION ALL SELECT 2,33,55

여기에 이미지 설명을 입력하십시오.

고유 한 행과 실행중인 쿼리에 동일한 열이있는 여러 MySQL 테이블의 데이터 병합 및 병합

UNION ALL 은 여러 테이블의 데이터를 결합하고 쿼리에 사용할 테이블 이름 별칭 역할을합니다.

SELECT YEAR(date_time_column), MONTH(date_time_column), MIN(DATE(date_time_column)), MAX(DATE(date_time_column)), COUNT(DISTINCT (ip)), COUNT(ip), (COUNT(ip) / COUNT(DISTINCT (ip))) AS Ratio
FROM (
    (SELECT date_time_column, ip FROM server_log_1 WHERE state = 'action' AND log_id = 150) UNION ALL
    (SELECT date_time_column, ip FROM server_log_2 WHERE state = 'action' AND log_id = 150) UNION ALL
    (SELECT date_time_column, ip FROM server_log_3 WHERE state = 'action' AND log_id = 150) UNION ALL
    (SELECT date_time_column, ip FROM server_log WHERE state = 'action' AND log_id = 150)
) AS table_all
GROUP BY YEAR(date_time_column), MONTH(date_time_column);


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow