강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

Ria Eunhye Park님의 프로필 이미지
Ria Eunhye Park

작성한 질문수

[백문이불여일타] 데이터 분석을 위한 중급 SQL 문제풀이

1번, 2번, 3번 문제 풀이

Weather observation station 11 문제 not like

작성

·

345

·

수정됨

-1

select distinct city
from station
where city not like '%a%' or
city not like '%e%' or
city not like '%i%' or
city not like '%o%' or
city not like '%u%'

위 쿼리는 제가 작성한 쿼리입니다

이렇게 쿼리 작성하는건 문제에서 말하는 의도는 맞긴한 것 같은데 값 산출이 안되더라구요

다른분이 적어주신 코드(아래)를 보면 or로 연결을하고있는데

한번에 and조건으로 '%a%' 로 하면안되는건지 궁금합니다.

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

답변 1

1

지식공유자 J님의 프로필 이미지
지식공유자 J
지식공유자

문제에서 요구하는 바는
1) 모음으로 시작하지 않거나 (either do not start with vowels or)
2) 모음으로 끝나지 않는 값 (do not end with vowels) 을 찾는 것입니다.


1번 조건에 부합하는 값은 모음으로 끝나도 되고 자음으로 끝나도 되는데, 맨 처음 문자만 모음이 아니면 됩니다.
가령 'Tokyo'는 모음으로 시작하지 않는 값이기 때문에 1번 조건에 부합해서 반환이 됩니다.
그런데 만약 not like '%o%'로 조건을 줬다면 반환되지 못합니다.
이 조건은 o의 앞에 어떤 문자가 있거나 o의 뒤에 어떤 문자가 있는 값, 다시 말하면 문자열의 어느 위치에든 o가 포함된 데이터를 전부 제외하라는 뜻이 되기 때문입니다.

그리고 두 번째 쿼리도 정답은 아닙니다.
위 조건 1)과 2)를 나눠 작성한 후 OR로 연결해 줘야 하기 때문에 아래와 같이 괄호를 활용해 작성해야 합니다.

WHERE (city NOT LIKE 'a%' 
       AND city NOT LIKE 'e%' ...) 
   OR (city NOT LIKE '%a' 
       AND city NOT LIKE '%e' ...)
Ria Eunhye Park님의 프로필 이미지
Ria Eunhye Park

작성한 질문수

질문하기