합집합 (UNION, UNION ALL)

SELECT [칼럼 이름]
FROM [테이블 A 이름]
(UNION or UNION ALL)

SELECT [칼럼 이름]

FROM [테이블 B 이름];

 

  • UNION : 동일한 값 제외
  • UNION ALL : 동일한 값도 포함
  • 쿼리 A와 쿼리 B의 결과 값의 개수가 같아야 함
  • ORDER BY는 쿼리 A에서 가져온 칼럼으로만 가능

 

 

 

💡 교집합 (INTERSECT), 차집합 (MINUS) *mysql에는 두 표현이 존재하지 않음 → JOIN으로 표현

교집합

SELECT [칼럼 이름]

FROM [테이블A 이름] AS A INNER JOIN [테이블 B 이름] AS B

ON A.[칼럼1 이름] = B.[칼럼2 이름] AND … AND A.[칼럼n 이름] = B.[칼럼 n 이름];

 

차집합 (A - B)

SELECT [칼럼 이름]

FROM [테이블A 이름] AS A LEFT JOIN [테이블 B 이름] AS B

ON A.[칼럼1 이름] = B.[칼럼2 이름] AND … AND A.[칼럼n 이름] = B.[칼럼 n 이름]

WHERE B.[칼럼 이름] IS NULL;

INNER JOIN : 두 테이블 모두에 있는 값만 합치기

SELECT [칼럼 이름]

FROM [테이블A 이름] INNER JOIN [테이블 B 이름]

ON [테이블 A 이름].[칼럼 A 이름] = [테이블 B 이름].[칼럼 B 이름]

WHERE 조건식;

 

LEFT JOIN : 왼쪽 테이블에 있는 값만 합치기

RIGHT JOIN : 오른쪽 테이블에 있는 값만 합치기

SELECT [칼럼 이름]

FROM [테이블A 이름] [LEFT or RIGHT]JOIN [테이블 B 이름]

ON [테이블 A 이름].[칼럼 A 이름] = [테이블 B 이름].[칼럼 B 이름]

WHERE 조건식;

 

OUTER JOIN : 두 테이블에 있는 모든 값 합치기

💡mysql에는 OUTER JOIN 키워드가 없기 때문에 LEFT JOIN + RIGHT JOIN으로 실행 가능

 

SELECT [칼럼 이름]

FROM [테이블A 이름] LEFT JOIN [테이블 B 이름]

ON [테이블 A 이름].[칼럼 A 이름] = [테이블 B 이름].[칼럼 B 이름]

UNION

SELECT [칼럼 이름]

FROM [테이블A 이름] RIGHT JOIN [테이블 B 이름]

ON [테이블 A 이름].[칼럼 A 이름] = [테이블 B 이름].[칼럼 B 이름];

 

CROSS JOIN : 두 테이블에 있는 모든 값을 각각 합치기

SELECT [칼럼 이름]

FROM [테이블A 이름] CROSS JOIN [테이블 B 이름]

WHERE 조건식;

💡 ON 조건 필요 없음 M행의 A 테이블 x N행의 B테이블 ⇒ m x n 행의 테이블이 만들어짐

 

SELF JOIN : 같은 테이블에 있는 값 합치기

SELECT [칼럼 이름]

FROM [테이블A 이름] AS t1 INNER JOIN [테이블 A 이름] AS t1

ON t1.[칼럼 A 이름] = t2.[칼럼 B 이름]

WHERE 조건식;

조건 만들기

IF

  • IF(조건식, 참일 때 값, 거짓일 때 값)
  • SELECT절에 사용하는 함수
  • 결과 값을 새로운 칼럼으로 반환함

IFNULL

  • IFNULL([칼럼 이름], NULL일 때 값)
  • SELECT절에 사용하는 함수
  • 데이터가 NULL인지 아닌지 판단하고, 결과 값을 새로운 칼럼으로 반환함

 

여러 조건 한번에 만들기

CASE

 

CASE

WHEN 조건식1 THEN 결과값1

WHEN 조건식2 THEN 결과값2

ELSE 결과값3

END

 

  • SELECT절에 사용하는 함수
  • 결과 값을 새로운 칼럼으로 반환함
  • ELSE 문장 생략시 NULL 값 반환

 

함수 만들기

################### mysql workbench 함수 생성시 주의할 점 #########################
SET GLOBAL log_bin_trust_function_creators = 1; # 사용자 계정에 function create 권한 생성
DELIMITER // # 함수의 시작 지정

######################################################
################### 함수 생성 #########################
######################################################
CREATE FUNCTION getScore(math INT, science INT) # 입력값, 데이터 타입 설정
								RETURNS INT # 결과값 데이터 타입 설정 (RETURN 뒤에 S 주의)
BEGIN 
			DECLARE a INT; # 임시값, 데이터 타입
			DECLARE b INT;
			DECLARE score INT;
			SET a = math; # 임시값에 입력값 세팅 
			SET b = science;
			SELECT a + b INTO score; # 쿼리
			RETURN score; # 반환할 결과값
END
######################################################
######################################################
######################################################

// DELIMITER ; # 함수의 끝 지정 (; 앞에 한 칸 띄우기 주의)

데이터 그룹화하기 (GROUP BY)

SELECT [GROUP BY 대상 칼럼 이름], …, [그룹 함수]

FROM [테이블 이름]

WHERE 조건식

GROUP BY [칼럼 이름];

 

💡 SELECT 절에는 GROUP BY 대상 칼럼과 그룹 함수만 사용 가능

  • 여러 칼럼 정렬 가능
  • 칼럼 번호로도 정렬 가능

 

그룹에 조건 추가 (HAVING)

SELECT [칼럼 이름], …, [그룹 함수]

FROM [테이블 이름]

WHERE 조건식

GROUP BY [칼럼 이름]

HAVING 조건식;

 

다양한 그룹 함수들

  • COUNT, SUM, AVG, MIN, MAX : GROUP BY 대상 칼럼이랑 같아도 OK 달라도 OK

 

쿼리의 실행 순서

FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY

💡 ORDER BY 대상 칼럼은 칼럼 이름 대신 SELECT 칼럼 순서로 명시할 수 있음!

데이터 줄 세우기 (ORDER BY)

SELECT [칼럼 이름] FROM [테이블 이름] WHERE 조건식 ORDER BY [칼럼 이름] ASC;

ORDER BY [칼럼 이름]

  • 입력한 칼럼 기준으로 모든 row가 정렬됨
  • 기본 정렬 규칙 = 오름차순(ASC)
  • 내림차순(DESC)
  • 여러 칼럼 정렬 가능
    • SELECT name, age, gender FROM mytable ORDER BY name DESC, age;
  • 칼럼 번호로도 정렬 가능
    • SELECT name, age, gender FROM mytable ORDER BY 1, 2;

 

데이터 순위 만들기 (RANK)

SELECT [칼럼 이름], …, RANK() OVER (ORDER BY [칼럼 이름]) FROM [테이블 이름] WHERE 조건식;

RANK() OVER (ORDER BY [칼럼 이름])

  • 항상 ORDER BY와 함께 사용
  • 정렬된 순서에 순위를 붙인 새로운 칼럼 보여줌, 실제 데이터에 영향 미치지 X

SELECT name, age, RANK() OVER (ORDER BY age DESC) AS age_rank FROM mytable;

 

RANK 공동 순위가 있으면 다음 순서로 건너 뜀
EX) 1 → 2 → 2 → 4
DENSE_RANK 공동 순위가 있으면 다음 순서로 건너 뜀
EX) 1 → 2 → 2 → 4
ROW_NUMBER 공동 순위를 무시함
*중복되는 순위 발생하지 않음

 

 

문자형 데이터 다루기

  • LOCATE(’A’, ‘ABC) : ABC에서 A의 위치 반환
    • 찾는 문자열이 없으면 0 반환
  • SUBSTRING(’ABC’, 2) : ABC에서 2번째 문자부터 반환
    • 입력한 숫자가 문자열 길이보다 크다면 아무것도 반환 X
  • RIGHT(’ABC’, 1) : ‘ABC’에서 오른쪽부터 1번째 문자까지 반환
  • LEFT(’ABC’, 1) : ‘ABC’에서 왼쪽부터 1번째 문자까지 반환
  • UPPER(’abc’) : 문자열 모두 대문자로 반환
  • LOWER(’ABC) : 문자열 모두 소문자로 반환
  • LENGTH(’ABC’) : 문자열의 글자 수 반환
  • CONCAT(’ABC’, ‘DEF’) : ‘ABC’문자열과 ‘DEF’ 문자열을 합쳐 반환
  • REPLACE(’ABC’, ‘A’, ‘Z’) : ‘ABC’의 ‘A’를 ‘Z’로 바꿔 반환

 

숫자형 데이터 다루기

  • ABS(숫자) : 절댓값 반환
  • CEILING(숫자) : 올림
  • FLOOR(숫자) : 내림
  • ROUND(숫자, 자릿수) : 자릿수까지 반올림해서 반환
  • TRUNCATE(숫자, 자릿수) : 자릿수까지 버림해서 반환
    *자릿수에 0 입력시 정수만 반환
  • POWER(숫자1, 숫자2) : 숫자1의 숫자2 제곱 반환
  • MOD(숫자1, 숫자2) : 숫자1를 숫자2로 나눈 나머지 반환
    *2로 나누면 홀수인지 짝수인지 분별 가능

 

날짜형 데이터 다루기

  • NOW() : 현재 날짜와 시간 반환
  • CURRENT_DATE() : 현재 날짜 반환
  • CURRENT_TIME() : 현재 시간 반환
    *위 3개는 입력값 필요 X

 

  • YEAR(날짜) : 날짜의 연도 반환
  • MONTH(날짜) : 날짜의 월 반환
  • MONTHNAME(날짜) : 날짜의 월을 영어로 반환

 

  • DAYNAME(날짜) : 날짜의 요일을 영어로 반환
  • DAYOFMONTH(날짜) : 날짜의 일 반환
  • DAYOFWEEK(날짜) : 날짜의 요일을 숫자로 반환
    *일요일 : 1 ~ 토요일 7
  • WEEK(날짜) : 날짜가 해당 연도에 몇 번째 주인지 반환

 

  • HOUR(시간) : 시간의 시 반환
  • MINUTE(시간) : 시간의 분 반환
  • SECOND(시간) : 시간의 초 반환

 

  • DATE_FORMAT(날짜/시간, 형식) : 날짜/시간의 형식을 형식으로 바꿔 반환
  • DATEDIFF(날짜1, 날짜2) : 날짜1과 날짜2의 차이 반환 (날짜1 - 날짜2)
  • TIMEDIFF(시간1, 시간2) : 시간1과 시간2의 차이 반환 (시간1 - 시간2)

 

SELECT [칼럼 이름] FROM [테이블 이름] WHERE 조건식;

EX) SELECT name FROM table WHERE age = 28;

 

비교 연산자

!=

>=

<

<=

 

논리 연산자

AND

OR

NOT

 

기타 주요 연산자

[칼럼 이름] BETWEEN A AND BA <= [칼럼 이름] AND [칼럼 이름] <= B와 동일

[칼럼 이름] IN (A, B)[칼럼 이름] = A OR [칼럼 이름] = B와 동일

 

문자형 데이터 다루기

LIKE : 와일드카드(%, _)를 활용하여 특정 문자열이 포함된 데이터 선택

  • % : 0개 이상의 문자
  • _ : 1개의 문자

EX) ~ WHERE name LIKE ‘a%’ : a로 시작하는 문자열

~WHERE name LIKE ‘%a’ : a로 끝나는 문자열

~ WHERE name LIKE ‘%a%’ : a를 포함하는 문자열

 

NULL 데이터 가져오기

데이터 값이 존재하지 않는다는 표현 0이나 공백이 아니라 알 수 없는 값을 의미함

[칼럼 이름] IS NULL : NULL인 데이터

[칼럼 이름] IS NOT NULL : NULL이 아닌 데이터

💡 [칼럼 이름] = NULL이나 [칼럼 이름] != NULL은 불가

'What I study > mysql' 카테고리의 다른 글

[MYSQL] 규칙 만들기  (0) 2023.01.05
[MYSQL] 데이터 그룹화하기  (0) 2023.01.03
[MYSQL] 원하는 데이터 만들기  (0) 2023.01.02
[MYSQL] 데이터 가져오기  (0) 2022.12.28
[MYSQL] 데이터베이스 다루기  (0) 2022.12.27

 

 

결론부터 말하자면 만족스럽게 읽은 책이다

데분가 취업준비를 하면서, 지금 나는 어떤 부분이 부족한걸까 어떤 부분을 보완해야 할까하는

생각에 자주 잠기곤 한다

 

학원을 다니며 데이터 분석 스킬부터 배우기 시작하면서

(그것조차 끝물에는 따라가기 어렵긴 했다,, 딥러닝,,🤦‍♀️)

테크닉 부분에만 신경이 쏠려있던 나를 다시한번 생각하게 만들어준 책이라고 생각한다

 

현업에서 일하는 김팀장이 데이터 분석 직무를 새로 맡게되면서

비즈니스 상황에 맞는 분석 기법을 이해하기 쉽게 설명해준다

'이런 상황에서는 이렇기 때문에 이렇게 분석해야하는구나'

여러 프로젝트를 진행하면서 주제에 맞게 데이터를 처리하고 머신러닝 모델을 돌려봤지만

실제 회사에서 벌어질 수 있는 상황과 데이터 기반 의사결정은 어떻게 이루어지는 것인지

찍먹 정도 가능했다

 


✍️ 이 책에서 내가 저장하는 내용들

  • 데이터를 분석하는 목적은 일반적으로 2가지이다.
    예측(Prediction)은 결과를 맞히는 것, 추론(Inference)은 원인과 결과 사이의 관계를 분석하는 것

 

  • 학문에 따라 달라지는 용어들

 

  • 원인과 결과 간 관계를 분석하는 방법에는 회귀분석이 있다.
    - 결과값이 수치형으로 나오는 경우에는 회귀방법론 
    예) t-검정, 분산 분석, 선형 회귀
    - 결과값이 범주형으로 나오면 분류방법론
    예) 로지스틱 회귀, 판별 분석, 서포트 벡터 머신(SVM), 의사결정나무, k-최근접 이웃(KNN)

 

  • 선형 회귀나 로지스틱 회귀는 여러 변수 간의 관계를 동시에 분석해주지만, 액션 플랜을 수립하는 기준을 제시하지는 X
    매출액 1억원 이상, 고객 만족도 4.5 이상, 고객 미팅 100회 이상인 직원에게 해외 연수를 보낸다는 식의 기준을 정해 현장에서
    액션 플랜을 세우기 위해서의사결정나무 방법론
    *의사결정나무에는Decisiontreeclassifier,  Decisiontreeregressor
    종속변수가 범주형이면 분류나무, 종속변수가 수치형이면 회귀나무 선택

 

  • 2와 1 비슷 -> 상관관계를 중요시(비슷한 판매 패턴)하면 피어슨 상관거리
    3과 1 비슷 -> 절대적인 양을 중요시(절대적인 판매량이 비슷)하면 유클리드 거리

 

  • 센서로 측정한 측정치가 많으면 데이터의 분포가 정규 분포에 가까워져서 데이터 가공 없이 바로 분석 가능
    but 센서가 많으면 '차원의 저주' => 주성분 분석 진행

 

  • 왜도와 정규분포 모양

 

'Reference > Books' 카테고리의 다른 글

[ 책 리뷰 ] 그로스해킹  (0) 2023.01.30
[ 책 리뷰 ] 데이터 문해력  (1) 2023.01.13

원하는 데이터 가져오기

SELECT [칼럼1 이름], [칼럼2 이름], [칼럼3 이름] FROM [데이터베이스 이름].[테이블 이름];

SELECT * FROM [데이터베이스 이름].[테이블 이름];

 

별명 붙이기

테이블 내 실제 칼럼 이름은 변하지 X 별명은 쿼리 내에서만 유효함

SELECT [칼럼 이름] AS [칼럼 별명] FROM [테이블 이름];

EX) SELECT name AS 네임 FROM table;

*workbench에서 정확하게 인식할 수 있도록 별명 이름에 가급적이면 따옴표로 감싸주는게 좋음!

 

데이터 일부만 가져오기

LIMIT [로우 수]

쿼리의 가장 마지막에 위치함

EX) SELECT * FROM tables.first_table LIMIT 2;

 

중복 제거하기

DISTINCT [칼럼 이름]

EX) SELECT DISTINCT name FROM tables.first_table;

+ Recent posts