내일배움캠프_데이터분석_2기/TIL

[TIL] camp_day32_240530

단ee 2024. 5. 30. 22:57

SQL 과제가 너무 어려웠다. 어찌저찌 기본 난이도 문제까지는 풀어서 냈는데, 정답 쿼리를 보고 내 쿼리를 보니까 함수도 이상한 거 쓰고 풀이도 맞는지 의문스러워졌다. 오늘은 못했지만 내일 꼭 코드 리뷰 해야겠다.

학습 내용


  1. 정규 표현식(SQL)

    • 복잡한 검색을 할 때 패턴을 구체화 할 수 있는 강력한 기능

    • 단순히 Like ‘%word%’ 문을 쓰는 것을 넘어,
      첫 번째 글자로는 어떤 패턴의 문자가 오고, 중간에 어떤 구조가 반복되고, 맨 마지막에는 어떤 문자로 끝나야 하는 등,
      자세한 조건을 걸어서 필터링 할 수 있다.

    • 기본적으로 REGEXPRLIKE 는 주어진 문자열이 정규 표현식과 일치하면 True(1)를 반환한다.

      SQL
      #1 pattern 일 경우
      WHERE column_1 REGEXP 'abc'  -- column_1의 행 중에서 'abc'가 포함된 경우 True
      
      #2 pattern A or pattern b
      WHERE column_1 REGEXP 'abc|de'  -- column_1의 행 중에서 'abc' 또는 'de'가 포함된 경우 True
      
      #3 문자 그룹
      WHERE column_1 REGEXP '[A-Z]'  -- column_1의 행 중에서 알파벳 대문자가 포함된 경우 True
        -- 대문자 : A-Z / 소문자 : a-z / 숫자 : 0-9 / 한글 : 가-힣
        -- 만약 대소문자 상관 없이 영어 알파벳이나 숫자 또는 한글이 들어있는 string을 출력해야 한다면 [A-Za-z0-9가-힣] 이렇게 쓸 수 있다.
        -- 만약 연속적인 특정 범위만 추출하고 싶다면 [A-F] 이런 식으로도 범위를 지정할 수 있다.
        -- 만약 e 또는 x 또는 p를 포함하는 행만 나타내고 싶으면 [exp] 이렇게 쓰면 된다. IN('e','x','p') 와 같은 결과
      
      #4 반복
      WHERE column_1 REGEXP '[a-c]*'  -- column_1의 행 중에서 a-c 범위 사이 알파벳이 0회 이상 포함되는 문자열일 경우 True
      WHERE column_1 REGEXP '[a-c]+'  -- column_1의 행 중에서 a-c 범위 사이 알파벳이 1회 이상 포함되는 문자열일 경우 True
      WHERE column_1 REGEXP '[a-c]?'  -- column_1의 행 중에서 a-c 범위 사이 알파벳이 0회 또는 1회 포함되는 문자열일 경우 True
      WHERE column_1 REGEXP '[a-c]{2}'  -- column_1의 행 중에서 a-c 범위 사이 알파벳이 2회 반복되는 문자열일 경우 True
      WHERE column_1 REGEXP '[a-c]{3,5}'  -- column_1의 행 중에서 a-c 범위 사이 알파벳이 3회 이상 5회 이하 반복되는 문자열일 경우 True
      
      #5 위치
      WHERE column_1 REGEXP '^[a-c]'  --  column_1의 행 중에서 문자열의 시작이 a-c 범위 사이 알파벳인 경우 True
      WHERE column_1 REGEXP '[a-c]&'  --  column_1의 행 중에서 문자열의 끝이 a-c 범위 사이 알파벳인 경우 True

고찰 & 기타


  • [가-힣] 이 너무 귀엽고 웃겨서 오늘 내내 혼자 피식피식 웃으면서 쿼리를 짰다.
  • 드디어 리트코드 SQL 50에 해당하는 문제를 다 풀고 뱃지를 받았다!
    오늘 SQL 과제 때문에 머리 아팠지만 그래도 뭐 하나라도 해내서 기분이 좋다.

'내일배움캠프_데이터분석_2기 > TIL' 카테고리의 다른 글

[TIL] camp_day34_240603  (0) 2024.06.04
[TIL] camp_day33_240531  (1) 2024.06.03
[TIL] camp_day31_240529  (0) 2024.05.29
[TIL] camp_day30_240528  (0) 2024.05.28
[TIL] camp_day29_240527  (0) 2024.05.28