주제
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
조건문
- 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() | 이전 행의 값을 리턴 |
'Data Science > TIL (Today I Learned)' 카테고리의 다른 글
| 프로그래머스 데이터분석 데브코스 1기 - 14일차 (2) | 2023.12.07 |
|---|---|
| 프로그래머스 데이터분석 데브코스 1기 - 13일차 (0) | 2023.12.06 |
| 프로그래머스 데이터분석 데브코스 1기 - 11일차 (0) | 2023.12.04 |
| 프로그래머스 데이터분석 데브코스 1기 - 10일차 (0) | 2023.12.01 |
| 프로그래머스 데이터분석 데브코스 1기 - 9일차 (0) | 2023.11.30 |