데이터 분석을 위한 중급 SQL

GreenBean·2021년 11월 2일
0
post-thumbnail

데이터 분석을 위한 중급 SQL

[백문이불여일타] 데이터 분석을 위한 중급 SQL
참고 링크 : w3schools

중급 SQL

보고싶은 데이터 요약하기

집계함수 (Aggregate Function)

  • 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 사용할 때 목적 중요
      • SQL문 실행 순서 : 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! 추가 내용

  • MySQL 지원 안되는 내용
    • EXCEPT (MINUS)
    • INTERSECT

  • 예제 사이트 지원 안되는 내용
    • RIGHT (OUTER) JOIN
    • FULL OUTER JOIN

profile
🌱 Backend-Dev | hwaya2828@gmail.com

0개의 댓글