
📑 1. 문제설명


❌ 실패한 시도
이름의 대소문자를 구별하지 않는다는 부분이 문제의 핵심
1차 시도 실패
WHERE 절에서 `LOWER(NAME)` 해 주었으나 틀림
쿼리는 돌아가고 결과는 나오지만 결국 WHERE절에서 LOWER()과 LIKE를 함께 쓴 것은 불필요한 처리를 하는 것이다.
MySQL에서 LIKE 연산자는 기본적으로 대소문자를 구별하지 않는다.
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE LOWER(ANIMAL_TYPE) = 'dog' AND LOWER(NAME) LIKE '%el%'
ORDER BY NAME DESC;
2차 시도 실패
이번에는 ORDER BY절에 LOWER() 함수를 써서 정렬했더니 틀렸다고 함.
WHERE 절이랑 정렬이랑 별개니까 정렬에는 LOWER() 을 해줘야 한다 생각해서 아래처럼 코드를 짰다.
하지만 MySQL 에서는 이렇게 하지 않아도 된다.
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = 'Dog' AND NAME LIKE '%el%'
ORDER BY LOWER(NAME) DESC;
💡 정답코드
MySQL
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = "Dog" AND NAME LIKE "%EL%"
ORDER BY NAME ASC
Oracle
Oracle에서 문자열 대소문자 구분 없이 비교하려면 UPPER() 또는 LOWER()를 사용하여 데이터와 조건을 동일한 형태로 변환해야 한다.
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE UPPER(ANIMAL_TYPE) = 'DOG' AND UPPER(NAME) LIKE '%EL%'
ORDER BY NAME ASC;
📌 TMI
MySQL에서 LIKE 연산자는 기본적으로 대소문자를 구별하지 않는다.
또한 정렬(ORDER BY)에서 대소문자는 ASCII 순서에 따라 정렬된다.
예시
Bella
Charlie
bella
charlie
A < B < C ... < Z < a < b < c ... < z
'Algorithm > SQL테스트' 카테고리의 다른 글
[프로그래머스] (MySQL) 조건별로 분류하여 주문상태 출력하기 (9) | 2025.01.18 |
---|---|
[프로그래머스] (MySQL) 중성화 여부 파악하기 문제풀이 (14) | 2025.01.18 |
[프로그래머스] (MySQL) 자동차 대여 기록에서 장기/단기 대여 구분하기 외 1 문제 풀이 (3) | 2025.01.16 |
[프로그래머스] (MySQL) 조건에 부합하는 중고거래 상태 조회하기 (4) | 2025.01.14 |
[프로그래머스] (MySQL) 자동차 평균 대여 기간 구하기 문제 풀이 (10) | 2025.01.14 |

📑 1. 문제설명


❌ 실패한 시도
이름의 대소문자를 구별하지 않는다는 부분이 문제의 핵심
1차 시도 실패
WHERE 절에서 LOWER(NAME)
해 주었으나 틀림
쿼리는 돌아가고 결과는 나오지만 결국 WHERE절에서 LOWER()과 LIKE를 함께 쓴 것은 불필요한 처리를 하는 것이다.
MySQL에서 LIKE 연산자는 기본적으로 대소문자를 구별하지 않는다.
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE LOWER(ANIMAL_TYPE) = 'dog' AND LOWER(NAME) LIKE '%el%' ORDER BY NAME DESC;
2차 시도 실패
이번에는 ORDER BY절에 LOWER() 함수를 써서 정렬했더니 틀렸다고 함.
WHERE 절이랑 정렬이랑 별개니까 정렬에는 LOWER() 을 해줘야 한다 생각해서 아래처럼 코드를 짰다.
하지만 MySQL 에서는 이렇게 하지 않아도 된다.
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE ANIMAL_TYPE = 'Dog' AND NAME LIKE '%el%' ORDER BY LOWER(NAME) DESC;
💡 정답코드
MySQL
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE ANIMAL_TYPE = "Dog" AND NAME LIKE "%EL%" ORDER BY NAME ASC
Oracle
Oracle에서 문자열 대소문자 구분 없이 비교하려면 UPPER() 또는 LOWER()를 사용하여 데이터와 조건을 동일한 형태로 변환해야 한다.
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE UPPER(ANIMAL_TYPE) = 'DOG' AND UPPER(NAME) LIKE '%EL%' ORDER BY NAME ASC;
📌 TMI
MySQL에서 LIKE 연산자는 기본적으로 대소문자를 구별하지 않는다.
또한 정렬(ORDER BY)에서 대소문자는 ASCII 순서에 따라 정렬된다.
예시
Bella Charlie bella charlie
A < B < C ... < Z < a < b < c ... < z
'Algorithm > SQL테스트' 카테고리의 다른 글
[프로그래머스] (MySQL) 조건별로 분류하여 주문상태 출력하기 (9) | 2025.01.18 |
---|---|
[프로그래머스] (MySQL) 중성화 여부 파악하기 문제풀이 (14) | 2025.01.18 |
[프로그래머스] (MySQL) 자동차 대여 기록에서 장기/단기 대여 구분하기 외 1 문제 풀이 (3) | 2025.01.16 |
[프로그래머스] (MySQL) 조건에 부합하는 중고거래 상태 조회하기 (4) | 2025.01.14 |
[프로그래머스] (MySQL) 자동차 평균 대여 기간 구하기 문제 풀이 (10) | 2025.01.14 |