Mysql/SQL 기초

[엑셀보다 쉽고 빠른 SQL] 3주차 핵심정리

G_vieve 2024. 6. 14. 14:14

 

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))