[3일차] SQL로 데이터 가공하기(replace, substr, concat, if, case)

jay bong·2024년 4월 18일

SQL

목록 보기
3/9
post-thumbnail

목차

  • 문자 변경하기
    • REPLACE
    • SUBSTRING
    • CONCAT
  • 조건문

    • IF문
    • CASE문
  • Point to check

기존에는 데이터를 있는 그대로 활용을 했다. 그러나 업무의 과정에서 원하는 방식으로 데이터를 가공해야하는 상황이 발생한다. 이번에는 그 방법을 알아볼 것이다.

  • 문자 변경하기

    데이터를 사용할 때 기존의 형식을 그대로 이용할 수도 있지만 상황에 따라 수정을 하거나 일부만 조회할 수 있다.

    • REPLACE
      데이터에 오타가 있거나, 전반적인 수정사항이 있을 때 사용한다.

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

      [실습]

      select addr "원래 주소",
          replace(addr, '직할시', '광역시') "바뀐 주소"
          # addr 칼럼에서 직할시로 표현된 부분을 광역시로 바꿔준 후 바뀐주소로 보여주기
      from food_orders
      where addr like '%직할시%' # addr에서 직할시를 포함할 때만

      [결과]

    • SUBSTRING

      데이터에서 필요한 부분만 조회할 수 있다.

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

      [실습]

      select addr "원래 주소",
         substr(addr, 1, 2) "시도" 
         # addr칼럼에서 1번째부터 2개 가져오기
       from food_orders
       where addr like '인천%' #인천으로 시작하는 것들만

      [결과]

    • CONCAT

      데이터를 여러곳에서 가져와 내가 원하는 형태로 정리하고 싶을 때 사용할 수 있다.

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

      칼럼에서 가져온 데이터 뿐아니라 문자들을 합칠 수도 있다.
      그럴때는 '문자열'을 활용하여 concat안에 넣어준다.

      [실습]

      select restaurant_name "원래 이름",   
            addr "원래 주소",
            concat('[', substring(addr, 1, 2), '] ', restaurant_name) "바뀐 이름"
            #[시도] 음식점 이름의 형태로 데이터를 합친다.
      from food_orders
      where addr like '서울%'

      [결과]

  • 조건문

    칼럼 전체를 조회하는 것이 아니라 조건에 따라 검색하거나 조건에 따라 그룹을 나누어야 하는 상황에서 사용한다.

    • IF문

      조건을 지정해주는 기초 문법이다. 조건을 충족할 때와 아닐때를 구분하여 결과를 출력하도록 한다.

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

      [실습]

      select addr "원래 주소",
          if(addr like '%직할시%', replace(addr, '직할시', '광역시'), addr) "바뀐 주소"
          # 조건: 만약 직할시가 포함된다면
          # 조건 O : 직할시를 광역시로 변경
          # 조건 X : 그래도 출력
      from food_orders
      where addr like '인천%'

      [결과]

    • CASE문

      조건을 두 개 이상 지정을 해야 할때 사용한다. 조건별로 분류(연령, 지역등..)할 수도 있다.

      case when 조건1 then(수식)1 	# 조건 1에 해당되면 값 1 출력
            when 조건2 then(수식)2	# 조건 2에 해당되면 값 2 출력
        	  else(수식)3			 # 나머지는 값3 출력
            end

      [실습]

      select name,
           	age,
          	gender,
           	case when (age between 10 and 19) and gender='male' then "10대 남자"
                	 when (age between 10 and 19) and gender='female' then "10대 여자"
               	 when (age between 20 and 29) and gender='male' then "20대 남자"
               	 when (age between 20 and 29) and gender='female' then "20대 여자" end "그룹" 
      from customers
      where age between 10 and 29

      [결과]


  • Point to check

    • Case 를 사용할 때, 조건이 겹칠 때는 어떻게 작동할까?

    • 여러개의 case when을 사용하더라도 그것은 하나의 칼럼을 구분할 뿐이다.

    • select에서 칼럼을 지정한 후에는 , 를 사용하여 다음 칼럼으로 넘어갔음을 알려줘야 한다.

profile
Fly High

0개의 댓글