본문 바로가기
코딩 테스트/sql

sql 11번 : 이름에 el이 들어가는 동물 찾기

by GREEN나무 2025. 4. 17.
728x90

URL : https://school.programmers.co.kr/learn/courses/30/lessons/59047

문제  

더보기

문제 설명

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

보호소에 돌아가신 할머니가 기르던 개를 찾는 사람이 찾아왔습니다. 이 사람이 말하길 할머니가 기르던 개는 이름에 'el'이 들어간다고 합니다. 동물 보호소에 들어온 동물 이름 중, 이름에 "EL"이 들어가는 개의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 이름 순으로 조회해주세요. , 이름의 대소문자는 구분하지 않습니다.

예시

예를 들어 ANIMAL_INS 테이블이 다음과 같다면

ANIMAL_ID ANIMAL_TYPE DATETIME INTAKE_CONDITION NAME SEX_UPON_INTAKE
A355753 Dog 2015-09-10 13:14:00 Normal Elijah Neutered Male
A352872 Dog 2015-07-09 17:51:00 Aged Peanutbutter Neutered Male
A353259 Dog 2016-05-08 12:57:00 Injured Bj Neutered Male
A373219 Cat 2014-07-29 11:43:00 Normal Ella Spayed Female
A382192 Dog 2015-03-13 13:14:00 Normal Maxwell 2 Intact Male

이름에 'el'이 들어가는 동물은 Elijah, Ella, Maxwell 2입니다.

이 중, 개는 Elijah, Maxwell 2입니다.

따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.

ANIMAL_ID NAME
A355753 Elijah
A382192 Maxwell 2

 


  mySQL

계획

 

select ANIMAL_ID, NAME
where NAME like "%EL%" and ANIMAL_TYPE = "Dog"
from ANIMAL_INS
order by NAME


참고, 풀이

테이블 이름이 조건보다 먼저 와야 함.


SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE NAME LIKE '%EL%' AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME;

코드 간략화하기

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = 'Dog' AND NAME LIKE '%EL%'
ORDER BY NAME;

🔍 개선 포인트

  1. 조건 순서
    ANIMAL_TYPE = 'Dog' 조건을 앞에 배치한 이유는, 일반적으로 = 조건이 LIKE보다 필터링 속도가 빠르기 때문에, 인덱스를 타는 경우 유리할 수 있어. (단, DB엔진에 따라 실행계획이 다를 수 있음)
  2. 필요 없는 부분 없음
    SELECT에서 굳이 DISTINCT도 없고, 조인도 없기 때문에 더 줄일 것도 딱히 없음.
  3. 실행 속도 개선 팁 (실제로 성능까지 개선하고 싶을 때)
    ANIMAL_TYPE이나 NAME 컬럼에 인덱스가 있다면 이 쿼리는 매우 빠르게 실행될 것임.

 

 

'코딩 테스트 > sql' 카테고리의 다른 글

sql 11번 - 여러 기준으로 정렬하기  (0) 2025.04.11
sql 10번 - 어린 동물 찾기  (1) 2025.03.29
sql 9번 - 최솟값 구하기  (0) 2025.03.29
sql 8번 - 상위 n개 레코드  (0) 2025.03.29
SQL 7번  (0) 2024.11.19