[HackerRank] SQL Basic Select
in Programming on SQL - HackerRank
SQL 퀴즈 중 제일 간단한 파트인 Basic Select이다. 맛보기 용으로 뚝딱하고 다음 레벨 퀴즈 도전하는 걸로 고고!
Revising the Select Query 1
문제 링크
CITY 테이블에서 인구(Population)가 100,000보다 많은 모든 미국 도시 데이터들을 조회. 미국의 국가코드(CountryCode)는 ‘USA’.
SELECT*
FROM CITY
WHERE POPULATION>=100000 AND COUNTRYCODE='USA'
Revising the Select Query 2
문제 링크
CITY 테이블에서 인구(Population)가 120,000보다 많은 모든 미국 도시 이름(Name)들을 조회. 미국의 국가코드(CountryCode)는 ‘USA’.
SELECT NAME
FROM CITY
WHERE POPULATION>=120000 AND COUNTRYCODE='USA'
Select All
문제 링크
CITY 테이블에서 모든 행에 대한 모든 열(속성)을 조회.
SELECT *
FROM CITY
Select By ID
문제 링크
CITY 테이블에서 ID가 1661인 도시의 모든 열을 조회.
SELECT *
FROM CITY
WHERE ID=1661
Japanese Cities' Attributes
문제 링크
CITY 테이블에서 모든 일본 도시의 속성을 조회. 일본의 국가코드(CountryCode)는 ‘JPN’.
SELECT *
FROM CITY
WHERE COUNTRYCODE='JPN'
Japanese Cities' Names
문제 링크
CITY 테이블에서 모든 일본 도시 이름(Name)들을 조회. 일본의 국가코드(CountryCode)는 ‘JPN’.
SELECT NAME
FROM CITY
WHERE COUNTRYCODE='JPN'
Weather Observation Station1
문제 링크
STATION 테이블에서 CITY와 STATE 목록을 조회.
SELECT CITY, STATE
FROM STATION
Weather Observation Station2
문제 링크
STATION 테이블에서 CITY와 STATE를 조회.
SELECT CITY, STATE
FROM STATION
Weather Observation Station3
문제 링크
STATION 테이블에서 ID값이 짝수인 CITY 이름(Name)을 조회 (단, 중복된 값은 제외)
DISTINCT
: 지정한 열의 데이터가 중복될 경우 중복된 값을 제거하고 한개씩만 반환MOD(m,n)
: m을 n으로 나누었을 때 나머지를 반환
SELECT DISTINCT CITY
FROM STATION
WHERE MOD(ID,2)=0
Weather Observation Station4
문제 링크
STATION 테이블에서 CITY 이름의 총 개수와 중복된 CITY 이름을 제외한 개수의 차이값을 조회.
SELECT COUNT(CITY)-COUNT(DISTINCT CITY) AS DIFF
FROM STATION
Weather Observation Station5
문제 링크
STATION 테이블에서 가장 짧은 CITY 이름과 가장 긴 CITY 이름과 각각의 길이(ex. 이름의 문자수)를 조회. 만약 가장 짧거나 긴 이름을 가진 도시가 두 개 이상인 경우 알파벳 순으로 선택했을 때 가장 먼저 나오는 것으로 선택.
- 이 문제는 나름 헤맸다…
- HANA SQL은
TOP 1
을 통해 첫 번째 행을 추출할 수 있는데 MySQL은LIMIT 1
을 사용해야한다. - ORDER BY에서
DESC
는 내림차순(큰 값부터 작은 값 쪽으로의 순서)이고ASC
는 오름차순(작은 값부터 큰 값 쪽으로의 순서)이다.
(1) 가장 긴 CITY 이름과 길이
SELECT CITY, LENGTH(CITY) AS LEN
FROM STATION
ORDER BY LENGTH(CITY) DESC, CITY ASC
LIMIT 1
(2) 가장 짧은 CITY 이름과 길이
SELECT CITY, LENGTH(CITY) AS LEN
FROM STATION
ORDER BY LENGTH(CITY), CITY ASC
LIMIT 1
Weather Observation Station6
문제 링크
STATION 테이블에서 CITY 이름이 모음(i.e. a, e, i, o, u)으로 시작하는 것만 조회.
중복없이 출력할 것.
SOL1) SUBSTR 답안
SUBSTR("문자열","시작위치","길이")
: 문자단위로 시작위치와 자를 길이를 지정하여 문자열을 자름
SELECT DISTINCT CITY
FROM STATION
WHERE SUBSTR(CITY, 1, 1) IN ('A', 'E', 'I', 'O', 'U')
SOL2) LIKE 답안
WHERE [컬럼명] LIKE [조건]
: 쿼리문 WHERE절에 주로 사용되며 부분적으로 일치하는 칼럼을 찾을때 사용- [조건]에 들어가는 것은 아래와 같다.
-
: 글자 숫자를 정해줌 (ex. 컬럼명 LIKE ‘홍_동’)%
: 글자 숫자를 정해주지 않음 (ex. 컬럼명 LIKE ‘홍%’)- 예시 참고
- A로 시작하는 문자 찾기 : ‘A%’
- A로 끝나는 문자 찾기 : ‘%A’
- A를 포함하는 문자 찾기 : ‘%A%’
- A로 시작하는 두글자 문자 찾기 : ‘A_’
- 첫번째 문자가 ‘A’가 아닌 모든 문자열 찾기 : ‘[^A]’
SELECT DISTINCT CITY
FROM STATION
WHERE CITY LIKE 'A%' OR CITY LIKE 'E%' OR # A% = A로 시작하는 문자를 찾기
CITY LIKE 'I%' OR CITY LIKE 'O%' OR CITY LIKE 'U%';
SOL3) REGEXP 답안
REGEXP
연산자 : 정규 표현식을 토대로 하는 패턴 매칭 연산을 제공
SELECT DISTINCT CITY
FROM STATION
WHERE CITY REGEXP '^[aeiou]'
Weather Observation Station7
문제 링크
STATION 테이블에서 CITY 이름이 모음(i.e. a, e, i, o, u)으로 끝나는 것만 조회. 중복없이 출력할 것.
SOL1) SUBSTR 답안
SELECT DISTINCT CITY
FROM STATION
WHERE SUBSTR(CITY, -1, 1) IN ('A', 'E', 'I', 'O', 'U')
SOL2) REGEXP 답안
SELECT DISTINCT CITY FROM STATION
WHERE CITY REGEXP '[aeiou]$'
Weather Observation Station8
문제 링크
STATION 테이블에서 CITY 이름이 모음(i.e. a, e, i, o, u)으로 시작하고 끝나는 것을 조회. 중복없이 출력할 것.
SOL1) SUBSTR 답안
SELECT DISTINCT CITY
FROM STATION
WHERE SUBSTR(CITY, -1, 1) IN ('A', 'E', 'I', 'O', 'U') AND SUBSTR(CITY, 1, 1) IN ('A', 'E', 'I', 'O', 'U')
SOL2) REGEXP 답안
SELECT DISTINCT CITY
FROM STATION
WHERE CITY REGEXP '^[aeiou]' AND CITY REGEXP '[aeiou]$'
Weather Observation Station9
문제 링크
STATION 테이블에서 CITY 이름이 모음(i.e. a, e, i, o, u)으로 시작하지 않는 것만 조회. 중복없이 출력할 것.
SOL1) SUBSTR 답안
SELECT DISTINCT CITY
FROM STATION
WHERE SUBSTR(CITY, 1, 1) NOT IN ('A', 'E', 'I', 'O', 'U')
SOL2) LIKE 답안
SELECT DISTINCT CITY
FROM STATION
WHERE NOT (CITY LIKE 'A%' OR CITY LIKE 'E%' OR
CITY LIKE 'I%' OR CITY LIKE 'O%' OR CITY LIKE 'U%')
SOL3) REGEXP 답안
SELECT DISTINCT CITY FROM STATION
WHERE CITY NOT REGEXP '^[aeiou]'
Weather Observation Station10
문제 링크
STATION 테이블에서 CITY 이름이 모음(i.e. a, e, i, o, u)으로 끝나지 않는 것만 조회. 중복없이 출력할 것.
SOL1) SUBSTR 답안
SELECT DISTINCT CITY
FROM STATION
WHERE SUBSTR(CITY, -1, 1) NOT IN ('A', 'E', 'I', 'O', 'U')
SOL2) REGEXP 답안
SELECT DISTINCT CITY FROM STATION
WHERE CITY NOT REGEXP '[aeiou]$'
Weather Observation Station11
문제 링크
STATION 테이블에서 CITY 이름이 모음(i.e. a, e, i, o, u)으로 시작하지 않거나 끝나지 않는 것을 조회. 중복없이 출력할 것.
SOL1) SUBSTR 답안
SELECT DISTINCT CITY
FROM STATION
WHERE SUBSTR(CITY, -1, 1) NOT IN ('A', 'E', 'I', 'O', 'U') OR SUBSTR(CITY, 1, 1) NOT IN ('A', 'E', 'I', 'O', 'U')
SOL2) REGEXP 답안
SELECT DISTINCT CITY
FROM STATION
WHERE CITY NOT REGEXP '^[aeiou]' OR CITY NOT REGEXP '[aeiou]$'
Weather Observation Station12
문제 링크
STATION 테이블에서 CITY 이름이 모음(i.e. a, e, i, o, u)으로 시작하지 않고 끝나지 않는 것을 조회. 중복없이 출력할 것.
SOL1) SUBSTR 답안
SELECT DISTINCT CITY
FROM STATION
WHERE SUBSTR(CITY, -1, 1) NOT IN ('A', 'E', 'I', 'O', 'U') AND SUBSTR(CITY, 1, 1) NOT IN ('A', 'E', 'I', 'O', 'U')
SOL2) REGEXP 답안
SELECT DISTINCT CITY
FROM STATION
WHERE CITY NOT REGEXP '^[aeiou]' AND CITY NOT REGEXP '[aeiou]$'
Higher Than 75 Marks
문제 링크
STUDNETS 테이블에서 점수(MARKS)가 75점보다 큰 학생들의 이름을 조회. 이름(NAME)에서 마지막 3문자를 기준으로 정렬하고 만약 마지막 3문자가 같은 학생이 두 명 이상 있으면(i.e.: Bobby, Robby, etc.) ID를 기준으로 증가하는 순으로 정렬.
SELECT NAME
FROM STUDENTS
WHERE MARKS>75
ORDER BY SUBSTR(NAME,-3) ASC, ID ASC
Employee Names
문제 링크
EMPLOYEE 테이블에서 모든 직원들의 이름을 알파벳 순서대로(A→Z) 조회.
SELECT NAME
FROM EMPLOYEE
ORDER BY NAME
Employee Salaries
문제 링크
EMPLOYEE 테이블에서 month 값이 10(달)보다 작으면서 급여(SALARY )가 2,000$보다 큰 모든 직원들의 이름을 조회. EMPLOYEE_ID 기준 오름차순으로 정렬.
SELECT NAME
FROM EMPLOYEE
WHERE SALARY > 2000 AND MONTHS < 10
ORDER BY EMPLOYEE_ID