기본 정규표현식 기호

1 ^ 문자열의 시작을 나타냄 패턴이 문자열의 맨 앞에서부터 일치해야 함
2 $ 문자열의 을 나타냄. 패턴이 문자열의 맨 끝에서 일치해야 함
3 . 임의의 단일 문자와 일치함. 어떤 문자든 한 글자와 일치할 수 있음
4 * 바로 앞의 패턴이 0 이상 반복될 수 있음을 의미함
5 + 바로 앞의 패턴이 1 이상 반복될 수 있음을 의미함
6 | OR 연산자로, 앞의 패턴 또는 뒤의 패턴 중 하나와 일치하면 됨
7 [ ] 문자 클래스에 해당, 대괄호 안에 있는 문자들 중 하나와 일치하면 됨
 - 예: [aeiou]는 "a", "e", "i", "o", "u" 중 하나의 문자와 일치
8 { } 바로 앞의 패턴이 정확히 n 반복되는 경우와 일치함
 - 예: ([DdIi]){2}는 "D", "d", "I", "i" 중 1개 문자가 두 번 연속 나타남
9 ( ) 그룹을 나타냄. 패턴의 일부를 그룹으로 묶어서 처리할 수 있음
10 [^....] 대괄호 안에 있는 문자들을 제외한 문자와 일치함
 - 예: [^aeiou]는 "a", "e", "i", "o", "u"를 제외한 문자와 일치

 

기본 패턴

1.    ^([DdIi]){2}: 문자열의 시작에서 "D", "d", "I", "i" 중 하나가 두 번 연속으로 나타남

 

2.    ^[aeiou].*[aeiou]$: 문자열이 모음으로 시작하고, 중간에 0개 이상의 임의 문자가 있으며, 마지막에 모음으로 끝

 

3.    ^[aeiou].+[aeiou]$: 문자열이 모음으로 시작하고, 중간에 최소 한 글자의 임의 문자가 있으며, 마지막에 모음으로 끝

 

4.    ^[aeiou]($|.*[aeiou]$): 문자열이 모음으로 시작, 모음 하나로 끝나거나 중간에 0개 이상의 문자, 마지막 모음으로 끝

 

5.    (^[AEIOUaeiou])|([AEIOUaeiou]$): 문자열이 모음(A, E, I, O, U, a, e, i, o, u)으로 시작하거나 끝

 

6.    ^[AEIOUaeiou]: 문자열이 모음으로 시작

 

'Data Analysis > Regex' 카테고리의 다른 글

정규표현식  (0) 2024.06.25

링크: https://school.programmers.co.kr/learn/courses/30/lessons/131537

 

습득한 점: 

* 컬럼의 값을 NULL 로 표시해야 할 경우에는, 문자열 "NULL" 나타내는 것이 아닌 NULL 로만 기재

 

* UNION , UNION ALL?

     - UNION은 두 개의 테이블을 하나로 만드는 연산.

        두 개 테이블의 컬럼 수, 컬럼 데이터 형식이 모두 일치해야 함.

       UNION 연산은 두 개의 테이블을 하나로 합치면서 중복된 데이터를 제거한다. 정렬을 발생

 

     - UNION ALL은 중복을 제거하거나 정렬을 유발하지 않는다. 중복제거 없이 전부 보여줌

        두 개 테이블의 컬럼 수가 같아야 하는 것은 동일

 

- Reference

https://prinha.tistory.com/entry/MySQL-COALESCE-%ED%95%A8%EC%88%98

https://whitepro.tistory.com/580

https://gooreumwave.tistory.com/25


문제:

ONLINE_SALE 테이블과 OFFLINE_SALE 테이블에서

2022년 3월의 오프라인/온라인 상품 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량을 출력

OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL 로 표시

 

판매일을 기준으로 오름차순 정렬,

판매일이 같다면 상품 ID를 기준으로 오름차순,

상품ID까지 같다면 유저 ID를 기준으로 오름차순 정렬

 

문제 파악:

두개 테이블을 합쳐서, 날짜에 맞는 조건들만 건져내면 된다.

날짜만 포맷을 바꿔서 바꿔주면 되었음.

 

아래와 같이 NULL 값 표기가 필요할 때는,

문자열 "NULL" 나타내는 것이 아닌 NULL 로만 기재하는 것만 유의하면 쉽게 풀 수 있는 문제


* 아래처럼 With 구문을 쓰지 않고 테이블 2개를 한번에 묶고, 정렬해줘도 풀 수 있을 것 같다.

 

(SELECT *

FROM TABLE_1

 

UNION

 

SELECT *

FROM TABLE_2)

ORDER BY ~~~


 

풀이:

WITH COUNTER AS (

        SELECT DATE_FORMAT(SALES_DATE, "%Y-%m-%d") AS SALES_DATE
             , PRODUCT_ID
             , USER_ID
             , SALES_AMOUNT
        FROM ONLINE_SALE AS ONSALE

        UNION ALL

        SELECT DATE_FORMAT(SALES_DATE, "%Y-%m-%d") AS SALES_DATE
             , PRODUCT_ID
             , NULL AS USER_ID
             , SALES_AMOUNT
        FROM OFFLINE_SALE AS OFFSALE
                )

                
SELECT *
FROM COUNTER
WHERE SALES_DATE LIKE '2022-03%'
ORDER BY SALES_DATE,PRODUCT_ID,USER_ID

 

 

 

 

regxone.com/lesson/introdution_abcs. >>> 연습사이트
regxr.com

 


Weather Observation Station 6
https://www.hackerrank.com/challenges/weather-observation-station-6/problem?h_r=internal-search

 

기존 풀이

SELECT DISTINCT city
FROM station
WHERE city LIKE 'a%'
OR city LIKE 'e%'
OR city LIKE 'i%'
OR city LIKE 'o%'
OR city LIKE 'u%'


--------------------------------------------------------------------------------

정규표현식 활용

SELECT DISTINCT city
FROM station
WHERE city REGEXP '^[aeiou].*'       >>> regular expression 
a,e,i,o,u 로 시작해야 하고, 그 뒤는 어떤 문자열이 와도 상관이 없음.


[aeiou] >>> a,e,i,o,u 중 어떤 문자중에 하나라도 들어가면
^문자열 시작위치 >>> 맨 앞
.* 임의의 문자열. = %
. >>> 어떤 문자열도 상관 없음
* >>> .이 몇번 반복될 것 인지?

 

-----------------------------------------------------------------
Weather Observation Station 7

https://www.hackerrank.com/challenges/weather-observation-station-7/problem?h_r=internal-search

SELECT DISTINCT city
FROM station
WHERE city REGEXP '.*[aeiouAEIOU]$'.  >>> ~로 끝나야 할떄 괄호 끝 $표시 >>> [~]$

 

 

Weather Observation Station 8

https://www.hackerrank.com/challenges/weather-observation-station-8/problem?h_r=internal-search

SELECT DISTINCT city
FROM station
WHERE city REGEXP '^[aeiouAEIOU].*[aeiouAEIOU]$' >>> 모음으로 시작하고 모음으로 끝나는 경우

 


Weather Observation Station 9
https://www.hackerrank.com/challenges/weather-observation-station-9/problem?h_r=internal-search

SELECT DISTINCT city
FROM station
WHERE city NOT REGEXP '^[aeiouAEIOU].*'.  >>> 모음으로 시작하지 않아야 할 때.  NOT 추가

 

 

 

 

 

 

 

 

 

 

'기존학습자료 > 기초 스킬' 카테고리의 다른 글

고유값 만들기  (0) 2023.07.02
기초 함수 세부 활용  (0) 2023.06.25
사용자 함수  (0) 2023.06.25

+ Recent posts