우잉's Development

SQLite3_LIKE절과 GLOB절 본문

개발/SQLite3

SQLite3_LIKE절과 GLOB절

우잉이 2022. 1. 5. 16:15
728x90
반응형

1. LIKE 절

1-1 LIKE절을 사용한 조건부 표현식 작성

SELECT 컬럼명, ... FROM 테이블명 WHERE 컬럼 LIKE 패턴;

여기서 패턴은 퍼센트(%)와 밑줄(_)을 문자열로 조합한 값으로 작성한다. 

 

1) 퍼센트(%) : 임의의 문자 0개 이상의 문자열

예를들어 a와 b사이에 들어간 문자(ex. atb, aoyb,auuilb등)를 조회할 때는 'a%b'를 사용합니다. t로 시작하는 문자를 찾을 경우는 't%'를 사용하며 반대로 t로 끝나는 문자를 사용할 경우 '%t'입니다. 그러면 중간에 t가 들어간 문자는 어떻게 찾을 까요? 정답은 '%t%'입니다. 

 

 자! 그러면 이제 LIKE구문을 사용하여 조회해봅시다.

위와 같은 user테이블이 있으면 address가 S로 시작하는 데이터를 조회해봅시다.

이번에는 address에 e가 들어간 데이터를 조회해봅시다.

2) 밑줄( _ ) : 임의의 문자 한개

예를 들어 name이 4글자인 데이터를 조회해봅시다.

not 구문도 사용 가능합니다. 이번에 반대로 name이 4글자가 아닌 데이터를 조회하겠습니다.( %도 not구문 사용 가능)

1-2 특수문자의 이스케이프(escape)처리 방법

LIKE 절에서 퍼센트(%)와 밑줄(_)은 특별한 의미를 갖지만 특수 문자가 아닌 문자의 하나로서 이 두 문자를 사용하려는 경우에는 이스케이프 처리를 해야 한다. 이스케이프에 사용하는 문자는 임의의 문자로 지정할 수 있다. 예를 들어, 문자 달러($)를 이스케이프를 처리하는 문자로 지정하면, “$%“라고 작성하면 문자로서 %로 인식된다.

SELECT 컬럼명, ... FROM 테이블명 WHERE 컬럼 LIKE 패턴 ESCAPE 이스케이프 문자;

한번 사용해 봅시다.

먼저 foods라는 테이블을 작성하고 데이터를 추가해보겠습니다.

escape를 사용하지 않고 name에 '_'를 포함한 데이터를 조회해보겠습니다.

_ 밑줄이 없는 데이터도 포함되어 조회되었습니다. 그럼 이제 escape를 사용해보겠습니다.

 

2. GLOB절 

2-1 GLOB절을 사용한 조건부 표현식 작성

SELECT 컬럼명, ... FROM 테이블명 WHERE 컬럼 GLOB 패턴;
특수문자 설명
* 임의의 문자 0개 이상의 문자열
? 임의의 문자 1개
[abc] a or b or c 중 하나와 일치
[a-d] a에서 d까지 중 하나와 일치
  • 별표(*)은 문자 0개 이상의 임의의 문자열과 일치한다. 예를 들어, 패턴으로 a*b라고 작성되면 a로 시작하여 0개 이상의 문자가 사이에 들어가고 마지막으로 b로 끝나는 같은 다음과 문자열과 일치한다.
  • 물음표(?)은 임의의 1개의 문자와 일치한다. 예를 들어 패턴으로 a? b라고 작성되면 a로 시작하여 하나의 문자가 사이에 들어가고 마지막으로 b로 끝나는 같은 다음과 문자열과 일치한다.
  • [abc]는 괄호 안의 문자 중 하나와 일치한다. 예를 들어 패턴으로 [mk]*라고 작성되면 m 또는 k로 시작하여 임의의 길이의 문자열과 일치한다.
  • 또한 [^abc]처럼 앞에 ^를 붙이면 괄호 안의 어느 문자와도 일치하지 않는 문자와 일치한다. 예를 들어 패턴으로 [^abcde]*가 작성되면 a b c d e 이외의 문자로 시작 임의의 길이의 문자열과 일치한다.
  • 괄호는 - 를 사용하여 [a-d]와 같이 범위 지정도 할 수 있다. 이 경우 괄호 안의 첫 번째 문자에서 마지막 문자까지의 모든 문자와 일치한다. 예를 들어 패턴으로 [a-zA-Z0-9]*라고 작성되면, a에서 z 또는 A에서 Z 또는 0에서 9까지의 문자로 시작하는 임의의 길이의 문자열과 일치한다.

실제로 해보겠습니다. 먼저 전에 있던 user테이블을 drop 하고 다시 생성하여 데이터를 추가하겠습니다.

그럼 GLOB을 사용하여 screenname컬럼의 값이 b부터 시작하는 임의의 문자열과 일치하는 데이터를 조회해보겠습니다.

GLOB 절의 경우 대소문자를 구분하므로 b 또는 B로 시작하는 문자열과 일치하려는 경우에는 다음과 같이 패턴을 작성합니다.

2-2 특수 문자의 이스케이프(escape) 처리 방법

GLOB 절에서 별표(*), 물음표(?), 왼쪽 대괄호([), 오른쪽 대괄호(])의 4개의 문자는 특별한 의미를 갖지만, 특수 문자가 아닌 문자의 하나로서 이 4개의 문자를 사용하려는 경우에는 이스케이프 처리를 해야 합니다. GLOB 절에서는 특수 문자를 이스케이프 처리를 하고 싶은 경우는 []로 둘러싸야합니다.

 

screenname 컬럼의 값에 별표(*)가 포함되어 있는 데이터를 조회합니다. 이스케이프 처리를 하지 않고 다음과 같이 작성하면 단순히 임의의 문자열과 일치하는 패턴이 되어 원하는 결과가 조회되지 않습니다.

별표(*)를 문자로 조건식에서 사용하는 경우에 이스케이프 처리는 다음과 같이 작성합니다.

LIKE 절과는 달리 GLOB 절에서는 특수 문자를 이스케이프 처리하는 방법은 선택할 수 없습니다.

 

다음에는 ISNULL절을 배워보도록 하겠습니다. 

728x90
반응형

'개발 > SQLite3' 카테고리의 다른 글

SQLite3_LIMIT절, OFFSET절  (0) 2022.01.06
SQLite3_IS NULL절, AS 절, DISTINCT 절  (0) 2022.01.06
SQLite3_WHERE절  (0) 2022.01.05
SQLite3_SELECT 절과 ORDER BY절  (0) 2022.01.05
SQLite3_데이터 추가와 수정, 삭제  (0) 2022.01.04
Comments