SQL

SQL - 기초 문법 3

윤승 2025. 2. 24. 20:16
SQL 강의 공부 기록
3주차 강의 내용 정리

 

(REPLACE, SUBSTRING, CONCAT)

1. 특정 문자를 다른 문자로 바꾸는 기능

바뀐 상점 이름, 지역 이름 한 번에 SQL 로 바꿀 수 있다.

 

함수명 : replace

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

 

실습:

select restaurant_name "원래 상점명",
       replace(restaurant_name, 'Blue', 'Pink') "바뀐 상점명" 
       --restaurant_name컬럼 열에 Blue 특정단어를 Pink로 변경 
from food_orders
where restaurant_name like '%Blue Ribbon%'

2. 원하는 문자만 남기기 기능

전체 데이터가 아닌 특정 문자만 필요할 때, SQL 로 필요한 부분만 조회할 수 있다.

 

함수명 : substring (substr)

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

 

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

select addr "원래 주소",
       substr(addr, 1, 2) "시도"
from food_orders
where addr like '%서울특별시%'

 


3. 여러 컬럼의 문자를 합치기 기능

 

원하는 문자가 여러 컬럼에 있을 때, 하나로 합쳐서 업무에 필요한 형태로 만들 수 있다.

함수명 : concat

concat(붙이고 싶은 값1, 붙이고 싶은 값2, 붙이고 싶은 값3, .....)

 

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

select restaurant_name "원래 이름",   
       addr "원래 주소",
       concat('[', substring(addr, 1, 2), '] ', restaurant_name) "바뀐 이름"
from food_orders
where addr like '%서울%'

(IF, CASE)

1. If 문 기초

IF 문은 원하는 조건에 충족할 때 적용할 방법과 아닌 방법을 지정해 줄 수 있다.

 

함수명 : if

if(조건, 조건을 충족할 때, 조건을 충족하지 못할 때)

 

실습( 음식 타입을 ‘Korean’ 일 때는 ‘한식’, ‘Korean’ 이 아닌 경우에는 ‘기타’ 라고 지정 ) : 

select restaurant_name,
       cuisine_type "원래 음식 타입",
       if(cuisine_type='Korean', '한식', '기타') "음식 타입"
       --if문 마지막조건은 아닌 경우('기타')
from food_orders

2. Case 문 기초

조건을 지정하다보면, 두 개 이상 지정을 해야 할 경우가 있다. case 문을 이용하여 여러번의 if 문을 적용 한 효과를 낼 수 있다.

 

함수명 : case

case when 조건1 then 값(수식)1
     when 조건2 then 값(수식)2
     else 값(수식)3
end

 

실습( 음식 타입을 ‘Korean’ 일 때는 ‘한식’, ‘Japanese’ 혹은 ‘Chienese’ 일 때는 ‘아시아’, 그 외에는 ‘기타’ 라고 지정 ):

select restaurant_name,
       cuisine_type AS "원래 음식 타입",
       case when (cuisine_type='Korean') then '한식'
       else '기타'
       end as " 음식 타입"
from food_orders

--CASE 문을 사용하여 특정 조건을 검사한다.
--cuisine_type이 'Korean'이면 '한식'으로 변환한다.

 

혼자 해보는 실습과제

문제) 
다음의 조건으로 배달시간이 늦었는지 판단하는 값을 만들어주세요.
- 주중 : 25분 이상
- 주말 : 30분 이상

 

정답 코드:

select order_id,  
       restaurant_name,
       day_of_the_week,
       delivery_time,
       case when day_of_the_week='Weekday' and delivery_time>=25 then 'Late'
            when day_of_the_week='Weekend' and delivery_time>=30 then 'Late'
            else 'On-time' end "지연여부"
from food_orders

 

문제 풀이 : 

 

order_id, restaurant_name, day_of_the_week, delivery_time를 조회

 

CASE 문을 사용해 배달이 지연(Late)되었는지 판단:

- 평일(Weekday): 배달 시간이 25분 이상이면 "Late"

- 주말(Weekend): 배달 시간이 30분 이상이면 "Late"

- 그 외는 "On-time"

- "지연여부"라는 별명을 부여하여 출력

 

 


총 정리 

  • REPLACE(문자열, 기존값, 새값) → 문자열에서 특정 값을 다른 값으로 변경
  • SUBSTRING(문자열, 시작위치, 길이) → 문자열의 일부를 추출
  • CONCAT(문자열1, 문자열2, ...) → 여러 문자열을 연결
  • IF(조건, 참일 때 값, 거짓일 때 값) → 조건에 따라 다른 값을 반환
  • CASE WHEN 조건 THEN 값 ELSE 값 END → 여러 조건에 따라 값을 다르게 반환
 
 

'SQL' 카테고리의 다른 글

1:N, M:N 관계에서의 외래키 설계와 테이블 명명법  (0) 2025.04.09
SQL JOIN  (0) 2025.03.31
SQL - 기초 문법2  (0) 2025.02.21
SQL 기초 문법  (0) 2025.02.20