SQL 코드카타

이름에 el이 들어가는 동물 찾기

여연찌 2024. 3. 24. 20:35
  • 이름에 el이 들어가는 동물 찾기

동물 보호소에 들어온 동물 이름 중, 이름에 "EL"이 들어가는 개의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 이름 순으로 조회해주세요. 단, 이름의 대소문자는 구분하지 않습니다.

 

# 내가 작성한 쿼리<오답>


SELECT animal_id, name
FROM animal_ins
WHERE animal_type = 'Dog' AND name IN('%EL%' , '%el%')
ORDER BY name


SELECT animal_id, name
FROM animal_ins
WHERE animal_type = 'Dog' AND name LIKE '%EL%' OR name LIKE '%el%'
ORDER BY name


# <정답>

SELECT animal_id, name
FROM 
(
SELECT *
FROM animal_ins
WHERE animal_type = 'Dog'
) a
WHERE name LIKE '%EL%' OR name LIKE '%el%'
ORDER BY name

 

+

1. IN 으로는 아무것도 조회되지 않았음

 

2. 'Dog' 이고 'EL' 이 들어갔거나 'el' 이 들어간 동물로 찾기 때문에

'Cat' 인 동물도 함께 출력되었다.

AND, OR 은 순서대로 실행됨!

 

3. 여러가지 조건을 사용 못하나 해서 서브쿼리를 사용했는데 정답이 나왔다.

MySQL 이어서 대소문자 두가지 경우만 적었어도 우연히 나왔던 것 같은데

문제에서 요청했던 사항은 대소문자가 섞여 있던 이름이기 때문에

경우의 수를 잘 생각해서 가공함수를 사용해야 할 것!

 

 

# <다른 쿼리 방식>

SELECT ANIMAL_ID, NAME 
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = 'Dog'
AND UPPER(NAME) LIKE UPPER('%el%')
ORDER BY NAME

SELECT ANIMAL_ID, NAME 
FROM ANIMAL_INS 
WHERE NAME LIKE LOWER('%EL%') AND ANIMAL_TYPE = 'DOG' 
ORDER BY NAME


SELECT ANIMAL_ID,   NAME
FROM ANIMAL_INS
WHERE NAME like '%eL%' and ANIMAL_TYPE = 'DoG'
ORDER BY 2;

 

MySQL 은 LIKE 로 검사시 좌변을 UPPER, LOWER 등으로 가공하지 않아도 조회 가능하다고 한다!

UPPER: 대문자로

LOWER: 소문자로

 

 

 


 

 

 

Q. IN 으로는 왜 조회가 되지 않았는지?

SELECT animal_id, name
FROM animal_ins
WHERE animal_type = 'Dog' AND name IN('%EL%','%el%','%El%','%eL%')
ORDER BY name

 

경우의 수가 잘못되었나 해서 IN 안에 다 넣어봤으나

아무것도 조회되지 않았다.

dog 이고 이름에 EL 이 있는

dog 이고 이름에 el 이 있는

dog 이고 이름에 El 이 있는

dog 이고 이름에 eL 이 있는

 

이렇게 4가지를 찾는게 아닌건가.. ?

 

A. 와일드카드 % 는 LIKE 랑만 사용 가능하다!!


 

대소문자는 구분하지 않느다고 하여서 'EL' , 'el' 로 단순하게 생각하였는데

문제풀이를 보니 'El' ' eL' 이렇게도 들어갈 수 있는 거였다

 

MySQL 에서는 대소문자를 가리지 않고 조회가능하다고 하나

다른 언어에서는 좌변을 가공해야 수월하게 조회할 수 있을 것 같다

UPPER, LOWER 잘 외워둬야겠다.