데이터 분석에 대해 공부하며 읽었던 책의 주요 내용을 요약하였다.
<책 정보>
제목: SQL로 분석하고 Tableau로 시각화하자(실무 예제로 익히는 데이터 분석 시각화 테크닉)
출간일자: 2020
저자: 모원서
출판사: 비제이퍼블릭
데이터 분석가의 역할: 개발자/데이터 엔지니어가 저장 및 수집한 데이터를 활용해, 데이터를 근거로 의사결정에 필요한 인사이트를 분석. 이러한 인사이트를 토대로, 데이터 과학자와 함께 새로운 비즈니스 구현
즉, 데이터를 기반한 비즈니스에서 중추적인 역할 수행
SQL 및 Tableau를 배워야 하는 이유
- SQL은 데이터를 추출/수집/가공/검색/분석할 때 사용되며, 데이터 분석을 위한 기본적인 언어
- Tableau는 분석 인사이트를 표, 그래프 등으로 시각화할 때 사용되며, 기업에서 가장 선호하는 BI Tool
※ Delete vs Truncate vs Drop
구분 | 연산자 | 설명 |
---|---|---|
비교 연산자 | = | 같음 |
> | 보다 큼 | |
< | 보다 작음 | |
>= | 크거나 같음 | |
<= | 작거나 같음 | |
<> | 같지 않음 | |
논리 연산자 | AND | 앞, 뒤 조건 모두 만족 |
OR | 앞, 뒤 조건 중 하나라도 만족 | |
NOT | 뒤에 오는 조건과 반대 | |
특수 연산자 | BETWEEN a AND b | a와 b의 값 사이 |
NOT BETWEEN a AND b | a와 b의 값 사이가 아님 | |
IN (List) | 리스트(List) 값 | |
NOT IN (List) | 리스트(List) 값 아님 | |
LIKE '비교문자열' | 비교문자열 형태 (예시> '모%'/'%모%'/'%모') | |
NOT LIKE '비교문자열' | 비교문자열 형태가 아님 | |
IS NULL | NULL 값 | |
IS NOT NULL | NULL 값이 아님 | |
산술 연산자 | + | 덧셈 |
- | 뺄셈 | |
* | 곱셈 | |
/ | 나눗셈 |
1) 숫자형 함수
함수 | 설명 | 함수 사용 | 결과 |
---|---|---|---|
ABS(숫자) | 절댓값 반환 | SELECT ABS(-123) | 123 |
ROUND(숫자,m) | m 기준으로 반올림 | SELECT ROUND(1.56, 1) | 1.60 |
CEILING(숫자) | 크거나 같은 최소 정수 | SELECT CEILING(1.56) | 2 |
FLOOR(숫자) | 작거나 같은 최소 정수 | SELECT FLOOR(1.56) | 1 |
POWER(n, m) | n의 m 거듭 제곱 | SELECT POWER(3,2) | 9 |
SQRT(n) | n의 제곱근 | SELECT SQRT(9) | 3 |
2) 문자형 함수
함수 | 설명 | 함수 사용 | 결과 |
---|---|---|---|
LOWER('문자열') | 소문자 반환 | SELECT LOWER('ABCD') | abcd |
UPPER('문자열') | 대문자 반환 | SELECT UPPER('abcd') | ABCD |
LEFT('문자열', n) | 왼쪽부터 지정한 수(n)만큼 문자 반환 | SELECT LEFT('ABCD', 2) | AB |
RIGHT('문자열', n | 오른쪽부터 지정한 수(n)만큼 문자 반환 | SELECT RIGHT('ABCD', 2) | CD |
LEN('문자열') | 문자수 반환(오른쪽 공백 제외) | SELECT LEN('ABCD') | 4 |
REPLACE('문자열", a, b) | 문자열 중, a가 있으면 b로 반환 | SELECT REPLACE('ABCD', 'A','a') | aBCD |
CONCAT('문자열', '문자열'..) | 둘 이상의 문자열 연결 | SELECT CONCAT('AB', 'C', 'D') | ABCD |
LTRIM('문자열') | 왼쪽 공백 제외 문자 반환 | SELECT LTRIM(' ABCD') | ABCD |
RTRIM('문자열') | 오른쪽 공백 제외 문자 반환 | SELECT RTRIM('ABCD ') | ABCD |
TRIM('문자열') | 양쪽 공백 제외 문자 반환 | SELECT TRIM(' ABCD ') | ABCD |
SUBSTRING('문자열', m, n) | 문자열의 m 위치에서 n개 길이만큼 문자 반환 | SELECT SUBSTRING('ABCD', 2, 2) | BC |
CHARINDEX(a, '문자열', n) | 문자열 중, a가 있으면 위치 반환 | SELECT CHARINDEX('B', 'ABCD') | 2 |
SPACE(n) | n만큼 공백 추가 | SELECT 'A'+SPACE(5)+'B' | A B |
STUFF('문자열', m, n, a) | 문자열의 m 위치에서 n개 길이만큼 삭제 후, a로 문자 반환 | SELECT STUFF('ABCD', 2, 2, 'xx') | AxxD |
3) 날짜형 함수
함수 | 설명 | 함수 사용 | 결과 |
---|---|---|---|
GETDATE() | 현재 날짜 및 시간 반환 | SELECT GETDATE() | 현재 날짜/시간 |
YEAR/MONTH/DAY(날짜열) | YEAR, MONTH, DAY 데이터 반환 | SELECT YEAR('2020-12-31') | 2020 |
DATE-PART(기준, 날짜열) | 지정 기준으로, 데이터 반환 | SELECT DATEPART(MI, '2020-12-31 10:20:30') | 20 |
DATEADD(기준, n, 날짜열) | 지정한 기준에서, n 숫자만큼 더한 데이터 반환 | SELECT DATEADD(DAY, -1, '2020-12-31') | 2020-12-30 00:00:00.000 |
DATEDIFF(기준, 날짜열a, 날짜열b) | 지정한 기준으로, 날짜열a,b 차이 데이터 반환 | SELECT DATEDIFF(YEAR, '2020-12-31', '2021-12-31') | 1 |
4) 형 변환 함수
함수 | 설명 | 함수 사용 | 결과 |
---|---|---|---|
CONVERT(VARCHAR, '날짜열', 기준) | 지정 기준으로 날짜→문자열 데이터 형식 변환 | SELECT CONVERT(VARCHAR, GETDATE(), 1) | 03/03/20 |
SELECT CONVERT(VARCHAR, GETDATE(), 5) | 03-03-20 | ||
SELECT CONVERT(VARCHAR, GETDATE(), 8) | 17:05:30 | ||
SELECT CONVERT(VARCHAR, GETDATE(), 21) | 2020-03-03 17:05:30.007 | ||
SELECT CONVERT(VARCHAR, GETDATE(), 23) | 2020-03-03 | ||
SELECT CONVERT(VARCHAR, GETDATE(), 111) | 2020/03/03 | ||
SELECT CONVERT(VARCHAR, GETDATE(), 112) | 20200303 | ||
SELECT CONVERT(VARCHAR, GETDATE(), 120) | 2020-03-03 17:05:30 | ||
CONVERT(VERCHAR(n), '날짜열', 기준) | 지정 기준으로 날짜→문자열 데이터 형식 변환 (n 숫자만큼) | SELECT CONVERT(VARCHAR(8), GETDATE(), 112) | 20200303 |
SELECT CONVERT(VARCHAR(6), GETDATE(), 112) | 202003 | ||
CAST(특정 열 AS 기준) | 지정 기준으로 특정 열 데이터 형식 변환 | SELECT CAST('100' AS INT) + CAST ('100' AS INT) | 200 |
SELECT CAST(1.56 AS INT) | 1 |
5) 일반 함수
함수 | 설명 | 함수 사용 | 결과 |
---|---|---|---|
ISNULL(특정 열 지정 값) | 특정 열이 NULL일 경우, 지정 값 변환 | SELECT ISNULL(NULL, 0) | 0 |
NULLIF(특정 열a, 특정 열b) | 특정 열 a,b가 같은 경우 NULL/다를 경우 특정열a 변환 | SELECT NULLIF(1, 1) | NULL |
CASE WHEN[조건1] THEN [지정 값1] WHEN [조건2] THEN [지정 값2] END | 여러 조건별로 지정 값으로 변환 |
구분 | 함수 | 설명 |
---|---|---|
집계함수(NULL 값 제외) | COUNT | 건수 |
SUM | 합계값 | |
AVG | 평균값 | |
MAX | 최고값 | |
MIN | 최소값 | |
STDEV | 표준 편차값 | |
VAR | 분산값 | |
그룹함수 | WITH ROLLUP | GROUP BY 항목들을 오른쪽에서 왼쪽 순으로 그룹 |
WITH CUBE | GROUP BY 항목들의 모든 경우의 수를 그룹 | |
GROUPING SET | GROUP BY 항목들을 개별 그룹 | |
GROUPING | WITH ROLLUP 및 CUBE에 의해 그룹화 되었다면 0, 그렇지 않으면 1을 반환 |
구분 | 함수 | 설명 |
---|---|---|
순위 함수 | ROW_NUMBER() | 동일한 값에 대해 고유한 순위 반환 |
RANK() | 동일한 값에 대해 고유한 순위 반환 | |
DENSE)RANK() | RANK()와 흡사하나, 동일한 순위를 하나의 등수로 간주 | |
집계 함수(누적) | COUNT() | 누적 건수 |
SUM() | 누적 합계값 | |
AVG() | 누적 평균값 | |
MAX() | 누적 최고값 | |
MIN() | 누적 최소값 |
연산자 | 집합 | 설명 |
---|---|---|
UNION | 합집합 | 중복된 행을 하나의 행으로 반환 |
UNION ALL | 합집합 | 중복된 행을 그대로 반환 |
INTERSECT | 교집합 | 중복된 행은 하나의 행으로 반환 |
EXCEPT | 차집합 | 중복된 행은 하나의 행으로 반환 |
테이블 | 사용 위치 | 생성 방법 | 삭제 방법 |
---|---|---|---|
일반 테이블 | 영구적으로 사용 | CREATE TABLE [테이블명] | DROP TABLE [테이블명] |
세션 임시 테이블 | 해당 쿼리창 | INTO #[테이블명] | DROP TABLE #[테이블명] 또는 해당 쿼리 창 종료 |
전역 임시 테이블 | 모든 쿼리창 | INTO ##[테이블명] | DROP TABLE ##[테이블명] 또는 모든 쿼리 창 종료 |