✍ 제 머리로 코드를 짜내기 위한 챌린지입니다. (그동안 습관적으로 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
'SQL' 카테고리의 다른 글
[SQL 챌린지] 해커랭크 정복하기 Day 5 (0) | 2021.03.01 |
---|---|
[SQL 챌린지] 해커랭크 정복하기 Day 4 (0) | 2021.02.26 |
[SQL 챌린지] 해커랭크 정복하기 Day 3 (0) | 2021.02.22 |
[SQL 챌린지] 해커랭크 정복하기 Day 3 (0) | 2021.02.22 |
[SQL 챌린지] 해커랭크 정복하기 Day 2 (0) | 2021.02.21 |