내일배움캠프/SQL

[SQL]3주차_Query 결과를 바로 사용할 수 없는 경우(REPLACE, SUBSTRING, CONCAT)

dydatablog 2024. 11. 14. 15:35
728x90

REPLACE : 데이터 값을 바꾸고 싶을 때

기본 구조

replace(바꿀 컬럼, 현재 값, 바꿀 값)

 

 

예시1) 최근에 상점 이름이 바뀌었지만 과거 데이터에는 옛날 이름으로 저장되어있어요

select restaurant_name "원래 상점명",
       replace(restaurant_name, 'Blue', 'Pink') "바뀐 상점명"
from food_orders
where restaurant_name like '%Blue Ribbon%' -- 제대로 바뀌었는지 확인하기 위해서 blue ribbon이 들어가 있는 데이터만 추출
/* 원래 상점명 컬럼에 들어가 있는 'Blue'를 모두 'Pink'로 변경

 

예시2) 예전에 ‘문곡리’ 라는 지명이 ‘문가리’ 로 바뀌었어요

SELECT addr,
REPLACE(addr, '문곡리', '문가리') "바뀐주소"
FROM food_orders
WHERE addr like '%문곡리%'

 

SUBSTRING(SUBSTR) : 특정 문자만 골라서 조회하는 구문

기본 구조

substr(조회 할 컬럼, 시작 위치, 글자 수)

* '글자 수'는 끝까지 조회할 경우 생략 가능

 

 

(실습)서울 음식점들의 주소를 전체가 아닌 ‘시도’ 만 나오도록 수정

SELECT addr "원래 주소",
    SUBSTR(addr, 1, 2) "시도"
FROM food_orders
WHERE addr LIKE '%서울특별시%'

 

 

CONCAT : 여러 컬럼의 문자를 합치기

 

기본 구조

concat(붙이고 싶은 값1, 붙이고 싶은 값2, 붙이고 싶은 값3, .....)
  • 붙일 수 있는 문자의 종류
    • 컬럼
    • 한글
    • 영어
    • 숫자
    • 기타 특수문자

(실습)서울시에 있는 음식점은 ‘[서울] 음식점명’ 이라고 수정

SELECT restaurant_name "원래 이름",   
       addr "원래 주소",
       CONCAT('[', SUBSTRING(addr, 1, 2), '] ', restaurant_name) "바뀐 이름"
FROM food_orders
WHERE addr like '%서울%'

 


[실습] 문자 데이터를 바꾸고, GROUP BY 사용하기

서울 지역의 음식 타입별 평균 음식 주문금액 구하기 (출력 : ‘서울’, ‘타입’, ‘평균 금액’)

SELECT SUBSTR(addr,1,2) "지역",--컬럼1
       cuisine_type "타입",--컬럼2
       AVG(price) "평균 금액"--컬럼3
FROM food_orders
WHERE addr LIKE '서울%'
GROUP BY cuisine_type --GROUP BY 1,2 라고 적어도 무관

 

 

[실습] 이메일 도메인별 고객 수와 평균 연령 구하기

SELECT
	SUBSTR(email, 10) "도메인",
	COUNT(name) "고객 수",
	AVG(age) 
FROM customers
GROUP BY 1
-- SUBSTR(email, 9) 에서 마지막 글자까지 추출할 경우 생략 가능

 

[실습] ‘[지역(시도)] 음식점이름 (음식종류)’ 컬럼을 만들고, 총 주문건수 구하기

SELECT 
	CONCAT('[',SUBSTR(addr, 1,2),']',restaurant_name,'(',cuisine_type,')') "음식점",
	COUNT(1) "주문 건수"
FROM food_orders
GROUP BY 1

 

728x90