ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SQL] data.world tutorial SQL UNION 예제 풀이
    데이터 분석/DB & SQL 2020. 5. 1. 12:52

    데이터 소스를 붙이는 방법은 column 과 row 기준이 있다. 

    - column 추가: JOIN
    - row: UNION

    그리고 이 포스트는 UNION 그리고 INTERSECT, MINUS 집합 개념에 대해 정리하였다.

     

    UNION 에 대한 1줄 정리.

    A UNION stacks all the resulting rows from one table on top of all the resulting rows from another table. The columns used must have the same names and data types in order for UNION to work.

    UNION 은 한 테이블의 결과 위에 다른 테이블의 결과를 쌓는 것이다. 컬럼명과 데이터타입이 같아야만 한다. 

     

    1. 요구사항 검토

    생략

     

    2. 데이터셋 확인

    해외 계정과 국내 계정은 다음과 같다.

    SELECT * FROM intl_accounts  -- 16 / 컬럼 3개

    SELECT * FROM accounts  -- 95 / 컬럼 4개

     

    3. UNION, INTERSECT, MINUS

    a. account 기준 UNION 값 적용

    두 테이블의 스키마가 다르기 때문에 비교대상인 account 만 가져왔다. 
    account 기준 테이블 간의 중복값 제거하고 97 건이다.  (테이블 내의 중복값은 유지된다.)

    SELECT account
    FROM intl_accounts  -- 16

    UNION
    SELECT account
    FROM accounts  -- 95

     

    b. account, office_location 기준 UNION 값 적용 

    account 와 office_location 을 지정하였다.
    accounts 국내 장표에는 default USA 이기 때문에 office_location 컬럼이 없어, 추가해주었다.
    account, office_location 조합 기준 테이블 간의 중복값이 없나보다. 16+95 = 111 건이다. 

    SELECT account, office_location
    FROM intl_accounts  -- 16

    UNION
    SELECT account, "USA" AS office_location
    FROM accounts  -- 95

    -- result: 111 (account, office_location 조합 기준 중복건 제거) 


    c. account 기준 INTERSECT 값 적용

    두 테이블의 스키마가 다르기 때문에 비교대상인 account 만 가져왔다. 
    테이블 간 중복값만 가져온다. account 기준 테이블 간의 중복값은 14 건이다. 

    SELECT intl_accounts.account
    FROM intl_accounts  -- 16

    INTERSECT
    SELECT
     accounts.account
    FROM accounts  -- 95

     

    d. account 기준 MINUS 적용 (intl_accounts 기준)

    두 테이블의 스키마가 다르기 때문에 비교대상인 account 만 가져왔다. 
    첫번째 테이블 intl_accounts 를 기준으로 두번째 테이블에 중복으로 나오는 값을 제거한 결과는 2건이다. 

    SELECT account
    FROM intl_accounts  -- 16

    MINUS
    SELECT account
    FROM accounts  -- 95

     

    e. account 기준 MINUS 적용 (accounts 기준)

    기준 테이블을 변경하려면 쿼리 대상 테이블의 위치를 변경하면 된다. 81건이다. 

    SELECT account
    FROM accounts  -- 95


    MINUS
    SELECT account
    FROM intl_accounts  -- 16

     

     


    결론

    중학교 집합 개념을 복습한 느낌이다: 합집합, 교집합, 여집합
    양 테이블의 account 컬럼 기준으로만 벤다이어그램을 그리면 다음과 같다. 

     

    댓글

Designed by Tistory.