본문으로 바로가기

[프로그래머스] Oracle : SELECT

category 알고리즘/SQL 2022. 1. 6. 15:14
728x90

 

모든 레코드 조회하기

 

~순으로 정렬을 하기 위해서는 ORDER BY를 이용해야 하며, ANIMAL_ID순으로의 정렬이므로

아래와 같이 입력하면 된다.

SELECT * FROM ANIMAL_INS ORDER BY ANIMAL_ID;

 

 

역순 정렬하기

 

SELECT 뒤에 조회할 행인 이름과 보호 시작일을 기입하고, 역순으로의 정렬이므로 DESC를 이용한다.

기본형인 ASC는 순차정렬로 생략이 가능하다.

SELECT NAME,DATETIME FROM ANIMAL_INS ORDER BY ANIMAL_ID DESC;

 

아픈 동물 찾기

 

동물 중에서 아픈 동물에 해당하는 동물은 INTAKE_CONDITION이 Sick인 경우이다.

따라서 조건에 해당하는 WHERE절을 사용한 뒤, 아이디 순으로 조회이므로 ORDER BY 1을 사용한다.

참고로 ORDER BY 뒤에 오는 숫자는 조회하는 행의 순서를 뜻하므로 ORDER BY 1==ORDER BY ANIMAL_ID이다.

SELECT ANIMAL_ID,NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION='Sick' ORDER BY 1;

 

 

어린 동물 찾기

 

동물 중 젊은 동물은 INTAKE_CONDITION이 Aged가 아닌 경우라고 명시되어 있으므로

WHERE문 조건에 WHERE INTAKE_CONDITION!=Aged로 표시한다.

SELECT ANIMAL_ID,NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION!='Aged' ORDER BY 1;

 

 

동물의 아이디와 이름

 

동물의 아이디와 이름을 조회한 후, ANIMAL_ID순으로 조회는 즉 아이디 순으로 조회한다는 의미이므로

첫번째 행을 뜻하는 ORDER BY 1으로 나타낼 수 있다.

SELECT ANIMAL_ID,NAME FROM ANIMAL_INS ORDER BY 1;

 

 

여러 기준으로 정렬하기

 

이름 순으로 먼저 조회하고 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 한다는 말은

즉, 이름이 같은 경우 보호 시작일을 내림차순으로 정렬한다는 뜻이다.

여러 기준으로 정렬할 때는 처음에 정렬하려는 행과 차순(오름차순, 내림차순)을 쓰고

콤마(,) 이후에 작성해주면 된다.

SELECT ANIMAL_ID,NAME,DATETIME FROM ANIMAL_INS ORDER BY 2 asc, 3 desc;

 

 

상위 n개 레코드

 

가장 먼저 들어온 동물을 조회하려면 MIN(DATETIME)을 이용하여 SELECT MIN(DATETIME) FROM ANIMAL_INS

구문을 이용하면 된다. 다만 이렇게되면 NAME만을 따로 조회할 수 없기에 서브 쿼리문을 이용하였다.

단일 행의 반환값이므로 WHERE문의 단일행 연산자(>, >=, =, <=, <, <>, ^=, !=)를 사용한다.

 

SELECT NAME FROM ANIMAL_INS WHERE DATETIME = (SELECT MIN(DATETIME) FROM ANIMAL_INS);

 

728x90