본문 바로가기
  • Fearless
프로그래밍언어/SQL

[SQL] (5) 와일드카드 문자

by Albatross 2022. 7. 12.
반응형

이전글들을 통해 특정 범위에 분포하거나 특정값과 일치하는 데이터 호출법을 배웠다.

이번엔 특정 문자열이 포함되어있는 데이터를 찾는 방법을 배워보자.

 

 

시작에 앞서, 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