MySQL - NOT LIKE 연산자
안녕하세요, 데이터베이스 열정가 여러분! 오늘 우리는 MySQL의 fascinado 세계로 뛰어들어 SQL 도구 상자에서 강력한 도구 하나를 탐구해보겠습니다: NOT LIKE 연산자. 여러분의 친절한 이웃 컴퓨터 선생님이자 저는 이 여정을 안내해드리는 것을 기쁘게 생각합니다. 코드를 한 줄도 작성해본 적 없으신 분들도 괜찮습니다. 벨트를 채우고 시작해보겠습니다!
MySQL NOT LIKE 연산자
NOT LIKE 연산자는 LIKE 연산자의 반항적인 형제입니다. LIKE 연산자는 일치하는 패턴을 찾아주는 반면, NOT LIKE 연산자는 반대의 작업을 수행합니다. 특정 패턴과 일치하지 않는 모든 것을 찾아줍니다. 컴퓨터에게 "이것을 제외한 모든 것을 보여줘!"라고 말하는 것과 같습니다.
간단한 예제로 시작해보겠습니다. books
테이블이 있고, title
열이 있다고 가정해봅시다. 'A'로 시작하지 않는 모든 책을 찾고 싶다면 다음과 같이 사용할 수 있습니다:
SELECT * FROM books WHERE title NOT LIKE 'A%';
이 코드가 어떤 일을 하는지 설명해드리겠습니다:
-
SELECT *
: MySQL이 모든 열을 선택하도록 합니다. -
FROM books
:books
테이블에서 찾습니다. -
WHERE title NOT LIKE 'A%'
: 이 부분이 마법입니다. "A로 시작하지 않는 모든 제목을 주세요."라고 합니다.
%
는 와일드카드로 "아무거나 뒤따를 수 있습니다."를 의미합니다. 그래서 'A%'
는 "A 뒤에 아무거나 온다."를 의미합니다.
NOT LIKE 연산자와 와일드카드 사용
이제 와일드카드로 좀 더 재미있는 것을 추가해보겠습니다! MySQL은 두 가지 주요 와일드카드를 제공합니다:
-
%
: 영어로는 zero, one, or multiple characters를 의미합니다. -
_
: 영어로는 a single character를 의미합니다.
다음은 일반 와일드카드 사용 예시 표입니다:
와일드카드 | 설명 | 예시 |
---|---|---|
% |
아무 수의 문자 | '%adventure%' |
_ |
단일 문자 | '_at' |
[charlist] |
charlist에 있는 단일 문자 | '[abc]%' |
[^charlist] or [!charlist]
|
charlist에 없는 단일 문자 | '[^abc]%' |
예를 들어, 책 제목이 "ing"으로 끝나지 않는 모든 것을 찾고 싶다면 다음과 같이 사용할 수 있습니다:
SELECT * FROM books WHERE title NOT LIKE '%ing';
또한, 정확히 세 자리가 아닌 책을 찾고 싶다면 다음과 같이 사용할 수 있습니다:
SELECT * FROM books WHERE title NOT LIKE '___';
각 밑줄은 한 문자를 나타내므로 '___'
은 "정확히 세 자리"를 의미합니다.
NOT LIKE 연산자와 AND/OR 연산자 사용
때로는 여러 조건을 결합해야 합니다. 그때 AND와 OR 연산자가 유용합니다. 'T'로 시작하지 않고 'ing'으로 끝나지 않는 책을 찾고 싶다면 다음과 같이 사용할 수 있습니다:
SELECT * FROM books
WHERE title NOT LIKE 'T%'
AND title NOT LIKE '%ing';
또는 'A'로 시작하거나 'z'로 끝나지 않는 책을 찾고 싶다면 다음과 같이 사용할 수 있습니다:
SELECT * FROM books
WHERE title NOT LIKE 'A%'
OR title NOT LIKE '%z';
AND는 두 조건 모두 참이어야 하고, OR는 적어도 하나의 조건이 참이어야 합니다.
NOT LIKE 연산자의 문자열 사용
NOT LIKE 연산자는 문자열을 처리할 때 특히 유용합니다. 예를 들어, customers
테이블이 있고 'son'을 포함하지 않는 모든 고객의 이름을 찾고 싶다면 다음과 같이 사용할 수 있습니다:
SELECT * FROM customers
WHERE name NOT LIKE '%son%';
이 쿼리는 'son'을 포함하지 않는 모든 이름을 반환합니다. 따라서 'Johnson'과 'Sonny'는 제외되지만 'Smith'와 'Brown'은 포함됩니다.
재미있는 변화를 추가해보겠습니다. 두 번째 글자가 'a'가 아닌 이름을 찾고 싶다면 다음과 같이 사용할 수 있습니다:
SELECT * FROM customers
WHERE name NOT LIKE '_a%';
이 쿼리는 "두 번째 글자가 'a'가 아닌 모든 이름을 보여줘."라고 합니다.
NOT LIKE 연산자를 클라이언트 프로그램에서 사용
이제 MySQL 클라이언트 프로그램을 사용하여 모든 지식을 실践해보겠습니다. 이 예제에서는 MySQL 명령줄 클라이언트를 사용하겠습니다. 하지만 이 원리는 모든 MySQL 클라이언트에 적용됩니다.
먼저 간단한 employees
테이블을 만들어보겠습니다:
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
position VARCHAR(50)
);
INSERT INTO employees (name, position) VALUES
('John Doe', 'Manager'),
('Jane Smith', 'Developer'),
('Bob Johnson', 'Designer'),
('Alice Brown', 'Tester');
이제 'D'로 시작하지 않는 모든 직원을 찾고 싶다면 다음과 같이 사용할 수 있습니다:
SELECT * FROM employees
WHERE position NOT LIKE 'D%';
이는 John Doe (Manager)와 Alice Brown (Tester)를 반환해야 합니다.
조금 더 복잡한 예를 시도해보겠습니다. 이름이 'J'로 시작하고 직책이 'er'로 끝나지 않는 직원을 찾고 싶다면 다음과 같이 사용할 수 있습니다:
SELECT * FROM employees
WHERE name NOT LIKE 'J%'
AND position NOT LIKE '%er';
이는 Alice Brown (Tester)를 반환해야 합니다.
이제 그만! 여러분은 MySQL의 NOT LIKE 연산자를 마스터했습니다. 연습이 완벽을 만드는 것을 기억하십시오. 자신의 쿼리를 실험해보지 마세요. 누구도 몰랐던 데이터의 흥미로운 패턴을 발견할지도 모릅니다!
마무리하며, 저는 여러분이 SQL을 퍼즐 게임으로 생각하길 권장합니다. 각 쿼리는 풀어야 할 수수께끼입니다. 그러니 탐정 모자를 쓰고 데이터를 탐구해보세요. 행복한 쿼리 작성을, 미래의 데이터베이스 마법사 여러분!
Credits: Image by storyset