> 데이터 베이스 > MySQL 튜토리얼 > SQL문의 MINUS, INTERSECT, UNION ALL 분석

SQL문의 MINUS, INTERSECT, UNION ALL 분석

一个新手
풀어 주다: 2017-10-17 10:10:33
원래의
1927명이 탐색했습니다.

SQL 문의 세 가지 키워드: MINUS(뺄셈), INTERSECT(교차점) 및 UNION ALL(합집합)

집합의 개념은 누구나 중학교 때 배웠을 것입니다. 즉, 이 세 가지 키워드는 중국어 의미와 마찬가지로 주로 데이터베이스의 쿼리 결과를 조작하는 데 사용됩니다. 두 개의 쿼리, MINUS는 교차점이 있는 경우 첫 번째 쿼리 결과에서 두 번째 쿼리 결과를 빼는 것입니다. 교차 부분은 부분에서 뺍니다. 그렇지 않으면 첫 번째 쿼리 결과와 차이가 없습니다. INTERSECT는 두 쿼리 결과의 교집합이고, UNION ALL은 두 쿼리의 합집합입니다. 간단한 SQL문으로도 동일한 함수를 구현할 수 있지만 성능차이가 매우 큽니다. 누군가 실험을 해본 결과: made_order는 총 230,000개의 레코드를 가지고 있고, Charge_detail은 총 170,000개의 레코드를 가지고 있습니다.

    SELECT order_id FROM made_order
  MINUS
  SELECT order_id FROM charge_detail
耗时:1.14 sec
  
  SELECT a.order_id FROM made_order a
   WHERE a.order_id NOT exists (
     SELECT order_id
     FROM charge_detail
     WHERE order_id = a.order_id
   )
耗时:18.19 sec
로그인 후 복사

성능 차이는 다음과 같습니다. 15.956번! 따라서 이 문제가 발생하면 MINUS, INTERSECT 및 UNION ALL을 사용하여 문제를 해결하는 것이 좋습니다. 그렇지 않으면 비즈니스 어디에서나 볼 수 있는 수백만 건의 데이터 쿼리에 직면하게 됩니다. 서버는 우리에게 패하지 않을 것입니다.

PS: 두 가지 애플리케이션 세트를 빼고, 교차하고, 더할 때 엄격한 요구 사항이 있습니다. 1. 두 세트의 필드가 명확해야 합니다(*를 사용하면 작동하지 않습니다. 오류가 발생함). 2. 필드 유형과 순서는 동일합니다(이름은 다를 수 있음). 예: 세트 1의 필드 1은 NUMBER이고, 필드 2는 VARCHAR이며, 세트 2의 필드 1도 NUMBER여야 합니다. 필드 2는 VARCHAR이어야 합니다. 3. 정렬할 수 없습니다. 결과를 정렬하려면 설정 작업 후 외부에 설정하면 됩니다. 이전 예와 같이 정렬을

SELECT * FROM 
   (SELECT order_id FROM made_order
   MINUS
  SELECT order_id FROM charge_detail)
ORDER BY ORDER_ID ASC
로그인 후 복사
로 변경할 수 있습니다.

위 내용은 SQL문의 MINUS, INTERSECT, UNION ALL 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿