본문 바로가기

SQL

[SQL 챌린지] 해커랭크 정복하기 Day 4

✍ 제 머리로 코드를 짜내기 위한 챌린지입니다. (그동안 습관적으로 discussion창을 보곤 했거든요..)

 

🚀 이 포스팅 보신분 챌린지에 함께해요🤗 (함께하면 기쁨도 두 배! 서로 온라인 메이트가 되어보아요.)

 

😇 basic단계는 하루에 몇개라도 업로드 할 예정입니다. (예> Day* ~ Day* 10 그 이상도 될 수 있습니다.)

 


문제 [Weather Observation Station 8]

 

STATION 테이블에서 'a, e, i, o, u'로 시작하고 끝나는 도시 이름을 조회하는 쿼리를 작성하세요.

단, 중복은 제거하세요.

풀이

vowel로 시작하고 끝나는 두 가지 조건을 모두 충족시켜야함

 

1. [Oralce]

1-1. LOWER, LIKE 이용

SELECT distinct city
FROM station
WHERE (
   LOWER(city) LIKE 'a%' 
   OR LOWER(city) LIKE 'e%' 
   OR LOWER(city) LIKE 'i%' 
   OR LOWER(city) LIKE 'o%' 
   OR LOWER(city) LIKE 'u%'
)
AND (
   LOWER(city) LIKE '%a' 
   OR LOWER(city) LIKE '%e' 
   OR LOWER(city) LIKE '%i' 
   OR LOWER(city) LIKE '%o' 
   OR LOWER(city) LIKE '%u'
);

 

city 칼럼에서 'a, e, i, o, u' 와 같이 소문자로 vowel 문자 찾고자 모두 소문자로 적용하는 LOWER함수 적용

WHERE 절에 vowel로 시작하고 끝나는 조건 동시 충족하기 위해 AND 이용

 

 

1-2. LOWER, SUBSTR 이용

SELECT DISTINCT CITY
FROM STATION 
WHERE LOWER(SUBSTR(CITY, -1)) IN ( 'a', 'e', 'i', 'o', 'u') 
AND
 LOWER(SUBSTR(CITY, 1, 1)) IN ( 'a', 'e', 'i', 'o', 'u') 
ORDER BY CITY;

 

 city 칼럼에서 'a, e, i, o, u' 와 같이 소문자로 vowel 문자 찾고자 모두 소문자로 적용하는 LOWER함수 적용

✍ 문자열을 추출하는 SUBSTR을 이용 

SUBSTR("문자열", "시작위치", "길이")  이므로 시작위치에 -1을 지정해주면 마지막 한 글자를 의미하며 시작위치에 1, 길이에 1을 지정하면 첫글자 하나를 의미합니다. 주의할 점은 SQL은 다른 프로그래밍 언어와 달리 문자열의 자리를 1부터 카운트합니다.

 

 

1-3. REGEXP, INTERSECT, 정규표현식 이용

SELECT distinct city
FROM station 
WHERE REGEXP_LIKE(LOWER(CITY), '^[aeiou]') 
INTERSECT 
SELECT distinct city 
FROM station 
WHERE REGEXP_LIKE(LOWER(CITY), '[aeiou]$');

 

지난 포스팅과 같이 정규표현식 이용 

✍ REGEXP_LIKE는 문자열이 포함되어 있는지 알려주는 LIKE와 달리 정규표현식을 이용해 추출해주는 함수

첫글자가 vowel인 row와 가장 끝자리가 vowel인 row를 합치는 INTERSECT 이용

 

 

<정규표현식 표>

operator description
^ 문자열이 시작할 경우
$ 문자열이 끝날 경우
[ ] 임의의 그룹

 

2. [MySQL]

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

✍ 위의 코드에 비해 너무 간편해 보이는 MySQL 코드...

REGEXP 함수명만 다른 것 빼고는 Oracle과 유사

 


문제 링크:

www.hackerrank.com/challenges/weather-observation-station-8/problem

 

Weather Observation Station 8 | HackerRank

Query CITY names that start AND end with vowels.

www.hackerrank.com