Oracle SQL 실전문제 풀이 (2)

반응형

https://www.hackerrank.com/challenges/weather-observation-station-6/problem 

크게 어려운 문제는 아니나 like 함수의 무분별한 사용금지를 리마인드하고자 포스팅하기로 했다.

다음과 같은 테이블에서 CITY 칼럼 중 모음으로 시작하는 데이터만 출력하려면 어떻게 해야 할까? 참고로 도시명이기 때문에 대문자로 시작한다. 단 중복인 데이터는 제외할 것!

STATION
Field Type
ID Number
CIYT Varchar2(21)
이하 생략

 

방법1 : 무지성 LIKE 조건 사용하기

- select distinct CITY from STATION 
where CITY like 'A%'
or CITY like 'E%'
or CITY like 'I%'
or CITY like 'O%'
or CITY like 'U%';

처음 배운 초보자라면 제 1감으로 떠오르는 풀이일 듯싶다. 하지만 생긴것도 예쁘지 않고 코드가 너무 긴 것 같으니 다른 방법을 사용하여 코드를 줄여보자.

한편 이 문제에서는 해당하지 않지만 like '%str', '%str%' 과 같이 문자열 앞에 %조건을 삽입할 경우 full scan을 사용해서 비효율적이라고 한다. 따라서 like 조건 말고 다른 방법도 알아둘 필요가 있을 것 같다.

 

방법2 : substr 함수와 in list 사용하기

- select distinct CITY from STATION 
where substr(CITY,1,1) in ('A', 'E', 'I', 'O', 'U')

- in은 OR 기능과 '='을 여러개 연결한 것과 동일하다고 한다. '=' 연산자를 활용하기 위해 CITY에 substr 함수를 활용하여 맨 앞글자만 추출하였다. 방법2와 의미는 완전히 같지만 훨씬 깔끔해서 마음이 편안해진다.

 

 

이번기회에 SQL like 튜닝에 대해서 공부를 했는데, %문자열% 의 경우 인덱스같은 다양한 해결방법이 있다는 것을 알게 되었다. 해커랭크 상에서는 애초에 오라클에서 제공하는 기본 dba 테이블이 없어서 실행해보지는 못했지만, 지금은 SQL 다루는 실력 키우는 것에 만족하고 성능 튜닝은 나중에 더 공부해봐야겠다.