카테고리 없음

TIL_SQL 20250426 (토)

elya0919 2025. 4. 27. 01:57

오늘의 학습 목표

= SQL 3주차 복습

 

SQL 3주차 

 

Replace
Replace
= 기존 문자열 대체
= Replace(컬럼, 현재 값, 바꿀 값)

사용예시
음식점 주소에서 '문곡리' 지명이 '문가리'로 바뀌었다. 변경하라

# 일단 문곡리를 찾아야하니 
select addr # 주소 컬럼을 출력한다.
from food_orders # 음식점 정보가 담긴 테이블에서
where addr like '%문곡리%' # 조건은 주소컬럼에서 '문곡리' 라는 값을 가지고 있는

# 이제 문곡리라는 주소를 가진 음식점 주소가 2개 나왔으니 
select replace(addr, '문곡리', '문가리') # replace를 사용해 바꿔주자 
from food_orders
where addr like '%문곡리%'

1번 쿼리 결과 (문곡리를 먼저 찾기)
2번 쿼리 결과 (문곡리->문가리 변경)

 

 

SUBSTRING
SUBSTRING
= 지정 컬럼, 시작 위치, 글자 수

사용예시
서울특별시, 경기도를 -> 서울, 경기만 출력, "시도"라는 별칭으로 변경하라

# 일단 주소 컬럼을 불러와서 결과를 확인하고
select addr
from food_orders

# 각 주소의 시작부터 2글자를 출력하면 되니
select SUBSTRING(addr,1,2) "시도"
from food_orders

1번 쿼리 결과 (주소 먼저 확인)

 

2번 쿼리 결과 (주소 앞 2글자 + 별칭)

 

 

CONCAT

CONCAT 
= 컬럼간 문자 데이터 결합

사용예시
서울시의 있는 음식점을 '[서울]음식점명'으로 수정하라

select concat('[', substr(addr,1,2), ']', restaurant_name) "서울 음식점 리스트"
# select = concat ( [ , 서울 , ] , 음식점명 )
from food_orders
where addr like '서울%'

Concat 사용 쿼리 결과

 

 

- 1) [실습] 서울 지역의 음식 타입별 평균 음식 주문금액 구하기 (출력 : ‘서울’, ‘타입’, ‘평균 금액’)
select SUBSTR(addr, 1, 2) as "시도", cuisine_type as "음식타입", avg(price) "평균 금액"
from food_orders
where addr like '서울%'
group BY 시도, 음식타입 

# SUBSTR(addr, 1, 2), cuisine_type
# 1, 2 (select에 1번, 2번 컬럼기준)
# 위에는 group by에 쓸 수 있는 다른 말들

실습 1 쿼리 결과

 

2) [실습] 이메일 도메인별 고객 수와 평균 연령 구하기
SELECT 
substr(email,10) "도메인", 
# 실습 문제는 이메일 주소가 8자리로 통일 그래서 10번째 부터 쭉 뽑으면 도메인 
COUNT(customer_id) "고객 수", 
# 고객 수는 customer_id의 총 행의 갯수를 세면 되니 count 사용
round(avg(age)) as "평균 나이"
# 평균 구하는 함수 avg를 사용 + Round 함수를 이용해 보기 좋게 반올림
from customers
group by 1
# 도메인별 -> 도메인을 기준을 그룹화

#응용
order by 3
# 문제에는 없지만 가장 연령대가 낮은 도메인을 찾는다면 order by

 

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

 

 

5-5

업무 시작을 단축시켜 주는 마법의 문법 (Window Function - RANK, SUM)