게으른 개발자의 끄적거림

SQL LIKE절 사용방법 완벽 정리

끄적잉 2024. 12. 23. 23:33

SQL의 LIKE 절은 데이터베이스에서 문자열 패턴 매칭을 수행하는 데 사용되는 조건절입니다. WHERE 절과 함께 사용하여 특정 패턴과 일치하는 데이터를 검색할 수 있습니다. 주로 부분 문자열 검색에 활용되며, 와일드카드(wildcard) 문자를 사용하여 유연한 패턴 매칭이 가능합니다.


LIKE 절의 기본 구조

SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE pattern;
  • column_name: 패턴 매칭을 수행할 열의 이름입니다.
  • pattern: 일치 여부를 확인할 문자열 패턴입니다. 와일드카드 문자를 포함할 수 있습니다.

 

와일드카드 문자

LIKE 절에서 사용할 수 있는 주요 와일드카드 문자는 다음과 같습니다.

  1. % (퍼센트 기호)
    • 0개 이상의 임의의 문자와 일치합니다.
    • 예:
      • 'a%': a로 시작하는 모든 문자열
      • '%a': a로 끝나는 모든 문자열
      • '%a%': a를 포함하는 모든 문자열
  2. _ (언더스코어)
    • 임의의 단일 문자와 일치합니다.
    • 예:
      • 'a_': a로 시작하고 뒤에 하나의 문자가 있는 문자열
      • '_a': 두 번째 문자가 a인 문자열
      • '_a_': 두 번째 문자가 a이고 총 3개의 문자를 가진 문자열
  3. 이외의 문자
    • 데이터베이스마다 다를 수 있으나, 특정 DBMS에서는 대괄호([])나 캐럿(^) 등을 사용할 수 있습니다. 예를 들어 SQL Server는 특정 범위나 목록을 정의할 수 있습니다.
      • [a-c]: a, b, c 중 하나의 문자와 일치
      • [^a-c]: a, b, c를 제외한 문자와 일치

실습 예제

1. 이름 검색

다음 테이블이 있다고 가정합니다.

ID Name City

1 Alice New York
2 Bob Boston
3 Charlie Chicago
4 Dave Dallas
5 Alicea Denver

특정 문자로 시작하는 이름 검색

SELECT * FROM users
WHERE Name LIKE 'A%';
  • 결과:
    | ID  | Name       | City       |
    |-----|------------|------------|
    | 1   | Alice      | New York   |
    | 5   | Alicea     | Denver     |
    

특정 문자로 끝나는 이름 검색

SELECT * FROM users
WHERE Name LIKE '%e';
  • 결과:
    | ID  | Name       | City       |
    |-----|------------|------------|
    | 1   | Alice      | New York   |
    | 4   | Dave       | Dallas     |
    

특정 문자열을 포함하는 이름 검색

SELECT * FROM users
WHERE Name LIKE '%li%';
  • 결과:
    | ID  | Name       | City       |
    |-----|------------|------------|
    | 1   | Alice      | New York   |
    | 3   | Charlie    | Chicago    |
    

2. 도시 이름 패턴 매칭

 

SELECT * FROM users
WHERE City LIKE 'B%';
  • 결과:
    | ID  | Name       | City       |
    |-----|------------|------------|
    | 2   | Bob        | Boston     |
    

대소문자 구분

SQL의 LIKE 절은 대소문자를 구분하는지 여부가 데이터베이스에 따라 다릅니다.

  • 대소문자 구분하지 않는 경우
    • MySQL과 같은 일부 데이터베이스는 기본적으로 대소문자를 구분하지 않습니다.
    • 예: 'a%'는 A로 시작하는 문자열도 포함합니다.
  • 대소문자 구분하는 경우
    • Oracle에서는 기본적으로 대소문자를 구분합니다. 대소문자 구분을 피하려면 UPPER() 또는 LOWER() 함수를 활용해야 합니다.
    • 예:
      SELECT * FROM users
      WHERE UPPER(Name) LIKE 'A%';
      

특수 문자 검색

특수 문자(예: %, _)를 검색하려면 이스케이프 문자를 사용해야 합니다.

이스케이프 예제

테이블 데이터:

ID Note

1 50% Off
2 100% Satisfaction
3 _Underscore

% 문자 포함 검색

SELECT * FROM notes
WHERE Note LIKE '%50\%%' ESCAPE '\';
  • 결과:
    | ID  | Note       |
    |-----|------------|
    | 1   | 50% Off    |
    

_ 문자 포함 검색

SELECT * FROM notes
WHERE Note LIKE '%\_%' ESCAPE '\';
  • 결과:
    | ID  | Note             |
    |-----|------------------|
    | 3   | _Underscore      |
    

 

NOT LIKE 절

NOT LIKE를 사용하면 특정 패턴과 일치하지 않는 데이터를 검색할 수 있습니다.

SELECT * FROM users
WHERE Name NOT LIKE 'A%';
  • 결과:
    | ID  | Name       | City       |
    |-----|------------|------------|
    | 2   | Bob        | Boston     |
    | 3   | Charlie    | Chicago    |
    | 4   | Dave       | Dallas     |
    

복합 조건

LIKE 절은 다른 조건과 결합하여 사용할 수 있습니다.

SELECT * FROM users
WHERE Name LIKE 'A%' AND City LIKE '%New%';
  • 결과:
    | ID  | Name       | City       |
    |-----|------------|------------|
    | 1   | Alice      | New York   |
    

성능 고려 사항

LIKE 절은 대량의 데이터에서 성능에 영향을 미칠 수 있습니다.

  1. 와일드카드 위치
    • %가 앞에 오는 경우('%text'), 인덱스를 사용하지 못하는 경우가 많아 성능이 저하될 수 있습니다.
  2. 대체 방법
    • 전체 텍스트 검색(Full-Text Search)을 사용하는 것이 더 효율적일 수 있습니다.
  3. 인덱스 활용
    • LIKE 'text%'와 같이 문자열 시작 패턴은 인덱스를 사용할 수 있습니다.