1. Oracle 풀이
문제설명
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문을 작성해주세요. 이때 결과는 이름 순으로 조회해주세요. 단, 이름의 대소문자는 구분하지 않습니다.
예시
SQL문을 실행하면 다음과 같이 나와야 합니다.
ANIMAL_ID | NAME |
A355753 | Elijah |
A382192 | Maxwell 2 |
풀이
오라클에서는 대소문자를 구별하여 조건이 정확하게 일치하는 데이터만 검색한다.
예를들어 NAME LIKE '%EL%'
이면 대문자 EL이 포함된 데이터만 검색한다.
소문자가 섞이거나, 소문자로만 된 데이터는 검색하지 않는다.
따라서 모든 대/소문자를 구분하지 않고 검색하기 위해서 UPPER(NAME)
을 써서 전체를 대문자로 바꿔주거나, LOWER(NAME)
을 써서 전체를 소문자로 바꿔주어야한다.
ANIMAL_TYPE 도 ANIMAL_TYPE='Dog'
로 대/소문자를 명확하게 구분해서 조건을 걸어주어야 한다.
답안 1
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE UPPER(NAME) LIKE '%EL%' AND ANIMAL_TYPE='Dog'
ORDER BY NAME;
답안 2
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE LOWER(NAME) LIKE '%el%' AND ANIMAL_TYPE='Dog'
ORDER BY NAME;
2. MySQL 풀이
풀이
MySQL은 대/소문자를 구분하지 않아서 NAME 컬럼에 'el'처럼 소문자로 포함된 경우나
ANIMAL_TYPE='DOG'에서 뒷 부분이 소문자로 'Dog'라고 저장된 데이터도 검색한다.
그래서 Upper나 Lower를 사용할 필요없이 기본 WHERE 조건으로 간편하게 검색할 수 있다.
답안
SELECT ANIMAL_ID, NAME, ANIMAL_TYPE
FROM ANIMAL_INS
WHERE NAME LIKE '%EL%' AND ANIMAL_TYPE='DOG'
ORDER BY NAME;
'DataBase > Oracle' 카테고리의 다른 글
[Oracle] 프로그래머스 - 입양 시각 구하기 (1), (2) (2) | 2021.03.03 |
---|