1. 데이터 포맷 가공 (REPLACE, SUBSTRING, CONCAT)
1.1 REPLACE
: 특정 문자를 다른 것으로 바꾸는 함수
- 사용 방법
REPLACE(바꿀 컬럼, 현재 값, 바꿀 값)
- 사용 예시
-- EX) 주소의 '문곡리'를 '문가리'로 바꾸기
-- 테이블: food_orders, 주소: addr
SELECT addr "원래주소"
REPLACCE (addr, '문곡리', '문가리') "바뀐주소"
FROM food_orders
WHERE addr like '%문곡리%'
1.2 SUBSTRING(=SUBSTR)
: 특정 문자를 골라 조회하는 함수
- 사용 방법
SUBSTRING(조회 할 컬럼, 시작 위치, 글자 수)
SUBSTR(조회 할 컬럼, 시작 위치, 글자 수)
이때, 시작 위치에 '-'(마이너스)를 붙이면 앞이 아닌 뒤쪽 부터 시작함.
- 사용 예시
-- EX) 서울 음식점들의 주소를 전체가 아닌 ‘시도’ 만 나오도록 수정
-- 테이블: food_orders, 주소: addr
SELECT addr "원래 주소",
SUBSTR(addr, 1, 2) "시도" -- 주소 가장 첫번째 글자부터 2개만 조회
FROM food_orders
WHERE addr LIKE '%서울특별시%'
1.3 CONCAT
: 여러 컬럼의 값을 하나로 합치는 함수
- 사용 방법
CONCAT(붙이고 싶은 값1, 붙이고 싶은 값2, 붙이고 싶은 값3, ..... )
붙일 수 있는 문자의 종류 : 컬럼, 한글, 영어, 숫자. 기타 특수문자
- 사용 예시
-- 서울시에 있는 음식점을 ‘[서울] 음식점명’ 으로 수정
-- 테이블: food_orders, 식당이름: restaurant_name, 주소: addr
SELECT restaurant_name "원래 이름",
addr "원래 주소",
CONCAT() ('[', SUBSTR(addr, 1, 2), '] ', restaurant_name) "바뀐 이름"
FROM food_orders
WHERE addr LIKE '%서울%'
2. 조건문 사용 (IF, CASE)
2.1 IF
: 하나의 조건을 지정하고 싶을 때 사용
- 사용방법
IF(조건, 조건을 충족할 때, 조건을 충족하지 못할 때)
- 사용 예시
-- 음식 타입이 ‘Korean’ 일 때는 ‘한식’, ‘Korean’ 이 아닌 경우에는 ‘기타’ 라고 지정
-- 테이블: food_orders, 식당: restaurant_name, 음식 타입: cuisine_type
SELECT restaurant_name,
cuisine_type "원래 음식 타입",
IF(cuisine_type='Korean', '한식', '기타') "음식 타입"
FROM food_orders
2.2 CASE
: 조건을 여러가지 지정하고 싶을 때 사용. IF문을 여러번 쓴 효과를 낼 수 있다.
- 사용방법
CASE WHEN 조건1 THEN 값(수식)1
WHEN 조건2 THEN 값(수식)2
ELSE 값(수식)3
END
- 사용 예시
/*
음식 타입을 ‘Korean’ 일 때는 ‘한식’,
‘Japanese’ 혹은 ‘Chienese’ 일 때는 ‘아시아’, 그 외에는 ‘기타’ 라고 지정
*/
SELECT restaurant_name,
cuisine_type "원래 음식 타입",
CASE WHEN cuisine_type='Korean' THEN '한식'
WHEN cuisine_type IN ('Japanese', 'Chienese') THEN '아시아'
ELSE '기타'
END "음식타입"
FROM food_orders
3. Data Type 오류 해결하기
AVG, SUBSTR 등 함수를 썼을 때 에러메세지에 'data type' 단어가 뜨면서 실행되지 않는다!
☞ 사용하려는 컬럼(값)이 연산이나 함께 사용하는 컬럼의 데이터형이 다를 때 발생
☞ 숫자 계산이나 문자 계산 시 자주 발생하는 오류 (문자+숫자 같은 연산을 하려는 경우)
- 예시
1. rating 컬럼은 숫자처럼 보이지만 문자이다. 따라서 숫자연산을 하려고 하면 data type 오류가 발생.
2. 식당 이름(restaurant_name)과 주문번호(order_id)를 CONCAT으로 합쳐 출력하려고 하면 주문번호가 숫자이기 때문에 data type 오류가 발생.
- 해결 방법 : CAST를 사용하여 데이터 타입 변경
-- 1. rating 컬럼을 숫자로 변경
CAST(IF(rating='Not given', '1', rating) AS DECIMAL)
--2. order_id 컬럼을 문자로 변경
CONCAT(restaurant_name, '-', CAST(order_id AS CHAR))
'Mysql > SQL 기초' 카테고리의 다른 글
[엑셀보다 쉽고 빠른 SQL] 4주차 핵심정리 (0) | 2024.06.16 |
---|---|
[엑셀보다 쉽고 빠른 SQL] 2주차 핵심정리 (0) | 2024.06.13 |
[엑셀보다 쉽고 빠른 SQL] 1주차 핵심정리 (1) | 2024.06.12 |