English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 튜토리얼에서는 부분 일치를 기반으로 데이터를 검색하는 방법을 배울 것입니다.
지금까지 특정 문자열을 식별하는 조건, 예를 들어 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 | +--------+------------------+------------+--------+---------+
주의:대소문자를 구분하여 열을 처리하고자 하면, 대소문자 구분이나 이진 정렬 규칙을 사용하여 선언하여 성능 문제를 피해야 합니다.
추가로:검색할 문자열의 정확한 형식을 알 수 없을 때 부분 일치는 매우 유용합니다. 부분 일치를 사용하여 테이블의 특정 열에 유사한 문자열을 포함한 여러 행을 검색할 수도 있습니다.