본문 바로가기
DEVLOG/SQL

[SQL 기초] SELECT, ORDER BY 예제를 통해 알아보자

2019. 10. 16.
반응형

SELECT, ORDER BY

SQL 기초 첫 번째 포스팅으로 SELECT와 ORDER BY에 대해 예제를 통해 알아보겠습니다.

아래 예제는 프로그래머스 SQL 문제입니다.

문제 설명

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

NAME TYPE NULLABLE
ANIMAL_ID VARCHAR(N) FALSE
ANIMAL_TYPE VARCHAR(N) FALSE
DATETIME DATETIME FALSE
INTAKE_CONDITION VARCHAR(N) FALSE
NAME VARCHAR(N) TRUE
SEX_UPON_INTAKE VARCHAR(N) FALSE

 

모든 레코드 조회하기

동물 보호소에 들어온 모든 동물의 정보ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요. 

ANIMAL_ID ANIMAL_TYPE DATETIME INTAKE_CONDITION NAME SEX_UPON_INTAKE
A349996 Cat 2018-01-22 14:32:00 Normal Sugar Neutered Male
A350276 Cat 2017-08-13 13:50:00 Normal Jewel Spayed Female
A350375 Cat 2017-03-06 15:01:00 Normal Meo Neutered Male
A352555 Dog 2014-08-08 04:20:00 Normal Harley Spayed Female
SELECT * FROM ANIMAL_INS ORDER BY ANIMAL_ID;

 

 

 

테이블의 모든 컬럼 정보를 가져올 때는 *을 이용합니다. 요구사항에서 ANIMAL_ID순으로 조회하라고 적혀있는데, 이때 ORDER BY구문을 이용해 ANIMAL_ID를 순서대로 조회할 수 있습니다.

 

역순 정렬하기

동물 보호소에 들어온 모든 동물의 이름보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 ANIMAL_ID 역순으로 보여주세요.

SELECT NAME, DATETIME FROM ANIMAL_INS ORDER BY ANIMAL_ID DESC;

요구사항에서 이름, 보호 시작일을 조회하라고 했습니다. 따라서 위 문제와 달리 * 대신 NAME, DATETIME을 가져오도록 합니다.

앞의 문제에서처럼 오름차순으로 정렬할 때는 단지 ORDER BY를 이용하면 되지만, 역순으로 조회할 경우 DESC를 붙여주어야 합니다.

 

아픈 동물 찾기

동물 보호소에 들어온 동물 중 아픈 동물아이디이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.

ANIMAL_ID ANIMAL_TYPE DATETIME INTAKE_CONDITION NAME SEX_UPON_INTAKE
A365172 Dog 2014-08-26 12:53:00 Normal Diablo Neutered Male
A367012 Dog 2015-09-16 09:06:00 Sick Miller Neutered Male
A365302 Dog 2017-01-08 16:34:00 Aged Minnie Spayed Female
A381217 Dog 2017-07-08 09:41:00 Sick Cherokee Neutered Male
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION="Sick" ORDER BY ANIMAL_ID;

아픈 동물은 INTAKE_CONDITION이 Sick인 경우로, WHERE를 이용해 특정 조건의 데이터를 조회할 수 있습니다.

 

 

 

어린 동물 찾기

동물 보호소에 들어온 동물 중 젊은 동물아이디이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.

ANIMAL_ID ANIMAL_TYPE DATETIME INTAKE_CONDITION NAME SEX_UPON_INTAKE
A365172 Dog 2014-08-26 12:53:00 Normal Diablo Neutered Male
A367012 Dog 2015-09-16 09:06:00 Sick Miller Neutered Male
A365302 Dog 2017-01-08 16:34:00 Aged Minnie Spayed Female
A381217 Dog 2017-07-08 09:41:00 Sick Cherokee Neutered Male
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE NOT INTAKE_CONDITION='Aged' ORDER BY ANIMAL_ID

요구 사항에서 젊은 동물은 INTAKE_CONDITION이 Sick이 아닌 경우를 말합니다.

따라서 WHERE NOT을 통해 젊은 동물만 조회할 수 있습니다.

 

동물의 아이디와 이름

동물 보호소에 들어온 모든 동물의 아이디이름ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요.

SELECT ANIMAL_ID, NAME FROM ANIMAL_INS ORDER BY ANIMAL_ID;

위에서 언급했던 방법들을 통해 조회할 수 있습니다.

 

여러 기준으로 정렬하기

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

SELECT ANIMAL_ID, NAME, DATETIME FROM ANIMAL_INS ORDER BY NAME, DATETIME DESC;

여러 기준으로 정렬할 때는 ORDER BY [컬럼1], [컬럼2], ... 와 같이 쓸 수 있습니다.

이름이 같을 경우 보호를 나중에 시작한 동물을 보여주어야 하기 때문에 DATETIME은 내림차순으로 정렬하면 됩니다.

 

 

 

상위 n개 레코드

동물 보호소에 가장 먼저 들어온 동물이름을 조회하는 SQL 문을 작성해주세요.

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

 

WHERE절을 주목해서 보면 됩니다. 가장 먼저 들어온 동물을 찾는 방법은 ANIMAL_INS에서 DATETIME이 가장 작은 값을 찾는 것입니다.

반대로 가장 늦게 들어온 동물의 이름을 조회한다면 다음과 같이 쓸 수 있습니다.

SELECT NAME FROM ANIMAL_INS WHERE DATETIME = (SELECT MAX(DATETIME) FROM ANIMAL_INS)

 

 

 

[SQL 기초] SUM, MAX, MIN 예제를 통해 알아보자

[SQL 기초] SELECT, ORDER BY 예제를 통해 알아보자 SELECT, ORDER BY SQL 기초 첫 번째 포스팅으로 SELECT와 ORDER BY에 대해 예제를 통해 알아보겠습니다. 아래 예제는 프로그래머스 SQL 문제입니다. 문제 설명..

deepwelloper.tistory.com

 

 

반응형

댓글