주제

1.  JOIN의 종류
2. UNION
3. WITH
4. 타임스탬프
5. 그 외 유용한 함수

 

JOIN의 종류

  • 두 개 이상의 테이블을 특정 key를 기준으로 결합하는 것
INNER JOIN 교집합, 양쪽 테이블에서 공통적으로 존재하는 데이터만 추출
LEFT JOIN 왼쪽 테이블의 모든 데이터와 교집합 모두 추출
RIGHT JOIN  오른쪽 테이블의 모든 데이터와 교집합 모두 추출
FULL OUTER JOIN 합집합, 양쪽 테이블의 모든 데이터(교집합 포함)를 추출
CROSS JOIN(Cartesian Product) 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인. 전체 행 개수는 두 테이블의 각 행의 개수를 곱한 수만큼 나옴
SELF JOIN 자기 자신과 조인

 

 

UNION

  • 두 개 이상의 SELECT문을 결합하여 보여주는 것
  • 조회하는 칼럼의 수가 일치해야만 함
  • 중복은 제외되어 반환

UNION ALL

  • UNION과 동일하지만 중복까지 반환

 

WITH

  • CTE(Common Table Expression) : 임시 결과 집합을 생성하여 쿼리를 쉽게 작성할 수 있는 기능(뷰와 흡사)
  • 복잡한 쿼리에서 하위 쿼리를 사용해 같은 계산을 반복적으로 해야하는 경우 사용
  • 같은 쿼리 블록을 여러번 사용할 수 있음
  • 쿼리 가독성을 높여 유지보수 용이
WITH user_orders as (
		SELECT user_name, SUM(price) as total_purchase
		FROM orders o INNER JOIN products p
		ON o.product_id = p.product_id
		GROUP BY 1
		ORDER BY 2 DESC
	)
SELECT user_orders.*
FROM user_orders uo INNER JOIN managers m
ON uo.user_name = m.user_name

 

서브쿼리

  • 다른 쿼리에 포함된 쿼리
  • SELECT, FROM, WHERE절에 사용 가능
  • 너무 많이 사용하면 디비의 성능을 하락시킴

 

타임스탬프 함수

  • 데이터 타입
STRING 'yyyy-mm-dd' or 'yyyy-mm-dd HH:MM:SS'
DATE yyyy-mm-dd
DATETIME YYYY-MM-DD HH:MM:SS
TIMESTAMP YYYY-MM-DD HH:MM:SS UTC
  • 현재 시간 나타내는 함수
NOW() UTC 기준으로 현재 시간을 가져오는 함수
CURRENT_TIMESTAMP() NOW와 동일
CURTIME() 현재 시간 반환
CURRENT_DATE() CURDATE와 동일, yyyy-mm-dd형식
SYSDATE() 함수가 호출된 시간을 반환
  • 날짜 / 시간 추출
YEAR() / MONTH() / DAY() 연도 / 월 / 일 추출
HOUR() / MINUTE() / SECOND() 시 / 분  초 추출
WEEKDAY() 요일 추출
MONTHNAME() / DAYNAME() 월 이름 / 일 추출
  • 데이터 변환
STR_TO_DATE() 문자열을 날짜 타입으로 변경
DATE_FORMAT() 지정된 형식으로 날짜를 출력
  • 날짜 연산
DATEDIFF() 두 날짜 간의 차이를 반환
TIMEDIFF() 두 시간 간의 차이를 반환

 

 

타입 변환 함수

  • 타입 변환의 필요성 :
    • 타입 불일치로 인한 연산 혹은 비교 오류 피하기
    • 다양한 데이터 소스 간의 호환성을 유지하기 위함
  • CAST
  • CONVERT

 

조건문

  1. IF : 조건이 참일 때 실행
SELECT price,
IF(price >= 10000, '고가', '저가') AS '가격구분'
FROM product

 

  2. IFNULL : null값일 때 지정된 값으로 채울 수 있음

SELECT user_name, IFNULL(date, 20231104) as date
FROM orders_v3

--만약 date가 null이면 20231104로 채워라

 

  3. CASE WHEN : WHEN 조건이 참일 때 THEN을 실행, ELSE는 위 조건들이 모두 참이 아닐때 실행

SELECT date,
	CASE date
	WHEN '20231014' THEN '첫째날'
	WHEN '20231015' THEN '둘째날'
	ELSE '기타'
	END AS date_group
FROM clicks

 

유용한 함수

RANK() 특정 칼럼을 기준으로 등수를 매기는 함수
DENSE_RANK() 동점일 때 등수를 건너뛰지 않음
LEAD() 다음 행의 값을 리턴
LAG() 이전 행의 값을 리턴

+ Recent posts