자두의 데브로그

[MySQL] SQL 문제 풀이 - SELECT (2) 본문

코딩테스트/SQL

[MySQL] SQL 문제 풀이 - SELECT (2)

왕자두 2024. 7. 30. 00:17

오프라인/온라인 판매 데이터 통합하기

-- 코드를 입력하세요
SELECT DATE_FORMAT(SALES_DATE, "%Y-%m-%d") AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT FROM ONLINE_SALE WHERE SALES_DATE LIKE "2022-03%"

UNION ALL

SELECT DATE_FORMAT(SALES_DATE, "%Y-%m-%d") AS SALES_DATE, PRODUCT_ID, NULL, SALES_AMOUNT FROM OFFLINE_SALE WHERE SALES_DATE LIKE "2022-03%"

ORDER BY SALES_DATE, PRODUCT_ID, USER_ID;

 

[새로 알게 된 점]

  • UNION ALL
    • 여러 쿼리문을 합쳐서 하나의 쿼리문으로 만들어줌
    • 중복 값을 모두 보여준다
  • UNION
    • 여러 쿼리문을 합쳐서 하나의 쿼리문으로 만들어줌
    • 중복된 값 제거 (중복 제거 연산 때문에 UNION ALL보다 속도가 느림)
  • 없는 속성에 대해 NULL 값을 넣기 위해서는 합집합으로 합칠 속성 값에 해당되는 순서에 NULL을 넣는다

 

특정 세대의 대장균 찾기

-- 코드를 작성해주세요
SELECT e1.ID FROM ECOLI_DATA e1 WHERE e1.PARENT_ID IN (
    SELECT e2.ID FROM ECOLI_DATA e2 WHERE e2.PARENT_ID IN (
        SELECT e3.ID FROM ECOLI_DATA e3 WHERE e3.PARENT_ID is NULL
    )
) 
ORDER BY e1.ID;

 

[새로 알게 된 점]

  • NULL 판별할 때는 is 나 is not 으로 해야된다!!! 자꾸 = 으로 판별하는데 까먹지 말자!
SELECT
    e4.ID
FROM 
    (SELECT 
        e2.ID
     FROM 
        ECOLI_DATA e1 
     INNER JOIN
        ECOLI_DATA e2 ON e1.ID = e2.PARENT_ID 
     WHERE 
        e1.PARENT_ID IS NULL) e3 
    INNER JOIN 
        ECOLI_DATA e4 ON e3.ID = e4.PARENT_ID
ORDER BY 
    e4.ID
  • 이렇게도 풀 수 있음! JOIN 중첩해서 쓰는 것도 연습하자