SQLD 시험을 친 직후에 이 문제를 보니 속이 다 울렁거리는군요.
-- answer 1
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%';
--
-- answer 2
SELECT DISTINCT CITY FROM STATION
WHERE CITY REGEXP '^[aeiou]';
--
-- answer 3
SELECT DISTINCT CITY FROM STATION
WHERE LEFT(CITY, 1) IN ('a', 'e', 'i', 'o', 'u');
--
제가 이 문제를 좀 헤매서 구글링을 했는데요, 다양한 답을 찾아서 여러 답을 들고왔습니다.
첫 번째는 소위 말해 노가다 방법입니다.
우선 DISTINCT
는 중복이 없게 처리하는 문법이고,
LIKE
는 뒤의 표현식에 따라 이 표현식에 맞는 결과값만을 가져다줍니다.
우리는 문제에서 제시한 조건에 맞게 aeiou로만 시작하는 도시 이름을 설정한거죠.
두 번째는 정규표현식을 활용한 방법입니다.
REGEXP
이 함수가 정규표현식을 sql에서 사용할 수 있게 해주는 방법입니다.
^[]
의 경우, ^
와 []
를 따로 보아야 합니다.
^
는 뒤에 오는 패턴으로 시작하는 문자열을 찾고,
[]
는 대괄호 안에 패턴을 넣을 수 있습니다.
따라서 ^[aeiou]
라고 하게된다면 aeiou로 시작하는 문자열을 찾게됩니다.
정규표현식이 외우기가 어렵지, 외우고 나면 활용도가 참 높은 방법인 것 같습니다.
세 번째는 문자열의 위치를 이용한 방법입니다.
LEFT(CITY, 1)
이라는건 CITY의 왼쪽에서 첫 번째 문자를 뜻하는 것입니다.
따라서 이 문자가 aeiou중 하나에 해당한다면 조건에 맞게 되는 것이지요.
-- answer 1
SELECT DISTINCT CITY
FROM STATION
WHERE RIGHT(CITY, 1) IN ('a', 'e', 'i', 'o', 'u');
--
-- answer 2
SELECT DISTINCT CITY
FROM STATION
WHERE CITY REGEXP '[aeiou]$';
--
6번에서 사용했던 첫 번째 방법은 %
의 위치만 바꿔주면 됩니다. '%a'
라고 한다면 문자열의 끝에 a가 들어간단 소리지요.
그 외에 똑같이 정규표현식을 사용한 방법도 있고, RIGHT
를 사용하면 오른쪽에서부터 문자열을 나열하게 됩니다.