• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

Weather observation station 11 문제 not like

23.03.11 20:53 작성 23.03.11 20:59 수정 조회수 226

-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

문제에서 요구하는 바는
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' ...)