[HackerRank] SQL Basic (easy)(2)

2025. 8. 13. 17:51·코딩 테스트/02. SQL

1. Weather Observation Station 8

https://www.hackerrank.com/challenges/weather-observation-station-8/problem?isFullScreen=true

 

Weather Observation Station 8 | HackerRank

Query CITY names that start AND end with vowels.

www.hackerrank.com

Query the list of CITY names from STATION which have vowels (i.e., a, e, i, o, and u) as both their first and last characters. Your result cannot contain duplicates.

방법 1) 일반

SELECT DISTINCT CITY
FROM STATION
WHERE UPPER(SUBSTR(CITY, 1, 1)) IN ('A','E','I','O','U')
  AND UPPER(SUBSTR(RTRIM(CITY), LENGTH(RTRIM(CITY)), 1)) IN ('A','E','I','O','U');

 

방법2) 오라클의 정규 표현식

SELECT DISTINCT CITY
FROM STATION
WHERE REGEXP_LIKE(CITY, '^[AEIOU].*[AEIOU]$', 'i');

 

정규표현식

더보기

 

 정규표현식은 문자열의 패턴을  표현하는 문법으로 

이런 모양의 문자열이다 라고 규칙을 정의합니다!

  • Oracle → REGEXP_LIKE(column, '패턴', '옵션')
  • MySQL → REGEXP 또는 RLIKE
  • PostgreSQL → ~(대소문자 구분), ~*(대소문자 무시)

 

 

기호 의미 예시
^ 문자열 시작 ^A → A로 시작
$ 문자열 끝 x$ → x로 끝
. 임의의 한 글자 a.b → a(아무 글자)b
* 0회 이상 반복 go* → g, go, goo, gooo...
+ 1회 이상 반복 go+ → go, goo, gooo...
? 0~1회 반복 colou?r → color, colour
[] 대괄호 안의 문자 중 하나 [aeiou] → 모음 하나
[^] 대괄호 안의 문자 제외 [^0-9] → 숫자 제외
{n} n회 반복 [0-9]{3} → 숫자 3개
{n,m} n~m회 반복 [A-Z]{2,4} → 대문자 2~4개
` ` OR

🔸^ 의 위치

  • ^가 대괄호 밖에 있으면
    → 문자열의 시작을 의미
  • ^가 대괄호 안 맨 앞에 있으면
    → 대괄호 안 문자들을 제외하라는 의미
패턴 의미 예시
^A A로 시작 Apple ✅, Banana ❌
[A] A라는 문자 Apple ✅, Banana ✅
[^A] A가 아닌 문자 B ✅, C ✅, A ❌
^[^A] 첫 글자가 A가 아닌 경우 Banana ✅, Apple ❌

🔸{} 반복 패턴 

패턴 의미 예시(문자열:abcabcabc) 매칭여부
{n} 정확히 n번 반복 (abc){3} → abcabcabc ✅
{n,} n번 이상 반복 (abc){2,} → abcabcabc ✅ (2번 이상)
{,m} m번 이하 반복 (abc){,2} → abcabc ✅ (2번 이하)
{n,m} n번 이상 m번 이하 반복 (abc){2,4} → abcabcabc ✅ (2~4번)

정규표현식 연습문제

더보기

📌 연습문제 

1단계 — 시작과 끝

문제 1
STATION 테이블에서 CITY가 'A'로 시작하는 모든 도시를 조회하시오.
(대소문자 구분 없이)

SELECT *
FROM STATION
WHERE REGEXP_LIKE(CITY, '^[A].*', 'i');

📌 설명

  • '^[A].*' → 첫 글자가 A이고 뒤에 뭐가 와도 됨
  • ^ → 문자열 시작
  • .* → 임의의 문자 0개 이상
  • 'i' → 대소문자 구분 없음 (A, a 둘 다 허용)

문제 2
STATION 테이블에서 CITY가 'a'로 끝나는 모든 도시를 조회하시오.
(대소문자 구분 없이)

SELECT *
FROM STATION
WHERE REGEXP_LIKE(CITY, 'a$', 'i');

📌 설명

  • 'a$' → 마지막 글자가 a
  • $ → 문자열의 끝

2단계 — 문자 집합

문제 3
STATION 테이블에서 첫 글자가 모음(a, e, i, o, u) 중 하나인 도시를 조회하시오.
(대소문자 구분 없이)

SELECT *
FROM STATION
WHERE REGEXP_LIKE(CITY, '^[aeiou]', 'i');

문제 4
STATION 테이블에서 마지막 글자가 자음(모음을 제외한 영어 알파벳)인 도시를 조회하시오.

SELECT *
FROM STATION
WHERE REGEXP_LIKE(CITY, '[^aeiou]$', 'i');

📌 설명

  • [^aeiou] → 모음(a, e, i, o, u)이 아닌 문자
  • $ → 문자열 끝 위치

3단계 — 반복

문제 5
STATION 테이블에서 CITY의 길이가 정확히 5글자인 도시를 조회하시오.

SELECT *
FROM STATION
WHERE REGEXP_LIKE(CITY, '^.{5}$');

📌 설명

  • ^ → 문자열 시작
  • . → 임의의 문자 한 글자
  • {5} → 바로 앞 패턴(.)이 5번 반복
  • $ → 문자열 끝

즉, ^.{5}$ = 시작부터 끝까지 문자 5개인 경우


문제 6
STATION 테이블에서 CITY가 7글자 이상 9글자 이하인 도시를 조회하시오.

SELECT *
FROM STATION
WHERE REGEXP_LIKE(CITY, '^.{7,9}$');

{7,9} → 7번 이상 9번 이하 반복

 


4단계 — 조합

문제 7
STATION 테이블에서 첫 글자와 마지막 글자가 모두 모음인 도시를 조회하시오.
(대소문자 구분 없이)

SELECT CITY
FROM STATION
WHERE REGEXP_LIKE(CITY, '^[aeiou].*[aeiou]$', 'i');

# 단어 마지막에 공백이 있는 경우 RTRIM 활용
# WHERE REGEXP_LIKE(RTRIM(CITY), '^[aeiou].*[aeiou]$', 'i');

2. Weather Observation Station 9

https://www.hackerrank.com/challenges/weather-observation-station-9/problem?isFullScreen=true

 

Weather Observation Station 9 | HackerRank

Query an alphabetically ordered list of CITY names not starting with vowels.

www.hackerrank.com

Query the list of CITY names from STATION that do not start with vowels. Your result cannot contain duplicates.

SELECT
    DISTINCT CITY
FROM STATION
WHERE CITY REGEXP '^[^aeiou].*';

위에 사용한 정규 표현식은 오라클인 경우이고, 이번에 는 MySQL 버전의 정규표현식 입니다.

 

기본 사용 구조

SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 REGEXP '패턴';

3. Weather Observation Station 10

https://www.hackerrank.com/challenges/weather-observation-station-10/problem?isFullScreen=true

 

Weather Observation Station 10 | HackerRank

Query a list of CITY names not ending in vowels.

www.hackerrank.com

Query the list of CITY names from STATION that do not end with vowels. Your result cannot contain duplicates.

SELECT 
    DISTINCT CITY
FROM STATION
WHERE CITY REGEXP '[^aeiou]$'

4. Weather Observation Station 11

https://www.hackerrank.com/challenges/weather-observation-station-11/problem?isFullScreen=true

 

Weather Observation Station 11 | HackerRank

Query a list of CITY names not starting or ending with vowels.

www.hackerrank.com

Query the list of CITY names from STATION that either do not start with vowels or do not end with vowels. Your result cannot contain duplicates.

SELECT DISTINCT CITY
FROM STATION
WHERE RTRIM(CITY) REGEXP '^[^aeiou]'
   OR RTRIM(CITY) REGEXP '[^aeiou]$';

 

POINT (1)

MySQL은 i 플래그를 안넣어도 대소문자가 걸러질까?

 

MySQL은 기본적으로 REGEXP가 대소문자를 구분하지 않습니다

MySQL은 오라클처럼 대소문자 무시 플래그를 안 줘도 기본이 i 플래그 상태라
[^aeiouAEIOU] 이렇게 대문자를 굳이 다 쓰지 않아도 됩니다.
그냥 [^aeiou]로만 써도 E, O 같은 대문자 모음까지 걸러집니다.

 

POINT (2)

문제에서 "either … or"라고 했으니 시작이 모음이 아니거나 끝이 모음이 아닌 경우로 조건을 나눠서 OR로 연결

(A 또는 B, 둘중 하나)

5. Weather Observation Station 12

https://www.hackerrank.com/challenges/weather-observation-station-12/problem?isFullScreen=true

 

Weather Observation Station 12 | HackerRank

Query an alphabetically ordered list of CITY names not starting and ending with vowels.

www.hackerrank.com

Query the list of CITY names from STATION that do not start with vowels and do not end with vowels. Your result cannot contain duplicates.

SELECT 
    DISTINCT CITY
FROM STATION
WHERE RTRIM(CITY) REGEXP '^[^aeiou].*[^aeiou]$';

 

POINT (.*) vs [[:alpha:]]* vs [a-zA-Z]*

패턴 의미 허용 문자 특징/ 주의
.* 임의의 문자 0회 이상 모든 문자 (알파벳, 숫자, 공백, 특수문자 포함) 가장 범위가 넓음. 데이터 제약이 없을 때 사용. 예: "Seoul 123!" 도 매칭됨
[[:alpha:]]* 알파벳 문자 0회 이상 A–Z, a–z (영문 알파벳만) POSIX 문자 클래스 사용 → 대소문자 자동 포함. 숫자·공백·특수문자 허용 안 함
[a-zA-Z]* 알파벳 문자 0회 이상 A–Z, a–z (영문 알파벳만) [[:alpha:]]*와 의미 같지만 POSIX가 아닌 직접 명시. 로케일 설정 영향을 덜 받음

'코딩 테스트 > 02. SQL' 카테고리의 다른 글

[HackerRank] SQL Basic (easy)(4)  (2) 2025.08.14
[HackerRank] SQL Basic (easy)(3)  (1) 2025.08.13
[HackerRank] SQL Basic (easy)(1)  (4) 2025.08.12
[solvesql] Lv2 문제 풀이 및 함수 정리  (8) 2025.08.11
[solvesql] Lv1 문제 풀이 및 함수 정리  (3) 2025.08.07
'코딩 테스트/02. SQL' 카테고리의 다른 글
  • [HackerRank] SQL Basic (easy)(4)
  • [HackerRank] SQL Basic (easy)(3)
  • [HackerRank] SQL Basic (easy)(1)
  • [solvesql] Lv2 문제 풀이 및 함수 정리
Growth DA Log
Growth DA Log
Growth DA Log 님의 블로그 입니다.
  • Growth DA Log
    Growth DA Log님의 블로그
    Growth DA Log
  • 전체
    오늘
    어제
    • 분류 전체보기 (125)
      • TIS_COMPANY (6)
      • 코딩 테스트 (61)
        • 01. Python (3)
        • 02. SQL (58)
      • 데이터 분석 (53)
        • 01. BigQuery (9)
        • 02. GA4 (1)
        • 02-1. GA4를 더 잘 다루기 위한 마케팅 개.. (5)
        • 03. streamlit (5)
        • 04. Git (12)
        • 05. 데이터 엔지니어링 (3)
        • 06. 데이터 모델링 (11)
        • 07. Excel (0)
        • 08. Tableau (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩테스트
    tableaubootcamp
    ROW_NUMBER
    rank
    이행성
    revert
    git
    프로그래머스
    tableau
    cross_join
    DENSE_RANK
    코드잇스프린트후기
    streamlit
    solvesql
    SQL
    코테
    쿼리테스트
    Reset
    윈도우함수
    AARRR
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Growth DA Log
[HackerRank] SQL Basic (easy)(2)
상단으로

티스토리툴바