English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQL LIKE 연산자

이 튜토리얼에서는 부분 일치를 기반으로 데이터를 검색하는 방법을 배울 것입니다.

패턴 일치

지금까지 특정 문자열을 식별하는 조건, 예를 들어 WHERE name='Lois Lane'를 보았습니다. 하지만 SQL에서 LIKE 연산자를 사용하여 부분 일치나 패턴 일치를 수행할 수도 있습니다.

LIKE 연산자는 하나나 여러개의 문자에 대체 문자를 지정하여 패턴 일치를 측정할 수 있습니다. 다음 두 가지 대체 문자를 사용할 수 있습니다:

  • 백분비 기호 (%) - 무한多个 문자, 심지어 0개의 문자와도 일치합니다.

  • 밑줄(_) - 단일 문자와 완전 일치

LIKE 연산자와 와이드 캐릭터를 함께 사용하는 방법을 보여주는 몇 가지 예제입니다.

표현의미반환 값
WHERE name LIKE 'Da%'

Da로 시작하는 이름을 찾습니다

David, Davidson
WHERE name LIKE '%th'으로 시작하는 이름을 찾습니다th으로 끝나는 이름Elizabeth, Smith
WHERE name LIKE '%on%'

on을 포함하는 이름을 찾습니다

Davidson, Toni
WHERE name LIKE 'Sa_'

Sa로 시작하며, 최대한 한 문자 후에 이름을 찾습니다

Sa
WHERE name LIKE '_oy'

oy로 끝나며, 최대한 한 문자를 포함하는 이름을 찾습니다

Joy, Roy
WHERE name LIKE '_an_'를 포함하는 이름을 찾습니다an의 이름은, 한 문자로 시작하고 끝납니다Dana, Hans
WHERE name LIKE '%ar_'를 포함하는 이름을 찾습니다ar의 이름은, 어떤 문자로 시작하며, 최대한 한 문자로 끝납니다Richard, Karl
WHERE name LIKE '_ar%'를 포함하는 이름을 찾습니다ar의 이름은, 최대한 한 문자로 시작하며, 어떤 문자로 끝날 수 있습니다Karl, Mariya

몇 가지 기록을 검색하여 이전에 논의한 문장을 실제로 적용해 보겠습니다.

우리는employees데이터베이스에 다음과 같은 기록을 포함한 테이블이 있습니다:

+--------+------------------+------------+--------+---------+
| emp_id | emp_name         | hire_date  | salary | dept_id |
+--------+------------------+------------+--------+---------+
|      1 | Ethan Hunt        | 2001-05-01 |   5000 |       4 |
|      2 | Tony Montana      | 2002-07-15 |   6500 |       1 |
|      3 | Sarah Connor     | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard      | 2007-01-03 |   7200 |       3 |
|      5 | Martin Blank      | 2008-06-24 |   5600 |          NULL |
|      6 | simons bistro     | 2009-04-01 |   6000 |       1 |
+--------+------------------+------------+--------+---------+

지금, S 문자로 시작하는 모든 직원을 찾고 싶다고 가정해 보겠습니다.

SELECT * FROM employees 
WHERE emp_name LIKE 'S%';

쿼리 실행 후, 다음과 같은 출력을 얻습니다:

+--------+------------------+------------+--------+---------+
| emp_id | emp_name         | hire_date  | salary | dept_id |
+--------+------------------+------------+--------+---------+
|      3 | Sarah Connor     | 2005-10-18 |   8000 |       5 |
|      6 | simons bistro     | 2009-04-01 |   6000 |       1 |
+--------+------------------+------------+--------+---------+

MySQL에서는 비이진 문자열(CHAR, VARCHAR, TEXT) 비교는 기본적으로 대소문자를 구분하지 않습니다. 반면에 이진 문자열(BINARY, VARBINARY, BLOB) 비교는 대소문자를 구분합니다.

이는, 검색 WHERE name LIKE 'S%'를 사용하면 'S' 또는 's'로 시작하는 모든 열 값이 얻어진다는 것을 의미합니다(그리고 보여주듯이, 'Sarah'와 'simons'를 모두 가지고 있습니다). 그러나, 대소문자를 구분하는 검색을 위해 BINARY로 다음과 같이 연산자를 사용할 수 있습니다:

-- MySQL 데이터베이스 문법 
SELECT * FROM employees 
WHERE BINARY emp_name LIKE 'S%';

이제, 이 문장은 이름이 대문자 S로 시작하는 직원만 반환됩니다:

+--------+------------------+------------+--------+---------+
| emp_id | emp_name         | hire_date  | salary | dept_id |
+--------+------------------+------------+--------+---------+
|      3 | Sarah Connor     | 2005-10-18 |   8000 |       5 |
+--------+------------------+------------+--------+---------+

주의:대소문자를 구분하여 열을 처리하고자 하면, 대소문자 구분이나 이진 정렬 규칙을 사용하여 선언하여 성능 문제를 피해야 합니다.

추가로:검색할 문자열의 정확한 형식을 알 수 없을 때 부분 일치는 매우 유용합니다. 부분 일치를 사용하여 테이블의 특정 열에 유사한 문자열을 포함한 여러 행을 검색할 수도 있습니다.