이전글들을 통해 특정 범위에 분포하거나 특정값과 일치하는 데이터 호출법을 배웠다.
이번엔 특정 문자열이 포함되어있는 데이터를 찾는 방법을 배워보자.
시작에 앞서, LIKE는 predicate(술어)이지 연산자가 아니다.
와일드카드 검색은 문자열에서만 사용할 수 있다.
SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE 'Fish%';
%는 가장 많이 사용되는 와일드카드다. %는 임의의 수(0포함)의 문자가 올 수 있음을 뜻한다.
WHERE 절을 활용하여 조건문을 형성할 수 있고, 이 경우 논리연산자가 아닌 LIKE 술어가 활용된다.
prod_name이 "Fish"로 시작하는 데이터를 찾아서 반환해준다. 결과는 "Fish bean bag toy"였다.
SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE '%bean bag%';
이 경우 문자열 어디에든지 bean bag이 있는 모든 데이터를 반환한다.
cf) 보통 %는 WHERE email LIKE 'b%@naver.com'과 같은 형식으로 활용한다.
WHERE prod_name LIKE '%'로 입력해도 NULL 데이터값은 반환하지 않는다.
SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE '__ inch teddy bear%';
_은 % 다음으로 유용한 와일드카드다. %와 달리 _는 하나의 문자를 대신한다.
이 경우 bear로 문자열이 끝남에도 % 와일드카드를 입력했다. 일부 DBMS에서는 열을 공백으로 채운다.
가령 50개의 문자를 넣을 수 있는 열이 존재할 때, 17개의 문자가 입력되었다면 남은 33칸을 공백으로 채운다.
따라서 '~bear'로 호출하면 데이터가 반환되지 않고, '~bear%'로 호출하면 데이터가 반환된다.
prod_name 중 8 inch teddy bear가 존재함에도 불구하고 두개의 데이터만이 반환되었다.
이는 __가 입력되었기 때문인데 %를 대신 입력하면 세개 데이터가 모두 반환된다.
SELECT cust_contact FROM Customers WHERE cust_contact LIKE '[JM]%' ORDER BY cust_contact;
[ ]는 문자를 하나의 집합으로 지정하는 와일드카드다. 집합 내부 문자 중 하나는 지정된 위치의 문자와 일치한다.
참고로 [ ]는 MySQL, Oracle, DB2, SQLite 등에서 지원하지 않는다.
위 예시에선 J or M 으로 시작하는 사람을 찾고 싶어서 [JM] 와일드카드를 활용했다.
반환값은 Jim Jones ,John Smith, Michelle Green 등이 나온다.
cf) '[^JM]%'과 같이 ^(캐럿)을 붙여주면 반대의 효과로 이어진다. J나 M으로 시작하지 않는 이름을 가진 사람의 데이터가 반환된다. NOT과 동일한 기능이지만 명령문을 단순화할 수 있단 점에서 유용하다.
*와일드카드 사용팁
1) 와일드카드를 활용할 경우 처리속도가 느리기 때문에 남용해선 안된다.
2) 특히 와일드카드로 시작하는 검색패턴은 지양해야한다.
'프로그래밍언어 > SQL' 카테고리의 다른 글
[SQL] (4) 고급 데이터 필터링 (0) | 2022.07.11 |
---|---|
[SQL] (3) 데이터 필터링 (0) | 2022.07.10 |
[SQL] (2) 데이터 정렬하기 (0) | 2022.07.08 |
[SQL] (1) 데이터 가져오기 (0) | 2022.07.07 |