[프로그래머스 SQL 고득점 Kit] SELECT

페리·2021년 5월 2일
0
post-thumbnail

요즘 코딩테스트에서는 SQL 문을 테스트하는 곳이 많다.
프로그래머스가 깔끔하게 구성이 되어있어서 프로그래머스부터 시작하게 되었다.

첫번째 파트는 SELECT로, 나열되어있는 데이터를 조회하는 파트이다.
조회할 때에도 각 조건에 따라 달라지기 때문에 쉽지만, 꼭 알아둬야하는 파트이다.

데이터에 대한 설명은 다음과 같다.

데이터 설명
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.


이 데이터를 바탕으로 문제를 풀어나가도록 한다.

1. 모든 레코드 조회하기
동물 보호소에 들어온 모든 동물의 정보를 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.

설명할 것이 없다.

SELECT * FROM ANIMAL_INS;

2. 역순 정렬하기
동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 ANIMAL_ID 역순으로 보여주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.

정렬을 하기 위해서는 order by [정렬대상] 를 사용해야 한다. 기본적으로 asc, 즉 오름차순이지만 내림차순으로 하고 싶을 때에는 desc를 사용한다.

SELECT NAME, DATETIME from ANIMAL_INS order by ANIMAL_ID desc;

3. 아픈 동물 찾기
동물 보호소에 들어온 동물 중 아픈 동물의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요. 다음과 같이 출력되어야 합니다.

이 문제는 데이터를 조건에 따라 뽑아내는 파트이다. where 이 처음으로 등장한다.
아픈 동물의 상태는 INTAKE_CONDITION에서 "Sick"인 동물을 찾으면 된다.

SELECT ANIMAL_ID, NAME from ANIMAL_INS where INTAKE_CONDITION = "Sick";

4. 어린 동물 찾기
동물 보호소에 들어온 동물 중 젊은 동물의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요. 다음과 같이 출력되어야 합니다.

젊은 동물이 무엇을 의미하는지 처음에 이해를 하지못해서 헤맸다.
젊은 동물은 INTAKE_CONDITION이 "Aged"가 아닌 동물을 의미하는 것이었다.

SELECT ANIMAL_ID, NAME from ANIMAL_INS where INTAKE_CONDITION != "Aged";

5. 동물의 아이디와 이름
동물 보호소에 들어온 모든 동물의 아이디와 이름을 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.

이것도 마찬가지로 ANIMAL_ID 순서대로 조회하는 것이기 때문에 정렬이다.

SELECT ANIMAL_ID, NAME from ANIMAL_INS order by ANIMAL_ID;

6. 여러 기준으로 정렬하기
동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요. 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다. 다음과 같이 출력되어야 합니다.

2개 이상의 정렬 기준이 존재하는 문제였다.
먼저 이름 순서, 그리고 보호를 나중에 시작한 순서라고 하면 DATETIME이 역순이 되도록 정렬하면 된다.

SELECT ANIMAL_ID, NAME, DATETIME from ANIMAL_INS order by NAME, DATETIME desc;

7. 상위 n개 레코드
동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요. 다음과 같이 출력되어야 합니다. (보호소에 가장 먼저 들어온 동물은 한마리 인 경우만 테스트 케이스로 주어집니다.)

이 문제는 정렬된 데이터 중에서 상위 1개의 데이터를 출력해야 한다.
limit a, b는 "a index 부터 b개"를 의미한다.
다르게는 limit 1로도 한개 출력하기가 가능하다.

SELECT NAME from ANIMAL_INS order by DATETIME limit 1;
or
SELECT NAME from ANIMAL_INS order by DATETIME limit 0, 1;

0개의 댓글

관련 채용 정보