SQL - LIKE 연산자

안녕하세요, SQL 열정가 여러분! 오늘 우리는 SQL에서 가장 유용하고 다재다능한 연산자 중 하나인 LIKE 연산자에 대해 배울 것입니다. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 저는 이 여정을 안내해 드리기 위해 설레고 있습니다. 그러니 마음에 드는 음료를 골라 편안하게 앉아, 이 SQL 모험을 함께 시작해 보세요!

SQL - LIKE Operator

SQL LIKE 연산자

LIKE 연산자는 데이터 내 특정 패턴을 검색하는 데 유용한 강력한 도구입니다. 데이터베이스에서 우리가 찾는 것을 정확히 찾을 수 있는 초능력이 있는 돋보기 같은 존재입니다.

거대한 도서관에서 책을 찾는 것을 상상해 보세요. 정확한 제목을 기억나지 않지만, "adventure"라는 단어가 포함되어 있다는 것을 알고 있습니다. LIKE 연산자는 "adventure"라는 단어가 포함된 모든 책을 찾아주는 도서관 사서 친구입니다.

LIKE 연산자의 기본 문법은 다음과 같습니다:

SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE 패턴;

하지만 이 "패턴"이 정확히 무엇인가요? 그 다음 주제에서 설명드리겠습니다...

와일드카드는 무엇인가요?

와일드카드는 검색 패턴 내 하나 이상의 문자를 대표할 수 있는 특수 문자입니다. 카드 덱의 조커처럼, 다른 카드로 대체할 수 있습니다. SQL에서는 LIKE 연산자와 함께 와일드카드를 사용하여 유연한 검색 패턴을 만듭니다.

LIKE 연산자와 함께 사용되는 두 가지 주요 와일드카드는 다음과 같습니다:

  1. % (퍼센트 기호)
  2. _ (언더스코어)

이 두 가지 와일드카드를 자세히 탐구해 보겠습니다.

'%' 와일드카드 문자

'%' 와일드카드는 제로, 하나, 또는 여러 개의 문자를 나타냅니다. 가장 유연한 와일드카드로, 패턴의 정확한 위치나 길이를 알지 못할 때 자주 사용됩니다.

다음은 몇 가지 예제입니다:

-- 이름이 'A'로 시작하는 모든 고객 찾기
SELECT * FROM Customers WHERE CustomerName LIKE 'A%';

-- 이름이 'phone'으로 끝나는 모든 제품 찾기
SELECT * FROM Products WHERE ProductName LIKE '%phone';

-- 'book'이 포함된 모든 주문 찾기
SELECT * FROM Orders WHERE ProductName LIKE '%book%';

첫 번째 예제에서는 이름이 'A'로 시작하고 그 뒤에 어떤 문자가 오든지 모든 고객을 찾습니다. 이는 "Alex", "Anna", 또는 "A very long name"과 같은 이름을 매칭합니다.

두 번째 예제는 이름이 'phone'으로 끝나는 모든 제품을 찾습니다. 이는 "iPhone", "Smartphone", 또는 "Headphone"과 같은 이름을 매칭할 수 있습니다.

마지막 예제는 제품 이름에 어디에나 'book'이 포함된 모든 주문을 찾습니다. 이는 "Bookshelf", "Notebook", 또는 "Book of Spells"와 같은 이름을 매칭합니다.

'_' 와일드카드 문자

'_' 와일드카드는 하나의 문자를 나타냅니다. 패턴 내 정확히 하나의 문자를 占位하는 플레이스홀더입니다.

다음은 몇 가지 예제입니다:

-- 이름이 정확히 4자리인 모든 고객 찾기
SELECT * FROM Customers WHERE CustomerName LIKE '____';

-- 이름이 'A'로 시작하고 5자리인 모든 제품 찾기
SELECT * FROM Products WHERE ProductName LIKE 'A____';

-- 주문 ID의 두 번째 문자가 '3'인 모든 주문 찾기
SELECT * FROM Orders WHERE OrderID LIKE '_3%';

첫 번째 예제에서는 이름이 정확히 4자리인 모든 고객을 찾습니다. 이는 "John" 또는 "Mary"와 같은 이름을 매칭하지만, "Alexander" 또는 "Bob"과 같은 이름은 매칭하지 않습니다.

두 번째 예제는 'A'로 시작하고 5자리인 모든 제품 이름을 찾습니다. 이는 "Apple" 또는 "Audio"와 같은 이름을 매칭하지만, "Apricot" 또는 "A4 paper"와 같은 이름은 매칭하지 않습니다.

마지막 예제는 주문 ID의 두 번째 문자가 '3'인 모든 주문을 찾습니다. 이는 "13456", "23789", 또는 두 번째 문자가 '3'인 어떤 조합이든 매칭할 수 있습니다.

LIKE 연산자와 OR

때로는 여러 패턴을 동시에 검색하고 싶을 수 있습니다. 그때는 OR 연산자를 유용하게 사용할 수 있습니다. LIKE와 함께 OR를 사용하여 동일한 쿼리에서 다양한 패턴을 검색할 수 있습니다.

다음은 예제입니다:

-- 이름이 'A'로 시작하거나 's'로 끝나는 모든 고객 찾기
SELECT * FROM Customers
WHERE CustomerName LIKE 'A%' OR CustomerName LIKE '%s';

이 쿼리는 "Alice", "Andreas", "Boris", 또는 "Charles"와 같은 이름을 반환합니다. 이름이 'A'로 시작하거나 's'로 끝나는 이름을 매칭합니다.

NOT 연산자와 LIKE 조건

어떤 특정 패턴과 일치하지 않는 모든 것을 찾고 싶다면 어떻게 하죠? 그때는 NOT 연산자를 사용합니다. NOT LIKE를 사용하여 검색 패턴에서 특정 패턴을 제외할 수 있습니다.

다음은 예제입니다:

-- 'A'로 시작하지 않는 모든 제품 찾기
SELECT * FROM Products
WHERE ProductName NOT LIKE 'A%';

이 쿼리는 'A'로 시작하지 않는 모든 제품을 반환합니다. 따라서 "Banana", "Cherry", "Dell Laptop"와 같은 제품을 포함하지만, "Apple" 또는 "Acer Monitor"는 포함하지 않습니다.

LIKE 연산자와 이스케이프 문자

때로는 와일드카드 문자 자체를 검색 패턴에 포함하고 싶을 수 있습니다. 예를 들어, 이름에 '%' 기호가 포함된 제품을 찾고 싶다면 어떻게 하죠? 이스케이프 문자를 사용하여 SQL에 이러한 특수 문자를 일반 문자로 취급하도록 지정할 수 있습니다.

SQL의 기본 이스케이프 문자는 백슬래시 ()입니다. 다음은 그 사용법입니다:

-- 이름에 '%'가 포함된 제품 찾기
SELECT * FROM Products
WHERE ProductName LIKE '%\%%';

-- 이름에 '_'가 포함된 제품 찾기
SELECT * FROM Products
WHERE ProductName LIKE '%\_%';

첫 번째 쿼리는 "50% off", "100% cotton"과 같은 이름을 매칭합니다. 두 번째 쿼리는 "A_B", "C_D"와 같은 이름을 매칭합니다.

LIKE 연산자의 용도

LIKE 연산자는 데이터베이스 질의에서 많은 실용적인 응용이 있습니다. 다음은 몇 가지 일반적인 용도를 요약한 표입니다:

용도 예제 쿼리
부분 일치 찾기 SELECT * FROM Customers WHERE CustomerName LIKE '%son%';
특정 형식 검색 SELECT * FROM Orders WHERE OrderID LIKE 'ORD_____';
시작/끝 문자 필터링 SELECT * FROM Products WHERE ProductName LIKE 'A%' OR ProductName LIKE '%z';
특정 패턴 제외 SELECT * FROM Employees WHERE EmployeeName NOT LIKE 'John%';
특수 문자 검색 SELECT * FROM Products WHERE ProductName LIKE '%\%%';

대부분의 SQL 구현에서 LIKE 연산자는 대소문자를 구분하지 않습니다. 따라서 'a%'는 'Apple', 'apple', 'APPLE' 모두를 매칭합니다.

결론적으로, LIKE 연산자는 여러분의 SQL 도구箱에서 강력한 도구입니다. 유연하고 강력한 문자 매칭을 가능하게 하여, 많은 데이터 분석 및 검색 작업에 필수적입니다. 다양한 와일드카드와 조합을 연습하면, LIKE 연산자를 프로처럼 사용할 수 있을 것입니다!

快乐的查询, 미래의 SQL 마스터 여러분!

Credits: Image by storyset