📊 [SQL 프로젝트] 제9장 LIKE - 원하는 글자가 포함된 데이터 찾기
제9장 LIKE - 원하는 글자가 포함된 데이터 찾기
오늘의 질문
회사에 고객이 90명이 넘습니다.
사장님이 갑자기 말했습니다.
"이름이 'A'로 시작하는 고객만 찾아 주세요."
또 다른 직원은 이렇게 말합니다.
"주소에 'Street'가 들어가는 고객도 찾아 주세요."
고객 이름이나 주소를 하나씩 읽어 보는 것은 시간이 너무 오래 걸립니다.
이처럼 문자의 일부를 기준으로 데이터를 검색할 때 사용하는 명령어가 바로 LIKE입니다.
학습 목표
이번 장을 학습하면 다음 내용을 할 수 있습니다.
- LIKE의 역할을 설명할 수 있다.
- % 와 _의 차이를 이해할 수 있다.
- 글자의 시작, 끝, 포함 여부를 검색할 수 있다.
- 실제 업무에서 LIKE를 활용할 수 있다.
9-1. 먼저 실행해 봅시다.
먼저 다음 SQL을 실행해 보세요.
SELECT CustomerName
FROM Customers
WHERE CustomerName LIKE 'A%';
실행 결과(예)
| CustomerName |
| Alfreds Futterkiste |
| Ana Trujillo Emparedados y helados |
| Around the Horn |
모든 고객 이름이 A로 시작합니다.
이번에는 다음 SQL을 실행해 보세요.
SELECT CustomerName
FROM Customers
WHERE CustomerName LIKE '%A%';
이번에는
이름 어디에든 A가 포함된 고객이 조회됩니다.
앞의 예보다 훨씬 많은 결과가 나옵니다.
잠깐 생각해 보기
두 SQL의 차이는 무엇일까요?
LIKE 'A%'
↓
A로 시작
LIKE '%A%'
↓
A가 어디든 포함
%의 위치가 결과를 바꾸는 것입니다.
9-2. LIKE를 한 줄씩 읽어 보기
SELECT CustomerName
FROM Customers
WHERE CustomerName LIKE 'A%';
한 줄씩 읽어 보면
SELECT CustomerName
↓
고객 이름을 가져오고
FROM Customers
↓
Customers 테이블에서
WHERE
↓
조건을 만족하는 데이터만 선택하며
CustomerName
↓
고객 이름이
LIKE 'A%'
↓
A로 시작하는 경우만 출력합니다.
즉,
고객 이름이 A로 시작하는 고객만 조회하라.
라는 의미입니다.
🤔 왜 LIKE가 필요할까요?
생각해 봅시다.
고객 이름을 정확히 모르는 경우가 많습니다.
예를 들어
"이름이 Kim으로 시작했던 것 같은데…"
"주소에 Road가 들어 있었어요."
이처럼 일부만 알고 있을 때 LIKE가 매우 유용합니다.
9-3. % 기호 알아보기
%는
글자가 몇 개가 오든 상관없다.
라는 의미입니다.
예를 들어
LIKE 'A%'
은
A
AB
ABC
Alexander
모두 검색됩니다.
LIKE '%A'
은
A로 끝나는 데이터를 찾습니다.
LIKE '%A%'
은
A가 어디에 있든 검색합니다.
9-4. _(밑줄) 기호 알아보기
_
는
글자 한 개를 의미합니다.
예를 들어
LIKE '_a%'
은
첫 글자는 아무 글자나 가능하고,
두 번째 글자가 a인 데이터를 찾습니다.
예)
James
Maria
등이 검색될 수 있습니다.
💡 잠깐! 이것도 알아두세요
%
↓
글자가 0개 이상
_
↓
글자가 정확히 1개
둘은 매우 자주 혼동하므로 꼭 구분해야 합니다.
| 패턴 | 의미 | 예시 |
| A% | A로 시작 | Alfred |
| %A | A로 끝남 | Korea |
| %A% | A가 포함됨 | Market |
| _A% | 두 번째 글자가 A | Maria |
자주 하는 실수
① = 과 LIKE를 혼동한다.
잘못된 예
WHERE CustomerName = 'A%'
올바른 예
WHERE CustomerName LIKE 'A%'
② %를 빼먹는다.
LIKE 'A'
는
A라는 이름만 찾습니다.
A로 시작하는 이름은 검색되지 않습니다.
③ _를 여러 글자로 생각한다.
_
는
한 글자만 의미합니다.
④ 대소문자를 항상 구분한다고 생각한다.
MySQL은 사용하는 문자셋과 Collation에 따라 대소문자를 구분하지 않는 경우가 많습니다.
하지만 다른 DBMS에서는 다를 수 있으므로 항상 확인하는 습관을 갖는 것이 좋습니다.
실무에서는 어떻게 사용할까요?
회사에서는 LIKE를 이용하여
- 고객 이름 검색
- 상품 이름 검색
- 주소 검색
- 도시 검색
- 전화번호 일부 검색
등을 자주 수행합니다.
검색창에서 입력한 키워드를 SQL로 처리할 때 가장 많이 사용하는 명령어 가운데 하나입니다.
실습
실습 1
A로 시작하는 고객을 조회하세요.
SELECT CustomerName
FROM Customers
WHERE CustomerName LIKE 'A%';
실습 2
주소에 "Street"가 포함된 고객을 조회하세요.
SELECT CustomerName,
Address
FROM Customers
WHERE Address LIKE '%Street%';
실습 3
도시 이름이 "B"로 시작하는 고객을 조회하세요.
SELECT CustomerName,
City
FROM Customers
WHERE City LIKE 'B%';
실무 미션
당신은 고객지원팀 직원입니다.
고객이 전화로 말했습니다.
"회사 이름에 'Market'이라는 단어가 들어갑니다."
다음 조건을 만족하는 SQL을 작성해 보세요.
- Customers 테이블 사용
- CustomerName 조회
- "Market"이 포함된 고객 검색
- 이름 순으로 정렬
핵심 정리
✔ LIKE는 문자열 검색에 사용한다.
✔ %는 글자가 0개 이상인 모든 경우를 의미한다.
✔ _는 정확히 한 글자를 의미한다.
✔ LIKE는 WHERE와 함께 사용하는 경우가 가장 많다.
✔ 검색 기능을 구현할 때 매우 자주 사용된다.
연습 문제
기본 문제
- LIKE는 어떤 역할을 하나요?
- %와 _의 차이를 설명해 보세요.
- 다음 SQL의 의미를 설명해 보세요.
SELECT CustomerName
FROM Customers
WHERE CustomerName LIKE 'B%';
응용 문제
- Customers 테이블에서 주소에 "Road"가 포함된 고객을 조회하는 SQL을 작성해 보세요.
- Customers 테이블에서 도시 이름이 "S"로 시작하는 고객을 조회하는 SQL을 작성해 보세요.
- Products 테이블에서 상품 이름에 "Chef"가 포함된 상품을 조회하는 SQL을 작성해 보세요.
도전 문제
영업팀에서 다음과 같이 요청했습니다.
"국가 이름이 'U'로 시작하는 고객의 회사 이름(CustomerName)과 국가(Country)를 조회해 주세요. 결과는 회사 이름 순으로 정렬해 주세요."
조건에 맞는 SQL을 작성해 보세요.
다음 장 예고
이번 장에서는 LIKE를 이용하여 원하는 글자가 포함된 데이터를 검색하는 방법을 배웠습니다.
하지만 여러 개의 값을 하나씩 비교해야 하는 경우에는 LIKE보다 더 편리한 방법이 있습니다.
예를 들어 사장님이 이렇게 요청할 수 있습니다.
"독일, 프랑스, 영국 고객만 조회해 주세요."
이처럼 여러 값을 한 번에 조건으로 지정할 때 사용하는 명령어가 IN입니다.
다음 장에서는 IN - 여러 조건을 한 번에 비교하기를 배우며, SQL 조건식을 더욱 간결하게 작성하는 방법을 익히게 됩니다.