[SQL] 6장. 와일드카드 문자를 이용한 필터링

김상현·2022년 9월 22일
0

SQL

목록 보기
6/22
post-thumbnail

[손에 잡히는 10분 SQL - 벤 포터 지음, 박남혜 옮김] 책의 학습 후 정리자료입니다.


📍 LIKE 연산자 사용하기

  • 데이터값에 특정 문자열이 포함된 레코드를 찾으려면 와일드카드(Waildcard) 문자를 이용하면 검색이 가능하다.
  • 특정 문자열이 포함된 제품을 찾길 원한다면 와일드 카드 검색 패턴을 만들면 된다.
  • 검색 절에서 와일드카드를 사용하려면 반드시 LIKE 연산자를 사용해야 한다.
  • LIKE는 뒤에 나오는 검색 패턴과 일치하는 데이터를 찾는 게 아니라 와일드카드를 사용해 비교한다.
  • 와일드카드 검색은 텍스트 열(문자열)에서만 사용할 수 있다.

📒 와일드 카드

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

📒 검색 패턴

  • 문자나 와일드카드 도는 이 두개의 조합으로 구성된 검색 조건

📌 % 와일드카드

  • 검색할 문자열에서 %는 임의의 수의 문자를 의미한다.
  • 검색 패턴에 사용된 % 는 하나 이상의 문자뿐 아니라 0개의 문자를 뜻할 수도 있다.
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE 'Fish%';

  • Products 테이블에서 Fish 로 시작하는 prod_name 을 가진 레코드의 prod_idprod_name 데이터를 출력한다.
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '%bean bag%';

  • Products 테이블에서 bean bag 문자열을 포함한 prod_name 을 가진 레코드의 prod_idprod_name 데이터를 출력한다.

❗️ 후행 공백에 주의하자

  • 예를 들어 50개의 문자를 넣을 수 있는 열에 길이가 17인 문자열을 저장하면 열을 채우기 위해 33개의 공백이 추가될 수 있다.
  • 이러한 채우기(padding)가 일반적으로 데이터에 영향을 미치지 않지만 SQL 문에는 영향을 줄 수 있다.

❗️ NULL에 주의하자.

  • % 와일드카드의 매칭은 NULL에서 예외다. WHERE prod_name LIKE '%' 절도 제품명이 NULL인 행은 가져오지 않는다.

📌 _ 와일드카드

  • 언더라인(_) 와일드카드는 단 한 개의 문자를 대신한다.
  • n 개의 문자로 대체되는 % 와는 달리 _ 는 반드시 한 개의 문자와 매치된다.
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '__ inch teddy bear%';

  • Products 테이블에서 2개의 문자를 시작으로 inch teddy bear 문자열을 포함한 prod_name 을 가진 레코드의 prod_idprod_name 데이터를 출력한다.
  • 후행 공백을 처리하기 위해 검색 패턴 마지막에 % 와일드카드를 추가한다.

📍 와일드카드 사용 팁

  • 와일드카드 검색은 대체로 이전에 배운 다른 검색보다 시간이 오래 걸린다.

📌 와일드카드 사용시 주의점

  • 와일드 카드를 남용해서는 안된다. 대체 가능한 검색 연산자가 있다면 대체하여 사용한다.
  • 꼭 필요한 경우가 아니라면 검색 패턴 시작에 와일드카드를 사용하지 않아야 한다. 와일드카드로 시작하는 검색 패턴은 처리가 가장 느리다.
  • 와일드카드 기호의 위치 선정에 주의하자. 만약 와일드카드를 잘못된 곳에 사용한다면, 의도한 것과 다른 데이터가 검색될 것이다.

📍 도전과제

  1. Products 테이블에서 설명(prod_desc)에 toy 가 들어간 제품의 제품명(prod_name)과 설명을 가져오는 SQL 문을 작성하라.
SELECT prod_name, prod_desc
FROM Products
WHERE prod_desc LIKE '%toy%';

  1. Products 테이블에서 설명에 toy 가 들어가지 않은 제품의 제품명(prod_name)과 설명(prod_desc)을 가져오는 SQL 문을 작성하라. 결과를 제품명으로 정렬하라
SELECT prod_name, prod_desc
FROM Products
WHERE NOT prod_desc LIKE  '%toy%'
ORDER BY prod_name;

  1. Products 테이블에서 설명에 toycarrot 이 함께 들어간 제품의 제품명(prod_name)과 설명(prod_desc)을 가져오는 SQL 문을 작성하라. 이번 도전 과제에서는 AND와 2개의 LIKE 연산자를 이용한다.
SELECT prod_name, prod_desc
FROM Products
WHERE prod_desc LIKE '%toy%' AND prod_desc LIKE '%carrot%';

  1. Products 테이블에서 설명에 toycarrot 이 순서대로 함께 들어간(설명에 toycarrot 보다 먼저 있는) 제품의 제품명(prod_name)과 설명(prod_desc)을 가져오는 SQL 문을 작성하라. 하나의 LIKE와 3개의 % 기호를 사용해야 한다.
SELECT prod_name, prod_desc
FROM Products
WHERE prod_desc LIKE '%toy%carrot%';

profile
목적 있는 글쓰기

0개의 댓글