본문 바로가기
DB/SQL

[programmers] SELECT절 문제 풀기

by h_sseul 2022. 8. 16.

 

SQL 코딩테스트와 개인적인 업무 능력 향상을 위해 문제를 풀면서 했던 고민과 찾아봤던 자료 등을 기록하고자 티스토리를 만들었다.

많은 양이 아니더라도 꾸준함을 갖자!!


(MySQL 기준으로 쿼리 작성)

- 모든 레코드 조회하기

문제
출력 결과 예시

SELECT *
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

정렬 Default는 ASC(오름차순) -> 생략 가능. DESC(내림차순)

 

 

- 역순 정렬하기

SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC;

 

 

- 아픈 동물 찾기

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

아픈 동물 -> INTAKE_CONDITION이 Sick 인 경우를 뜻함

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

조건절인 WHERE절 추가

 

 

- 어린 동물 찾기

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

INTAKE_CONDITION이 Aged가 아닌 경우를 뜻함

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION <> 'Aged'
ORDER BY ANIMAL_ID;

MySQL에서 '같지 않다' 를 나타내는 조건 연산자는 <> 또는 != (연산자의 성능 차이는 없다고 함 + 오라클도 동일한 연산자 사용)

 

 

- 동물의 아이디와 이름

첫 번째 문제에선 모든 칼럼을 추출했다면, 이번 문제에선 동물의 '아이디와 이름'이라는 칼럼 지정

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

 

 

- 여러 기준으로 정렬하기

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

1. 이름을 사전순으로 정렬 -> 오름차순(ASC)

2. 보호를 나중에 시작한 동물 먼저 조회할 수 있도록 -> 내림차순(DESC)

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

 

 

- 상위 n개 레코드

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

SELECT NAME 
FROM ANIMAL_INS 
ORDER BY DATETIME
LIMIT 1;

* LIMITMySQL에서만 사용 가능

 

SELECT NAME
FROM (SELECT * 
FROM ANIMAL_INS 
ORDER BY DATETIME) 
WHERE ROWNUM < 2;

* Oracle에서는 Inline View(FROM 절에서 사용하는 서브쿼리)로 접근 (*ROWNUM 사용)

원하는 조건(보호소에 가장 먼저 들어온 동물)에 대해 상위 n개의 데이터를 추출하기 위해서는 조건에 따라 정렬이 선행되어야 하는데,

SQL 실행 순서에 따르면 정렬(Order By)은 가장 마지막에 수행된다.

따라서 서브쿼리 내에서 정렬을 끝낸 후, 이를 바탕으로 ROWNUM를 추출하면 된다.

 

  *ROWNUM : SELECT 절에 의해 추출되는 WHERE 절을 만족하는 행에 붙는 순번. 

 

❗️ROWNUM을 사용할 때 주의점❗️

ROWNUM = 1 (1개의 행 출력) = ROWNUM < 2

ROWNUM = 2 (1이 아닌 숫자에서는 0개의 행 출력)

 

 

참고

 

[MySQL] SELECT 쿼리 문법 순서 및 실행 순서

SQL 쿼리문을 작성할 때 사용되는 WHERE, GROUP BY, ORDER BY 절과 같은 구문을 실행하는데 순서가 존재합니다. 이 순서에 의해서 쿼리가 처리되고 어떻게 쿼리문을 작성하느냐에 따라 성능 차이가 발

nohriter.tistory.com

 

[Oracle] 상위 n개 데이터를 추출하는 2가지 방법

오라클에서 상위 3개, 5개, 10개, 100개 등 n개의 데이터를 뽑기 위해서는 서브 쿼리를 활용하면 쉽게 해결할 수 있다. 서브 쿼리(Inline View)를 사용하여 데이터를 먼저 정렬한 후, 원하는 개수만큼

gent.tistory.com

 

[오라클 SQL] ROWNUM - 특정 개수의 행만 조회하기, 행 번호 매기기 rownum = 2, order by rownum

[데이터베이스 SQL 완전정복 목차] 안녕하세요~ 양햄찌 블로그 주인장입니다. 운영체제, 리눅스유닉스 카테고리에 이어 데이터베이스 파트도 차근차근 이어가보려고 하는데 갈길이 머네요 ㅎㅎ

jhnyang.tistory.com

 

[오라클/ORACLE] 데이터 잘라서 보는 ROWNUM

ROWNUM ROWNUM 은 오라클 내부적으로 생성되는 가상 컬럼이다. 자료의 일부를 잘라내서 확인하는 용도로 자주 활용된다. SQL 조회 결과의 순번을 기준으로 N번째까지 가져오는 식이다. ROWNUM 함수는

change-words.tistory.com

 

 

'DB > SQL' 카테고리의 다른 글

[programmers] SELECT  (0) 2023.01.10
[programmers] JOIN 문제 풀기  (0) 2022.09.17
[programmers] IS NULL 문제 풀기  (0) 2022.09.15
[programmers] GROUP BY 문제 풀기  (0) 2022.08.24
[programmers] SUM, MAX, MIN  (0) 2022.08.18