와일드카드 문자를 이용한 필터링

KOO HEESEUNG·2021년 10월 14일
0

SQL 기초

목록 보기
5/8
post-thumbnail

스크립트는 <SQL in 10 Minutes(5th Edition)>(벤 포터 著, 인사이트) 에서 제공하는 것을 사용하였고, DBMS는 Oracle에서 제공하는 연습용 사이트, Oracle Live SQL(https://livesql.oracle.com) 을 사용하였습니다.

LIKE 연산자 사용하기

자신이 찾고자 하는 데이터의 내용 전체를 알아야 할 필요는 없다.
특정 열에 특정 문자열이 포함된 데이터를 찾기 위해서는 WHERE 절에 와일드카드와 LIKE 연산자를 사용한다.

와일드카드

데이터에 부분적으로 일치하는 값이 있는지 확인할 때 사용하는 특수문자.

% 와일드카드

임의의 수(0~n개)의 문자를 의미한다. 검색패턴 내 어디에서나 사용할 수 있다.
아래와 같은 문장에서 조건은 "prod_name에서 Fish로 시작하는 값을 가진다"는 의미이다.

SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE 'Fish%';

% 와일드카드의 위치는 양 끝에도 올 수 있다.
아래와 같이 양쪽 끝에 % 와일드카드를 붙이는 검색패턴은 bean bag을 포함한 문자열을 검색하라는 뜻이다. 해당 문자열 앞이나 뒤에 어떤 문자열이 와도 상관없다.

SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '%bean bag%';

검색패턴에 어떠한 문자열도 없이 %만 있다 하더라도, NULL 값인 행은 가져오지 않는다.

WHERE prod_name LIKE '%';

_ 와일드카드

% 와일드카드와 달리 언더라인(_) 와일드카드는 단 한 개의 문자만 대신한다.

[](집합) 와일드카드

문자들을 하나의 집합으로 지정하여 사용한다. 집합에 지정된 문자 중 하나는 와일드카드가 지정한 위치의 문자와 반드시 일치하는 검색결과를 가져온다.

Microsoft SQL Server 에서는 지원하지만, 일반적으로 집합 와일드카드는 지원되지 않는다.

아래 문장은 J 또는 M 으로 시작하는 cust_contact 데이터를 찾고 싶다는 의미이다.

SELECT cust_contact
FROM Customers
WHERE cust_contact LIKE '[JM]%'
ORDER BY cust_contact;

주의사항

  1. 와일드카드로 시작하는 검색 패턴은 처리가 가장 느리다.
  2. 와일드카드의 위치 선정에 주의한다. 위치에 따라 다른 데이터가 검색될 수 있다.

0개의 댓글