STATION
테이블 사용MySQL
을 사용
테이블 명 : STATION
Field | Type |
---|---|
ID | NUMBER |
CITY | VARCHAR2(21) |
STATE | VARCHAR2(2) |
LAT_N | NUMBER |
LONG_W | NUMBER |
where LAT_N is the northern latitude and LONG_W is the western longitude.
Query a list of CITY and STATE from the STATION table.
: STATION 테이블의 CITY, STATE 열에 해당하는 데이터 출력
SELECT city, state
FROM station
문제 1. Weather Observation Station 1
Query a list of CITY names from STATION for cities that have an even ID number.
Print the results in any order, but exclude duplicates from the answer.: ID 값이 짝수인 CITY name 데이터를 중복 제거하여 출력
Long version
SELECT DISTINCT city
FROM station
WHERE id LIKE '%0'
OR id LIKE '%2'
OR id LIKE '%4'
OR id LIKE '%6'
OR id LIKE '%8'
Short version
SELECT DISTINCT city
FROM station
WHERE id % 2 = 0 -- 짝수는 2로 나누면 나머지가 0임을 이용
문제 2. Weather Observation Station 3
Find the difference between the total number of CITY entries in the table and the number of distinct CITY entries in the table.
For example, if there are three records in the table with CITY values 'New York', 'New York', 'Bengalaru', there are 2 different city names: 'New York' and 'Bengalaru', The query returns 1, because total number of records - number of unique city names = 3 - 2 = 1
: CITY의 전체 데이터 개수와 중복 없이 유일한 값을 가지는 데이터 개수의 차이
SELECT COUNT(city) - COUNT(DISTINCT city)
FROM station
문제 3. Weather Observation Station 4
Query the list of CITY names starting with vowels (i.e.,
a
,e
,i
,o
, oru
) from STATION. Your result cannot contain duplicates.: 모음으로 시작되는 CITY 명을 중복 제거하여 출력
Long version
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%'
Short version - 정규 표현식(REGEXP)
SELECT DISTINCT city
FROM station
WHERE city REGEXP '^[aeiou]' -- ^는 []안 문자열로 시작될 경우를 뜻 함
문제 4. Weather Observation Station 6
Query the list of CITY names ending with vowels (
a
,e
,i
,o
,u
) from STATION. Your result cannot contain duplicates.: 모음으로 끝나는 CITY 명을 중복 제거하여 출력
Long version
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'
Short version - 정규 표현식(REGEXP)
SELECT DISTINCT city
FROM station
WHERE city REGEXP '[aeiou]$' -- $는 []안 문자열로 끝날 경우를 뜻 함
문제 5. Weather Observation Station 7
Query the list of CITY names from STATION which have vowels (i.e.,
a
,e
,i
,o
, andu
) as both their first and last characters. Your result cannot contain duplicates.: 첫 자와 끝 자가 모음인 CITY 명을 중복 제거하여 출력
Long version
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%')
AND (city LIKE '%a'
OR city LIKE '%e'
OR city LIKE '%i'
OR city LIKE '%o'
OR city LIKE '%u')
Short version - 정규 표현식(REGEXP)
SELECT DISTINCT city
FROM station
WHERE city REGEXP '^[aeiou]' AND city REGEXP '[aeiou]$'
문제 6. Weather Observation Station 8
Query the list of CITY names from STATION that do not start with vowels. Your result cannot contain duplicates.
: 모음으로 시작되지 않는 CITY 명을 중복 제거하여 출력
Long version
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%'
Short version - 정규 표현식(REGEXP)
SELECT DISTINCT city
FROM station
WHERE city REGEXP '^[^aeiou]' -- []안의 ^는 일치하지 않음을 의미
문제 7. Weather Observation Station 9
Query the list of CITY names from STATION that do not end with vowels. Your result cannot contain duplicates.
: 모음으로 끝나지 않는 CITY 명을 중복 제거하여 출력
Long version
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'
Short version - 정규 표현식(REGEXP)
SELECT DISTINCT city
FROM station
WHERE city REGEXP '[^aeiou]$'
문제 8. Weather Observation Station 10
Query the list of CITY names from STATION that either do not start with vowels or do not end with vowels. Your result cannot contain duplicates.
: 모음으로 시작되지 않거나 모음으로 끝나지 않는 CITY 명을 중복 제거하여 출력
Long version
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')
Short version - 정규 표현식(REGEXP)
SELECT DISTINCT city
FROM station
WHERE city REGEXP '^[^aeiou]' OR city REGEXP '[^aeiou]$'
문제 9. Weather Observation Station 11
Query the list of CITY names from STATION that do not start with vowels and do not end with vowels. Your result cannot contain duplicates.
: 모음으로 시작되지 않고 모음으로 끝나지 않는 CITY 명을 중복 제거하여 출력
Long version
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%'
AND city NOT LIKE '%a'
AND city NOT LIKE '%e'
AND city NOT LIKE '%i'
AND city NOT LIKE '%o'
AND city NOT LIKE '%u'
Short version - 정규 표현식(REGEXP)
SELECT DISTINCT city
FROM station
WHERE city REGEXP '^[^aeiou]' AND city REGEXP '[^aeiou]$'
문제 10. Weather Observation Station 12
7번 문제에서 AND
를 OR
로 바꾸었을 때 오류가 발생해서 어려움이 있었다. 출력된 결과물을 보니 A
로 시작되는 이름이 있었다.
my version
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
은 연결된 조건들 중 하나만 속해도 된다. 예를 들어, 'Arlington'은 e
로 시작되는 단어가 아니니, 출력될 수 있다. 문제를 읽고 코드를 작성했을 때, 논리 연산(AND
, OR
)의 쓰임새를 정확히 알고 있어야겠다!!!! 이번 문제들을 풀면서 논리 연산에 대해 완벽하게 이해했다!!
논리 연산(AND
, OR
)에 대한 이해력을 높이기 위해 여러 블로그를 참고하여 헷갈렸던 부분을 완벽하게 보충하였다!
NOT LIKE
를 배우며, 이해를 높이는 과정에서 정규 표현식
을 배웠다.
Metacharacter | 설명 |
---|---|
^ | 시작하는 문자열 |
$ | 끝나는 문자열 |
[] | 임의의 그룹 |
[^] | [] 안에서의 ^는 일치하지 않음을 의미 |
정규 표현식
을 사용하면 긴 코드를 간결하게 만들 수 있다. 그리고 추후에 전화번호 등의 데이터에서 어떤 패턴을 찾을 때 유용하게 사용할 수 있을 것 같다. 이번 기회에 어떤 상황에서 사용되는지에 대해 알아보며 이해력을 높여야겠다 !!
코드를 작성하고 나서 그대로 끝내는 것이 아닌, 리뷰하는 습관을 가져야겠다고 생각했다. 코드가 잘 실행된다고 끝내면 완벽하게 이해가 안된 느낌! 이번에 7번 문제의 논리 연산과 NOT LIKE
때문에 리뷰하고, 이해를 높이기 위해 여러 사이트를 참고했는데 그 시간이 있었기 때문에 완전하게 이해했다!!!!!!!
어떻게 보면 정말 어이없는 질문이지만,,, 나에겐 그 질문이 성장할 수 있는 계기랄까!!! :) 앞으로도 열심히 달려볼 것이다🔥