MySQL에서 전체 결과 집합을 연결하는 방법: 포괄적인 가이드

SQL을 사용할 때 여러 쿼리의 결과를 단일 출력으로 결합해야 하는 경우가 있을 수 있습니다. 이 과정은 MySQL에서 특히 유용하며, 관련된 검색 결과를 통합하고 싶지만 기준이 다양할 때 더욱 그러합니다. MySQL에서 이를 달성하는 일반적인 방법은 UNION 연산자를 사용하는 것입니다.

그러나 연결된 결과의 순서가 원하는 대로 되지 않을 때 문제에 직면할 수 있습니다. 이 블로그 게시물은 MySQL에서 전체 결과 집합을 효과적으로 연결하는 방법을 다루며, 결과의 우선순위를 정해 데이터 프레젠테이션을 명확히 하는 방법을 안내합니다.

문제: 원치 않는 결과 순서

다음과 같은 MySQL 쿼리가 있다고 가정해 보겠습니다:

SELECT A,B,C FROM table WHERE field LIKE 'query%'
UNION
SELECT A,B,C FROM table WHERE field LIKE '%query'
UNION
SELECT A,B,C FROM table WHERE field LIKE '%query%'
GROUP BY B 
ORDER BY B ASC 
LIMIT 5

이 쿼리에서는 세 가지 조건이 체크되고 그 결과가 결합됩니다. 하지만 마지막 쿼리의 결과가 첫 번째 쿼리의 결과보다 먼저 나타나는 것을 알 수 있으며, 이는 혼란을 초래할 수 있습니다. 원하는 것은 첫 번째 쿼리의 결과가 함께 나타나고, 그 다음 두 번째, 그 다음 세 번째 쿼리의 결과가 오는 것입니다.

해결책: 원본 열 도입

연결된 결과의 원하는 순서를 유지하기 위해 효과적인 방법 중 하나는 추가 열을 도입하는 것입니다. 이 열은 결과의 출처를 표시하는 레이블 역할을 합니다. 다음과 같이 쿼리를 수정할 수 있습니다:

수정된 쿼리 예시

SELECT A,B,C, "query 1" as origin FROM table WHERE field LIKE 'query%'
UNION
SELECT A,B,C, "query 2" as origin FROM table WHERE field LIKE '%query'
UNION
SELECT A,B,C, "query 3" as origin FROM table WHERE field LIKE '%query%'
GROUP BY origin, B 
ORDER BY origin, B ASC 
LIMIT 5

변경 사항 설명

  1. 원본 열: 각 SELECT 문 이제 결과의 출처를 식별하는 문자열을 포함합니다:

    • 첫 번째 쿼리를 위한 "query 1" as origin.
    • 두 번째 쿼리를 위한 "query 2" as origin.
    • 세 번째 쿼리를 위한 "query 3" as origin.
  2. GROUP BY 및 ORDER BY: 이 새로운 origin 열로 그룹화하고 정렬하여:

    • 결과가 출처 쿼리에 따라 먼저 정렬됩니다.
    • 이는 첫 번째 쿼리의 모든 결과가 함께 나타나고, 그 다음 두 번째, 마지막으로 세 번째 쿼리의 결과가 나타나도록 보장합니다.

주요 요점

  • MySQL에서 여러 쿼리의 결과를 결합하려면 UNION을 사용하십시오.
  • 각 쿼리의 결과에 레이블을 붙이기 위해 원본 열을 도입하십시오.
  • 원하는 출력 순서를 유지하기 위해 이 원본 열로 그룹화하고 정렬하십시오.

이러한 조정을 통해 결과를 효과적으로 연결하면서 데이터를 정리된 형태로 유지할 수 있습니다. 이는 데이터 분석이나 보고와 같이 결과의 명확성이 중요한 상황에서 특히 중요합니다.

이 게시물에 명시된 가이드를 따르면 MySQL에서 여러 결과 집합을 관리하는 데 더 나은 통제를 할 수 있을 것입니다. 즐거운 쿼리 작성 되십시오!