SQL 과제가 너무 어려웠다. 어찌저찌 기본 난이도 문제까지는 풀어서 냈는데, 정답 쿼리를 보고 내 쿼리를 보니까 함수도 이상한 거 쓰고 풀이도 맞는지 의문스러워졌다. 오늘은 못했지만 내일 꼭 코드 리뷰 해야겠다.
학습 내용
정규 표현식(SQL)
복잡한 검색을 할 때 패턴을 구체화 할 수 있는 강력한 기능
단순히
Like ‘%word%’
문을 쓰는 것을 넘어,
첫 번째 글자로는 어떤 패턴의 문자가 오고, 중간에 어떤 구조가 반복되고, 맨 마지막에는 어떤 문자로 끝나야 하는 등,
자세한 조건을 걸어서 필터링 할 수 있다.기본적으로
REGEXP
와RLIKE
는 주어진 문자열이 정규 표현식과 일치하면 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 |