TOP

SQL 강의 5. 와일드카드 및 정규식(LIKE)

데이터를 필터링하려면 조건과 정확히 일치하는 항목이 아닌 대략적인 값을 기준으로 샘플링해야 하는 경우가 많습니다. 즉, 예를 들어 이름이 특정 패턴(정규 표현식)과 일치하거나 특정 기호나 단어를 포함하는 제품을 검색하는 경우입니다. 이러한 목적을 위해 SQL에는 대략적인 값을 찾는 LIKE 연산자가 있습니다. 이러한 패턴을 구성하려면 메타 문자(값의 일부를 검색하기 위한 특수 문자)가 사용됩니다. 즉, "퍼센트 기호"(%) 또는 별표(*), "밑줄"(_) 또는 "물음표"(?) , "대괄호"([ ]).


1. 메타문자 퍼센트 기호(%) 또는 별표(*)

예를 들어, 이름에 Skis라는 단어가 포함된 제품에만 관련된 레코드를 테이블에서 선택해 보겠습니다. 이를 위해 적절한 템플릿을 만듭니다.

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product LIKE '*Skis*'

보시다시피, DBMS는 Product 열에 Skis라는 단어가 포함된 제품이 포함된 레코드만 선택했습니다.

MS Access이 LIKE 연산자에 대해 "퍼센트 기호"(%)를 지원하지 않기 때문에 이 예에서는 별표(*) 메타 문자를 사용합니다.

2. 메타문자 밑줄(_) 또는 물음표(?)

밑줄이나 물음표는 단어의 단일 문자를 대체하는 데 사용됩니다. Bikes라는 단어의 모든 모음을 "물음표"(?)로 바꾸고 결과를 살펴보겠습니다.

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product LIKE 'B?k?s'
MS Access이 LIKE 연산자에 대해 "밑줄"(_)을 지원하지 않기 때문에 "물음표"(?) 메타 문자를 사용했습니다.

3. 메타문자 대괄호([ ])

대괄호 메타 문자([ ])는 검색할 문자 집합을 동시에 지정하는 데 사용됩니다.

SELECT * 
FROM Sumproduct 
WHERE City LIKE '[TN]*'

위 예에서는 City 필드에서 도시 이름이 문자 T 또는 N으로 시작하는 레코드를 선택했습니다.

대괄호 메타 문자([ ])는 MySQL 언어에서 지원되지 않습니다.

또한 이 경우 반대의 역할을 하는 다른 메타문자를 사용할 수도 있습니다. 느낌표(!)를 정규식에 추가해 보겠습니다. 이는 "같지 않음"(MS Access의 경우) 또는 전원 기호(^)(다른 DBMS의 경우)를 의미합니다.

SELECT * 
FROM Sumproduct 
WHERE City LIKE '[!TN]*'

즉, 우리가 만든 마지막 쿼리는 다음과 같이 읽혀집니다. Sumproduct 테이블에서 모든 열을 선택하고 City 필드의 도시 이름이 문자 T 또는 N으로 시작하지 않는 레코드만 선택합니다. "대괄호" 메타 문자의 문자 수는 텍스트의 한 위치에만 해당됩니다.

우리가 이미 알고 있는 NOT 연산자를 사용하면 비슷한 결과를 얻을 수 있지만 느낌표(!)를 사용하면 레코드가 더 짧아집니다.