SQL 쿼리 문법을 활용하여 데이터 분석을 진행하기(4)
2023. 12. 7. 20:08ㆍTIL
테이블을 집합으로 생각하기
- INNER JOIN: l ∩ r
- LEFT JOIN: l ∪ (l ∩ r)
- LEFT ANTI JOIN: l - (l ∩ r)
- RIGHT JOIN: r ∪ (l ∩ r)
- RIGHT ANTI JOIN: r - (l ∩ r)
- FULL OUTER JOIN: l ∪ r
WHERE절로 필터링을 할 때 최대한 먼저 필터링해서 집합의 크기를 작게 만들어 놓고 JOIN을 하는 게 실행시간이 적게 걸리고 효율적이다.
*,% 사용 지양하기
SELECT product_id, category, name
FROM products
LIMIT 10
새로운 테이블을 접할때 데이터 일부를 보고 테이블을 파악을 해야 한다. 행의 수가 어마어마할 수 있기 때문에 LIMIT을 걸고 테이블을 조회해야 한다.
SELECT clk_index, user_name, product_id
FROM clicks
WHERE date = '20231207'
LIMIT 10
마찬가지로 파티션이 있는 테이블인지 확인하고, 파티션을 필터 조건으로 걸고 테이블을 조회해야 한다.
SELECT product_id, category_name, sales_yn
FROM products
LIMIT 10
컬럼 수가 많은 테이블이 있을 수 있기 때문에 SELECT * 를 지양해야 한다.
SELECT product_id, name
FROM products
WHERE name LIKE '23FW%'
LIMIT 10
LIKE 사용 시 %을 사용하면 문자열의 제한이 없기 때문에 %는 제한적으로 사용하고 __를 대신 사용한다.
데이터 타입 잘 확인하기
SELECT count(1)
FROM clicks
WHERE date > '20231031'
SQL에서는 비교하는 변수의 형태가 다를 때 알아서 형태를 변환하여 비교하는 것(묵시적 형 변환)을 지원한다. 하지만 형태를 변환하는 시간만큼 쿼리가 비효율적이라 형태를 잘 확인해야 한다.
WITH clk as (
SELECT clk_index, event_index, date
FROM clicks
),
event as (
SELECT event_index, DATE_FORMAT(event_end, '%Y%m%d') as event_end_dt
FROM events
)
SELECT count(1)
FROM clk INNER JOIN event ON clk.event_index = event.event_index
WHERE date <= event_end_dt
이벤트 관련 상품을 클릭한 사람들 중 이벤트가 끝나기 전 클릭수를 집계하는 쿼리이다. clk테이블의 date와 event테이블의 date format이 달라서 맞춰주기 위해 DATE_FORMAT 함수를 사용하였다. WHERE절에서 컬럼쪽에 함수를 사용할 경우 인덱스를 사용할 수 없다. 그래서 WHERE절에서 왼쪽 컬럼에 함수 적용을 지양해야 한다.
JOIN시 유의할 점
- JOIN하는 테이블 간의 관계를 고려하기(1:1, 1:n, n:n)
- 데이터 중복이 있는지 확인하기(중복 고려를 안 할 시 쿼리 처리속도가 느려질 수도 있고, 의도했던 것과 다른 결과를 얻을 수도 있다.)
- 여러 가지 쿼리 방식을 고려하기(쿼리 방식에 따라 같은 결과라도 처리시간이 달라진다.)
가독성 높이기
- 서브쿼리 보다는 WITH 구문이 좋은 가독성
- WITH 절을 사용할 때, 각 블록 이름을 잘 지정하기
- 쿼리가 복잡해지면 중간에 주석 작성
공부하며 어려웠던 내용
배운 내용을 유념하여 SQL 쿼리 작성하는 습관을 잘 들여놔야겠다.
'TIL' 카테고리의 다른 글
| 데이터 웨어하우스와 SQL 기본에 대해 배우고 이를 바탕으로 데이터 분석에 대해 학습(1) (0) | 2023.12.18 |
|---|---|
| SQL 쿼리 문법을 활용하여 데이터 분석을 진행하기(5) (2) | 2023.12.08 |
| SQL 쿼리 문법을 활용하여 데이터 분석을 진행하기(3) (2) | 2023.12.06 |
| SQL 쿼리 문법을 활용하여 데이터 분석을 진행하기(2) (2) | 2023.12.05 |
| SQL 쿼리 문법을 활용하여 데이터 분석을 진행하기(1) (1) | 2023.12.04 |