Query the list of CITY names starting with vowels (i.e., a, e, i, o, or u) from STATION. Your result cannot contain duplicates.
SELECT CITY
FROM STATION
WHERE CITY like 'a%'
OR CITY like 'i%'
OR CITY like 'u%'
OR CITY like 'e%'
OR CITY like 'o%'
select distinct city
from station
where regexp_like (city, '^[aeiouAEIOU]');
----마지막에 모음이 들어간 정규식
select distinct city
from station
where regexp_like (city, '[aeiouAEIOU]$');
select distinct city
from station
where REGEXP_LIKE(lower(city),'^[ueoai].*[ueoai]$');
Select distinct city
from station
where city regexp_like '^(?![AEIOU]).*';
select distinct(city)
from station
where substr(city,1,1) in ('A','I','U','E','O')
order by city asc;
Oracle SQL에서 LIKE와 REGEXP_LIKE는 두 가지 서로 다른 문자열 패턴 매칭 함수입니다. 이 두 함수의 주요 차이점은 패턴 매칭에 사용되는 문법과 기능에 있습니다.
- LIKE:
- LIKE는 SQL에서 가장 기본적인 문자열 패턴 매칭 함수 중 하나입니다.
- %와 _와 같은 와일드카드 문자를 사용하여 간단한 패턴을 지정할 수 있습니다.
- %는 0개 이상의 문자열을 대체하고 _는 한 문자를 대체합니다.
- 예: 'ABC%'는 "ABC"로 시작하는 모든 문자열을 반환하고, 'A_C'는 첫 번째 문자가 "A"이고 세 번째 문자가 "C"인 문자열을 반환합니다.
- REGEXP_LIKE:
- REGEXP_LIKE는 정규 표현식을 사용하여 복잡한 패턴을 정의하는 데 사용됩니다.
- 정규 표현식은 문자열 패턴을 더 유연하게 정의할 수 있으며, 다양한 매칭 규칙을 적용할 수 있습니다.
- 예: '^(A|E|I|O|U)'는 모음으로 시작하는 모든 문자열을 반환합니다.
어떤 함수를 사용해야 할지 결정하는 데 영향을 미치는 요인은 다음과 같습니다:
- 패턴 복잡성: 단순한 패턴을 찾을 때는 LIKE가 충분할 수 있습니다. 그러나 복잡한 패턴이 필요한 경우 REGEXP_LIKE를 사용하는 것이 유용합니다.
- 성능: LIKE는 간단한 패턴에서 일반적으로 빠릅니다. REGEXP_LIKE는 더 복잡한 정규 표현식을 처리하기 때문에 처리 시간이 더 오래 걸릴 수 있습니다.
- 문자열 검색의 범위: LIKE는 대부분의 일반적인 문자열 매칭 작업에 적합하지만 특정 문자열 규칙을 정의해야 하는 경우 REGEXP_LIKE를 사용해야 합니다.
- 문자열 패턴의 유연성: 정규 표현식은 보다 유연한 패턴 정의를 가능하게 하며, 패턴의 다양한 조합을 처리하는 데 도움이 됩니다.
일반적으로, 간단한 패턴 검색에는 LIKE를 사용하고, 보다 복잡한 패턴 검색 또는 정확한 패턴 규칙이 필요한 경우 REGEXP_LIKE를 사용하는 것이 좋습니다. 선택적으로, 데이터베이스에서 LIKE 연산이 최적화되어 있을 수 있으므로, 성능 문제에 대한 고려도 필요합니다.
LIKE와 REGEXP_LIKE의 구체적인 차이점은 다음과 같습니다:
- 문법 및 와일드카드:
- LIKE는 와일드카드 문자 %와 _를 사용하여 간단한 패턴 매칭을 수행합니다.
- REGEXP_LIKE는 정규 표현식을 사용하여 더 복잡한 패턴을 정의합니다. 정규 표현식은 특수 문자와 메타 문자를 사용하여 패턴을 매치합니다.
- 패턴 복잡성:
- LIKE는 간단한 패턴을 처리하는 데 유용합니다. 예를 들어, 특정 문자열로 시작하거나 끝나는 경우에 사용할 수 있습니다.
- REGEXP_LIKE는 더 복잡한 패턴을 처리하는 데 유용합니다. 예를 들어, 특정 문자의 반복 또는 대소문자 구분 여부를 포함하는 패턴을 처리할 수 있습니다.
- 성능:
- LIKE는 일반적으로 간단한 패턴 검색에 대해 빠릅니다. 데이터베이스 시스템은 LIKE 연산을 최적화하는 데 특화되어 있습니다.
- REGEXP_LIKE는 더 복잡한 정규 표현식을 처리해야 하므로 처리 시간이 더 오래 걸릴 수 있습니다.
- 문자열 검색의 범위:
- LIKE는 대부분의 문자열 매칭 작업에 적합합니다. 간단한 문자열 패턴을 찾을 때 사용됩니다.
- REGEXP_LIKE는 더 복잡한 문자열 패턴을 정의하고 특정 문자열 규칙을 적용해야 하는 경우 사용됩니다.
- 정확성 및 유연성:
- LIKE는 정확한 패턴 매칭을 위한 간단한 조건 검색에 사용됩니다.
- REGEXP_LIKE는 유연성이 높아 정확한 패턴 규칙을 정의하고 다양한 조건을 처리하는 데 도움이 됩니다.
요약하면, LIKE는 간단하고 빠른 패턴 매칭에 적합하며, REGEXP_LIKE는 더 복잡하고 정확한 패턴 규칙을 적용하려는 경우 사용됩니다. 선택적으로, 데이터베이스 시스템의 성능 최적화를 고려하여 적절한 함수를 선택해야 합니다.
문자열 검색에는 LIKE, REGEXP_LIKE, SUBSTR 등 다양한 함수가 있으며, 어떤 함수가 가장 효율적인지는 사용 사례에 따라 다를 수 있습니다. 각 함수의 효율성은 다음과 같은 요소에 의해 좌우됩니다:
- 검색 대상 데이터 양: 검색 대상 데이터 양이 많을수록 효율적인 검색 방법을 선택하는 것이 중요합니다. 작은 데이터 집합에서는 함수 선택이 크게 중요하지 않을 수 있습니다.
- 검색 패턴의 복잡성: 검색하려는 패턴이 얼마나 복잡한지 고려해야 합니다. 간단한 패턴의 경우 LIKE 또는 SUBSTR와 같은 간단한 함수를 사용하는 것이 일반적으로 더 효율적입니다. 더 복잡한 패턴이 필요한 경우 REGEXP_LIKE를 고려할 수 있습니다.
- 데이터베이스 최적화: 데이터베이스 관리 시스템(DBMS)에 따라 각 함수의 성능 최적화 수준이 다를 수 있습니다. 일부 DBMS는 LIKE 연산을 최적화하는 데 특화되어 있을 수 있으므로 이를 고려해야 합니다.
- 인덱스 사용: 검색 작업을 빠르게 만들기 위해 적절한 인덱스를 사용하는 것이 중요합니다. 인덱스는 데이터베이스 엔진이 검색을 최적화하는 데 도움이 됩니다.
- 쿼리의 복잡성: 전체 쿼리의 복잡성과 함께 검색 작업이 어떻게 통합되는지 고려해야 합니다. 다른 조건과 연결된 검색 조건이 있을 경우 쿼리 최적화에 영향을 미칠 수 있습니다.
일반적으로 말하면:
- 간단한 문자열 검색 패턴이 있는 경우, LIKE 또는 SUBSTR를 사용하는 것이 성능 면에서 더 효율적일 수 있습니다.
- 복잡한 패턴이 필요하거나 정확한 패턴 규칙을 정의해야 하는 경우 REGEXP_LIKE를 사용하는 것이 더 유용할 수 있습니다.
- 문자열의 일부를 추출해야 할 때 SUBSTR를 사용하면 됩니다.
그러나 항상 적절한 인덱스를 사용하고 쿼리를 최적화하는 데 신경을 써야 합니다. 최적의 성능을 얻기 위해서는 실제 사용 사례와 데이터베이스 시스템의 특성을 고려해야 합니다.
정규식 참고:
'컴퓨터 과학 > 데이터베이스' 카테고리의 다른 글
case when 표현식 사용법 (0) | 2023.10.07 |
---|---|
HackerRank - SQL문제풀이 (0) | 2023.10.06 |
Mappers and Reducers 구현 (Map Reduce Advanced - Count number of friends) (0) | 2023.10.05 |
Mapper 와 Reducer (0) | 2023.10.05 |
OLAP Aggregation (0) | 2023.10.05 |