SELECT 살펴보기
테이블(들)에서 레코드들(혹은 레코드 수)를 읽어오는 데 사용
SELECT 필드이름1 , 필드이름2 , . . .
FROM 테이블이름
WHERE 선택조건
GROUP BY 필드이름1 , 필드이름2 , . . .
ORDER BY 필드이름[ ASC | DESC ]
LIMIT N;
SELECT *
SELECT DISTINCT channel_id
FROM session ;
SELECT channel_id, COUNT ( 1 )
FROM session
GROUP BY 1 ;
CASE WHEN
필드 값의 변환을 위해 사용한다.
CASE WHEN 조건 THEN 참일때 값 ELSE 거짓일때 값 END 필드이름
여러 조건을 사용하여 변환하는 것도 가능하다.
CASE
WHEN 조건1 THEN 값1
WHEN 조건2 THEN 값2
ELSE 값3
END 필드이름
SELECT channel_id, CASE
WHEN channel_id in ( 1 , 5 , 6 ) THEN 'Social-Media'
WHEN channel_id in ( 2 , 4 ) THEN 'Search-Engine'
ELSE 'Something-Else'
END channel_type
FROM session ;
NULL
값이 존재하지 않음을 나타내는 상수. 0 혹은 ""과는 다르다.
필드 지정시 값이 없는 경우 NULL로 지정 가능하다.
테이블 정의 시 디폴트 값으로도 지정 가능하다.
어떤 필드의 값이 NULL인지 아닌지 비교는 특수한 문법을 필요로 한다.
필드1 is NULL / 필드2 is not NULL
NULL이 사칙연산에 사용된다면? -> NULL
COUNT 함수
NULL은 카운트 하지 않는다.
COUNT(NULL) -> 0
WHERE
IN
NOT IN
LIKE
대소문자 구별 없이 문자열 매칭 기능을 제공해준다.
NOT LIKE
BETWEEN
날짜 범위에 사용 가능하다.
위 오퍼레이터들을 CASE WHEN 사이에서도 사용 가능하다.
STRING Functions
LEFT(str, N)
REPLACE(str, exp1, exp2)
UPPER(str)
LOWER(str)
LENGTH(str)
LPAD, RPAD
SUBSTRING
CONCAT
ORDER BY
디폴트 순서는 오름차순
내림차순 - DESC
여러 개의 필드를 사용해서 정렬하려면 ORDER BY 1 DESC, 2, 3
NULL : 오름차순일 경우 처음, 내림차순일 경우 마지막에 위치한다.
타입 변환
DATE Conversion
NOW
타임존 관련 변환
CONVERT_TZ(now(), ‘GMT’, ‘Asia/Seoul’)
DATE, WEEK, MONTH, YEAR, HOUR, MINUTE, SECOND, QUARTER, MONTHNAME
DATEDIFF
DATE_ADD
…
STRTO DATE, DATETO FORMAT
Type Casting
1/2 결과는?
0이 된다. 정수 간의 연산은 정수가 되어야하기 때문이다.
분자나 분모 중의 하나를 float으로 캐스팅해야 0.5가 나온다.
cast 함수를 사용
cast(category as float)
convert(expression, float)
GROUP BY 살펴보기
SELECT 실행 시 결과를 특정 그룹별로 묶는 방법
GROUP BY & Aggregate 함수
테이블의 레코드를 그룹핑하여 그룹별로 다양한 정보를 계산
두 단계
그룹핑 할 필드를 결정 (하나 이상의 필드가 될 수 있음)
GROUP BY로 지정 - 필드 이름or필드 일련번호를 사용
그룹별로 계산할 내용을 결정
Aggregate 함수 사용
COUNT, SUM, AVG, MIN, MAX, GROUP_CONCAT, … -> 보통 필드 이름을 지정(alias)