기본 구조
SELECT 컬럼1,
컬럼2,
컬럼3, ...
FROM 테이블
# 모든 쿼리는 이 구조
별명(alias) 지어주기
컬럼1 as 별명1
컬럼2 별명2 # as 생략 가능
필터링 할 때 : WHERE, BETWEEN, IN, LIKE
WHERE BETWEEN a AND b # (a와 b사이) - a와 b 포함, SQL에서는 a<x<b 이런 삼항조건식은 안됨
WHERE IN (a, b) # (리스트 안에 a와 b 인 경우) - NOT LIKE도 가능
WHERE LIKE '@%' # (@으로 시작하는 단어) - NOT IN도 가능
여러 개 조건
A AND B # A 그리고 B
A OR B # A 또는 B
NOT B # B가 아닌
<>, != # 같지 않은 - 조건문에서 사용할 수 있는 연산자
계산
SUM(컬럼) # 합계
AVG(컬럼) # 평균
COUNT(1 or * or 컬럼) # 데이터 갯수
DISTINCT # 몇 개의 값을 가지고 있는지 구할 때 - SELECT 절에서만 사용 가능
MIN(컬럼) # 최소
MAX(컬럼) # 최대
범주별
SELECT 카테고리 컬럼,
SUM(계산 컬럼)
FROM
GROUP BY 카테고리컬럼
ORDER BY 정렬하고 싶은 컬럼 # (카테고리, SUM 둘 다 가능) DESC (내림차순 : 점점 작아짐, 생략할 경우 오름차순)
데이터 가공
REPLACE(바꿀 컬럼, 현재 값, 바꿀 값) # 다른 문자로 변경
SUBSTR(조회할 컬럼, 시작 위치, 글자 수) # 원하는 글자만 골라서 조회
CONCAT(붙이고 싶은 값1, 2, 3, ...) # 문자 합치기
조건에 따라 다르게 변경할 때
IF(조건, 조건에 부합할 때, 조건에 부합하지 않을 때)
# 조건 여러 개 지정 하고 싶을 때 : CASE 문
CASE WHEN 조건1 THEN 값(수식)1
WHEN 조건2 THEN 값(수식)2
[ELSE 값(수식)3] # ELSE가 없어도 동작함, 하지만 쓰는걸 권장
END
여러 번의 연산을 한 번의 SQL문으로 수행 : 서브쿼리
SELECT 칼럼1,
스페셜 칼럼
FROM
(
SELECT 칼럼1,
칼럼2,
스페셜 칼럼
FROM 테이블
) a
다른 데이블에 있는 데이터 조회할 때
SELECT 조회할 컬럼
FROM 테이블1 줄임말1 LEFT JOIN 테이블2 줄임말 2 ON 줄임말1.공통칼럼명=줄임말2.공통컬럼명
# 테이블1 데이터 모두 조회
SELECT 조회할 컬럼
FROM 테이블1 줄임말1 INNER JOIN 테이블2 줄임말 2 ON 줄임말1.공통칼럼명=줄임말2.공통컬럼명
# 두 테이블에 있는 데이터만 조회
데이터에 값이 없다면
-- 없는 값을 제거
null(=inner join과 동일)
-- 다른 값을 대신 사용
if(조건, 대체값) # 다른 값이 있을 때
coalesce(칼럼, 대체값) # null 값일 때
SQL로 피벗 테이블 만들기
if(앞에 max 붙임), case when 이용해서
Window Function
WINDOW_FUNCTION(함수에 따라 작성하거나 생략) OVER (PARTITON BY 그룹 기준 컬럼 ORDER BY 정렬 기준)
WINDOW_FUNCTION # 기능명 (ex : sum, avg, rank...)
PARTITON BY # 그룹 나누기 위한 기준
ORDER BY # 정렬할 컬럼 기준
날짜
-- 날짜 데이터로 변경
SELECT DATE(날짜 컬럼) 별명,
DATE
FROM 테이블
DATE_FORMAT(날짜데이터, 년월일요일 중 원하는거) 표현할 글자
NOW : 현재 날짜 (시간 포함)
CURDATE : 현재 날짜
DATEDIFF(날짜1, 날짜2) : 날짜2 - 날짜1 (일수로 가져옴)
TIMESTAMPDIFF(단위, 날짜1, 날짜2)
/* 단위
SECOND : 초
MINUTE : 분
HOUR : 시간
DAY : 일
WEEK : 주
MONTH : 월
QUARTER : 분기
YEAR : 년도 */