SQL

250514_내일배움캠프_SQL(replace, substr, concat)

baektree 2025. 5. 14. 21:29

<aside> 💡

오늘의 학습에 대하여

  • 어렵지만, 어려운 퀘스트를 해내갈 때의 기쁨이란! 흐뭇흐뭇
  • 진도를 빨리 나가고 싶은 한국인 마음 vs 기초를 탄탄하게 다져야지! 위 두가지 자아가 충돌한다. 일단은 마인드 컨트롤 하면서 후자처럼 하려고 노력하는 중이다. </aside>

1. 오늘 학습 한 내용을 나만의 언어로 정리하기

  • replace (addr, ‘문곡리’, ‘문가리’): addr컬럼에서 문곡리 문자를 문가리로 바꿔줘
  • select addr " 원래주소" replace(addr, '문곡리', '문가리') "바뀐주소" from food_orders where addr like '%문곡리%' 1. 테이블은에서 food_orders 2. 원래주소랑, 바뀐주소 조회할 건데 3. 원래주소에서 문곡리가 포함된 데이터만 조회해줘
  • substr(addr, 1, 2) : addr 컬럼에서 1번째부터 2번째 글자까지만 뽑아줘
    • substr : substring (sub + string) 문자열의 일부분을 잘라내는 함수
    select addr "원래 주소",
           substr(addr, 1, 2) "시도"
    from food_orders
    where addr like '%서울특별시%'
    
    1. food_orders 테이블에서
    2. 원래주소랑, 원래주소에서 "시도"만 부분문자열로 뽑아낸 것이랑 조회 할 건데
    3. 원래주소에서 서울특별시가 포함된 데이터만 보여줘
    
  • concat(1, ‘이름’, 3) 요소를 다 합쳐줘#데이터 바꿀 때 replace(대체하다)#문자열 이어 붙일 때 concat(concatenate: 이어 붙이다.)
  • #문자열 일부 추출할 때 substring(부분문자추출)
  • select restaurant_name "원래 이름", addr "원래 주소", concat('[', substring(addr, 1, 2), '] ', restaurant_name) "바뀐 이름" from food_orders where addr like '%서울%' 1. food_orders 테이블에서 2. 음식점 원래이름이랑, 주소랑, 바뀐 이름으로 조회할 건데 3. 바뀐이름은 CONCAT를 활용하는데 CONCAT는 문자 합치기란 뜻이다. 4. 주소가 서울을 포함하는 값만 보여줘 (조건)
  • 오늘은 정말이지 어려워~
    • 오늘은 난이도가 있어 어려웠지만, QUERY를 적기 전에 흐름을 정리해보고, 어떤 구문(정해진 순서와 규칙)을 적어야 하는지 짧게 작성해보고, 전체구조로 합쳐보는 연습을 의식적으로 많이 하려고 했다.
    • 가령 이메일 도메인별 고객 수와 평균 연령 구하기라면
      1. 어디 테이블에서 가져와야 하지? → customers 테이블
      2. 어떤 컬럼을 조회해야 하지? , 이때 써야하는 함수가 있다면? → 이메일 (substring 사용해서 도메인만 뽑아야 한다.) → substr(email, 8) → 고객 수 (레코드 데이터 뽑으면 되겠다) count(1) → 평균 연령 avg(age)
      3. 어떤 조건이 있지? x
      4. 그룹핑, 정렬이 있나? → group by 도메인
      그래서 종합하면
    • select substring(email, 10) "도메인", count(1) "고객 수", avg(age) "평균연령" from customers order by 1

2. 학습하며 겪었던 문제점 & 에러

  • 문제1) where column like ‘%서울%’ : 특정 패턴이 포함된 문자열을 찾는 도구
    • 내가 겪은 문제점?
      • like가 헷갈리더라구요?
    • 내가 했던 풀이 방식, 왜 틀렸는지?
      • where column like ‘%서울%’ 에서
        • 서울이 맨 앞에, 맨 뒤에 있어도 추출 되길래 오잉? 싶었다.
    • 앞으로 어떻게 하면 좋을지?
      • 이유는 ‘%서울%’이 서울을 포함한 것 즉, 서울이 앞 또는 뒤에 와도 되며 심지어 없어도 되는 데이터를 조회한거라고 한다! **%(퍼센트)**는 0개 이상의 문자를 포함하는 비슷한 문자열을 찾는 도구!
  • 문제2) count(1)의 의미가 도대체 뭘까?
    • count(1)를 컬럼 quantity랑 헷갈렸다.
    • quantity랑은 전혀 상관없고, 컬럼의 데이터 개수(레코드 개수)를 계산하는 것이라고 한다. 따라서 group by 된 것이 컬럼의 합계를 구하는 데 용이하다. 가령 지역 별 데이터 개수 (서울은 ~ , 경기는 ~ )

3. 내일 학습 할 것은 무엇인지

  • [ ] 3주차 나머지 강의 완강 가즈아!!

#내일배움캠프 #사전캠프 #TIL