[백문이불여일타] 데이터 분석을 위한 중급 SQL
참고 링크 : w3schools
COUNT
SELECT COUNT(DISTINCT name)
SUM
SELECT SUM(price)
SUM
) 사용 가능AVG
SELECT AVG(visits)
NULL
값 주의NULL
값을 0으로 처리하고 싶을 때SELECT SUM(visits)/COUNT(*)
MIN
/ MAX
SELECT MIN(price)
SELECT MAX(price)
SELECT
문에서 +
, -
등 연산 가능GROUP BY
GROUP BY
표현하는건 비추천ORDER BY
함께 사용 가능HAVING
WHERE
사용할 때 목적 중요GROUP BY
하기 전에 WHERE
문 실행GROUP BY
로 묶인 결과물에 필터링 걸고 싶을 때 HAVING
사용AS
사용 가능CASE
SELECT CASE
WHEN ? THEN ?
WHEN ? THEN ?
ELSE
END
FROM
Tip! 추가 내용
CASE
를 활용한 테이블 피봇참고 링크 : SQL Joins Visualizer
INNER JOIN
Tip! ERD란?
- Entity Relationship Diagram(ERD)는 테이블 간의 관계를 설명해주는 다이어그램이라고 볼 수 있으며, 이를 통해 프로젝트에서 사용되는 DB의 구조를 한눈에 파악할 수 있음
- 즉, API를 효율적으로 뽑아내기 위한 모델 구조도라고 생각하면 됨
OUTER JOIN (LEFT, RIGHT)
INNER JOIN
을 제외한 나머지는 다 OUTER JOIN
LEFT (OUTER) JOIN
JOIN
을 하겠다는 뜻참고 사항
- 예제 사이트에서
LEFT JOIN
실행시 확인되는 CustomerID의null
은 해당 사이트 내부의 오류 때문에 확인되는 결과- 올바른 MySQL 인터프리터의 경우
JOIN
되는 테이블에 값이 없다고 해서 기준이 되는 테이블에 있는key
값이null
값으로 반환되는 경우는 없음
RIGHT (OUTER) JOIN
LEFT (OUTER) JOIN
사용LEFT (OUTER) JOIN
만 사용했을 때 해석이 더 쉽기 때문SELF JOIN
AS
붙여서 각각의 테이블 구분해서 사용Tip! MySQL 시간 더하기 • 빼기
DATE_ADD(기준날짜, INTERVAL)
SELECT DATE_ADD(NOW(), INTERVAL 1 SECOND)
SELECT DATE_ADD(NOW(), INTERVAL 1 MINUTE)
SELECT DATE_ADD(NOW(), INTERVAL 1 HOUR)
SELECT DATE_ADD(NOW(), INTERVAL 1 DAY)
SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH)
SELECT DATE_ADD(NOW(), INTERVAL 1 YEAR)
SELECT DATE_ADD(NOW(), INTERVAL -1 YEAR)
DATE_SUB(기준날짜, INTERVAL)
SELECT DATE_SUB(NOW(), INTERVAL 1 SECOND)
UNION
UNION ALL
Tip! 추가 내용
EXCEPT
(MINUS
)INTERSECT
RIGHT (OUTER) JOIN
FULL OUTER JOIN