PostgreSQL 집계 연산자 시작

Postgres는 데이터베이스의 검색 결과를 쉽게 조회하고 필터링할 수 있는 집합 연산자를 제공합니다.컬렉션 연산자는 두 개 이상의 SELECT 문을 결합한 결과에 사용됩니다.이러한 연산자는 UNION, UNION ALL, INTERSECT 및 EXCEPT이며 여러 테이블 구조에서 질의를 구성하고 필요한 특정 데이터를 필터링하는 데 사용할 수 있습니다.
두 SELECT 문의 조합 결과를 반환하기 위해 UNION set 연산자를 사용합니다.이 연산자는 질의의 결과에서 모든 중복 항목을 제거하고 각 중복 결과에 대해 한 줄만 나열합니다.이 동작을 확인하려면 UNION ALL set 연산자를 사용할 수 있습니다. 이 연산자는 최종 결과에 중복 항목이 남아 있기 때문입니다.INTERSECT set 연산자는 두 개의 SELECT 질의가 공유된 기록만 나열하는 반면, EXCEPT set 연산자는 두 번째 SELECT 질의에서 결과를 삭제합니다.따라서 INTERSECT 및 EXCEPT 컬렉션 연산자는 중복되지 않는 결과를 생성하는 데 사용됩니다.
모든 컬렉션 연산자는 처음에 동일한 우선순위를 공유합니다(INTERSECT를 제외하고 나중에 설명).괄호의 우선순위가 공중 연산자보다 높기 때문에 순서가 다를 수 있습니다.

Note —
All SELECT statements that are used with a SET operator must select the same number of columns. The columns used in the display are obtained from the first query.


열 목록 데이터 형식은 Postgres에서 암시적으로 변환해야 합니다.질의의 해당 열이 다른 데이터 유형에 속하는 경우 Postgres는 암시적 유형 변환을 수행하지 않습니다.첫 번째 질의의 열 유형이 INT이고 두 번째 질의의 해당 열 유형이 CHAR이면 Postgres에서 암시적 변환이 수행되지 않고 유형 오류가 발생합니다.
결과 세트를 정렬하려면 위치를 사용하여 정렬해야 합니다.집합 연산자는 단일 결과 집합의 정렬을 허용하지 않습니다.ORDER BY는 질의가 끝날 때 한 번만 나타날 수 있습니다.
UNION과 INTERSECT 연산자에서 조회의 순서는 중요하지 않으며 최종 결과인 UNION과 INTERSECT 연산자는 교환할 수 있습니다.
UNION 연산자에 비해 UNION ALL은 중복 항목을 필터링하고 결과를 정렬할 때 리소스를 사용하지 않으므로 성능이 뛰어납니다.
  • 는 집합 연산자를 하위 조회의 일부분으로 사용할 수 있다.
  • 테이블 컬렉션 표현식을 포함하는 SELECT 문에는 컬렉션 연산자를 사용할 수 없습니다.
  • 우리의 예시를 위한 Postgres 테이블 만들기


    집합 연산자를 계속 탐색하기 전에 전체 강좌에 사용할 표를 만들어야 합니다.
    DROP TABLE IF EXISTS top_rated_films;
    
    CREATE TABLE top_rated_films(
    title VARCHAR NOT NULL,
    release_year SMALLINT);
    
    DROP TABLE IF EXISTS most_popular_films;
    CREATE TABLE most_popular_films(
    title VARCHAR NOT NULL,
    release_year SMALLINT);
    
    INSERT INTO top_rated_films(title, release_year)
    VALUES
    ('Fast and furious 7', 2011),
    ('The redemption', 2015),
    ('Shooter', 2017);
    
    INSERT INTO most_popular_films(title, release_year)
    VALUES
    ('American snipper', 2015),
    ('Doulou continent',2018),
    ('Outpost',2019),
    ('Shooter', 2017);
    
    

    UNION을 사용하여 여러 SELECT 쿼리 연결하기


    Postgres는 반복 값을 제거한 후 모든 복합 선택 질의의 조합 결과를 표시합니다. UNION 연산자가 여러 선택 질의를 추가할 때 결과는 오름차순으로 정렬됩니다.
    SELECT * FROM top_rated_films
    
    UNION
    
    SELECT * FROM most_popular_films
    

    Note —
    the columns selected must be of the compatible data types, otherwise Postgres throws a type error:


    SELECT title FROM top_rated_films
    
    UNION
    
    SELECT release_year FROM most_popular_films
    
    //error
    UNION types character varying and smallint cannot be matched
    

    노동조합과 전체 노동조합의 차이


    UNION과 UNION ALL 연산자는 유사합니다. UNION ALL이 결과 세트를 반환할 때 중복 항목을 삭제하지 않고 데이터를 정렬하는 것과 다릅니다.
    아래의 연합 부분 중의 조회를 검사하시오.반복 항목을 정렬하거나 삭제하지 않고 생성된 출력의 차이점에 유의해야 합니다.
    SELECT * FROM top_rated_films
    
    UNION ALL
    
    SELECT * FROM most_popular_films
    

    INTERSECT를 사용하여 여러 SELECT 질의에서 중첩된 데이터 찾기


    select 문장의 공통 줄을 표시하고 중복되지 않으며 데이터는 정렬 순서에 따라 배열됩니다.INTERSECT 연산자를 사용합니다.
    슈터 영화로 돌아온 것은 최고 등급과 가장 인기 있는 영화표에서 모두 사용할 수 있기 때문이다.
    SELECT *
    FROM most_popular_films 
    INTERSECT
    SELECT *
    FROM top_rated_films;
    

    Postgres에서 제외된 고유한 행을 반환합니다.


    첫 번째 질의에는 있지만 두 번째 질의에는 없는 행을 표시하려면 EXCEPT 연산자를 사용합니다.이것은 중복된 데이터를 되돌려주지 않으며, 기본적으로 데이터는 오름차순으로 배열된다.
    SELECT * FROM most_popular_films
    EXCEPT
    SELECT * FROM top_rated_films
    

    컬렉션 작업에서 ORDER BY 자구 사용


    ORDER BY 자문은 복합 SELECT 문이 포함된 질의에서 끝에 한 번만 나타날 수 있습니다.이는 단일 SELECT 문에 ORDER BY 자구가 포함될 수 없음을 나타냅니다.정렬은 첫 번째 SELECT 질의에 표시된 열만 기준으로 합니다.복합 질의를 정렬하려면 열 위치를 사용하는 것이 좋습니다.
    다음 질의는 두 부서에서 나온 결과를 정렬하여 통합합니다.
    SELECT * FROM most_popular_films
    UNION ALL
    SELECT * FROM top_rated_films
    ORDER BY title;
    

    결론


    현재, 당신은 Postgres 집적 연산자를 어떻게 사용하는지 알고 있습니다. 데이터베이스 조회를 최적화하여 서로 다른 열에서 데이터를 검색하고 비교하여 더욱 간소화된 데이터 검색 과정을 실현할 수 있습니다.

    좋은 웹페이지 즐겨찾기