문제 링크: https://www.hackerrank.com/domains/sql
카테고리: 해커랭크 > Prepare > SQL > Select All
SELECT * FROM CITY
WHERE COUNTRYCODE = 'USA' AND POPULATION > 100000
기본 문법 정리
SELECT * FROM 테이블명 : 테이블 전체를 조회
WHERE 뒤에 조건
- 파이썬이랑 다르게, = 기호는 하나만 사용한다.
SELECT NAME FROM CITY
WHERE COUNTRYCODE = 'USA' AND POPULATION > 120000
SELECT 컬럼명 FROM 테이블명 : 테이블 중에서 출력하고 싶은 컬럼값
SELECT * FROM CITY
WHERE ID = 1661
4,5번 설명 생략
SELECT CITY, STATE FROM STATION
SELECT DISTINCT(CITY) FROM STATION
WHERE ID % 2 = 0
DISTINCT(컬럼명) : delete duplicates
중복 포함 값의 개수 - 중복을 제외한 UNIQUE 값의 개수를 구해야 하는 문제이다.
SELECT (COUNT(CITY) - COUNT(DISTINCT CITY)) FROM STATION;
DISTINCT 뒤에는 괄호를 씌워도 되고, 생략해도 된다.
SELECT 함수도 괄호를 생략해도 된다.

이름(문자열)의 길이가 가장 짧은 나라와 가장 긴 나라를 <이름 길이> 의 형식으로 출력해야 한다. 단, 문자열의 길이가 같은 나라가 있을 경우 알파벳 순으로 더 앞에 오는 나라를 출력해야 한다.
예를 들어, ABC BCD CDEF 라는 세 나라가 있을 때, 출력값은 다음과 같을 것이다.
ABC 3
CDEF 4
SELECT CITY, LENGTH(CITY)
FROM STATION
이렇게 SELECT 구문을 작성하면 <이름 길이> 의 형식으로 출력 가능하다.
ORDER BY 2, 1
먼저 2번째 열(여기서는 LENGTH(CITY))을 기준으로 오름차순으로 정렬한 후, 동일한 길이의 도시 중에서는 1번째 열(CITY)를 기준으로 오름차순으로 정렬한다.
ORDER BY는 기본이 오름차순이다. 지금은 오름차순으로 코드를 작성했기 때문에 가장 짧은 문자열이 구해질 것이다.
위 코드에서는 2, 1로 몇 번째 열인지 표현했지만, 그냥 열의 이름을 적는 것도 기본적인 방법 중 하나이다.
LIMIT 1;
위에서는 세미콜론 없이도 실행이 잘 됐는데 왜 이번엔 에러가 뜨는지 모르겠다. 두 문단이어서 그런 것 같다..
ORDER BY 2 DESC, 1
2번째 열은 내림차순으로 정렬하고, 1번째 열은 오름차순으로 정렬하는 코드이다.
SELECT CITY, LENGTH(CITY)
FROM STATION
ORDER BY 2, 1
LIMIT 1;
SELECT CITY, LENGTH(CITY)
FROM STATION
ORDER BY 2 DESC, 1
LIMIT 1;
모음으로 시작하지 않는 CITY 이름을 중복 없이 출력해야 한다.
단어의 생김새(?)를 결정해주는 정규표현식을 작성하여 조건으로 지정해 준다.
이를 위해 REGEXP라는 함수를 사용한다.
Regular Expression, 즉 정규표현식이라는 뜻이다.
[^] : 특정 문자 시작, [|] : OR 연산자, [$] : 특정 문자로 종료
REGEXP의 쓰임은 https://velog.io/@gillog/MySQL-REGEXPRegular-Expression%EC%A0%95%EA%B7%9C-%ED%91%9C%ED%98%84%EC%8B%9D 에서 더 알아볼 수 있다.
SELECT DISTINCT CITY
FROM STATION
[aeiouAEIOU].*
글자들의 집합은 대괄호로 묶어준다.
. 는 "모든 문자"를 의미한다.
예를 들어, 'a.b' 패턴은 a로 시작하고 b로 끝나는 문자열을 매치한다.
^[aeiouAEIOU].*
맨 첫 글자에 이 조건을 할당해 주어야 하기 때문에, 시작하는 문자열을 찾는 ^를 사용한다.
WHERE CITY REGEXP('^[aeiouAEIOU].*')
SELECT DISTINCT CITY
FROM STATION
WHERE CITY REGEXP('^[aeiouAEIOU].*')
추가로, 모음으로 시작하지 않는 단어는 다음의 문법을 사용한다.
[^aeiouAEIOU][^문자]의 형태로 작성하면, 괄호 안의 문자를 포함하지 않은 문자열을 찾는다.
따라서 이 코드는 모음으로 시작하지 않는 문자열을 찾게 될 것이다.