다양한 와일드카드
% : 임의의 수의 문자 ex) %sh => Finish, ab% => abcdefg..., b% => b
_ : 한 개의 문자 ex) _ish => Fish, as__ => asmr
[] : [] 내 문자 중 하나 ex) [ab]% => asd, [qwer] => e
^ : [] 와일드카드와 함께 사용하며 반대의 효과를 가져온다. ex) [^ab]% => qwe, [^qwer] => a (NOT LIKE [] 와 같으나 여러 와일드카드를 같이 사용할 때 유용하다.)
와일드카드 사용 팁
와일드카드는 다른 연산자로 검색이 불가능할 때 사용하라 - 타 연산자에 비해 시간이 오래 걸린다.
꼭 필요한 경우가 아니라면 와일드카드를 검색 패턴 시작에 넣지 말자 - 모든 행을 순회하여 시간이 가장 오래걸린다.
도전 과제
Products 테이블에서 설명에 toy가 들어간 제품의 제품명과 설명을 출력하라
SELECT prod_name, prod_desc FROM Products WHERE prod_desc LIKE '%toy%';
Products 테이블에서 설명에 toy가 들어가지 않은 제품명과 설명을 제품명으로 정렬하여 출력하라
SELECT prod_name, prod_desc FROM Products WHERE prod_desc NOT LIKE '%toy%' ORDER BY prod_name;
Products 테이블에서 설명에 toy와 carrots가 함께 들어간 제품의 제품명과 설명을 출력하라 (AND 1개와 LIKE 2개를 사용하라)
SELECT prod_name, prod_desc FROM Products WHERE prod_desc LIKE '%toy%' AND prod_desc LIKE '%carrots%';
Products 테이블에서 설명에 toy와 carrots이 순서대로 함께 들어간 (toy 가 나오고 carrots 가 나오는) 제품의 제품명과 설명을 출력하라 (LIKE 1개와 3개의 %를 사용하라)
SELECT prod_name, prod_desc FROM Products WHERE prod_desc LIKE '%toy%carrots%';
주의.
DBMS 에 따라 50자 문자열 데이터형에 10자의 문자를 넣으면, 40자의 후행 공백을 채우는 경우가 있다. 따라서 LIKE '%a' 같은 조건식이 의도대로 동작하지 않을 수 있다. 이 경우 함수를 사용하여 공백을 지워 해결할 수 있다. - 함수는 8장에서 다룸
LIKE '%' 는 모든 행을 가져올 것이라고 생각할 수 있지만, NULL인 행은 가져오지 않는다.