LIKE
运算符用于在 SQL 查询中进行模糊匹配。它允许使用通配符(%
和 _
)来匹配一个或多个字符。下面是对 LIKE
的详细介绍以及结合代码的示例。
基本语法
SELECT column1, column2, ...
FROM table_name
WHERE column LIKE pattern;
通配符
%
:匹配零个或多个字符。_
:匹配单个字符。
示例数据库和表结构
假设我们有一个公司数据库,其中有两个表:employees
和 departments
。
-- 创建数据库
CREATE DATABASE company;
-- 选择数据库
USE company;
-- 创建表 departments
CREATE TABLE departments (
dept_id INT AUTO_INCREMENT PRIMARY KEY,
dept_name VARCHAR(100) NOT NULL
);
-- 创建表 employees
CREATE TABLE employees (
emp_id INT AUTO_INCREMENT PRIMARY KEY,
emp_name VARCHAR(100) NOT NULL,
emp_position VARCHAR(100),
emp_salary DECIMAL(10, 2),
hire_date DATE,
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
-- 插入示例数据到 departments 表
INSERT INTO departments (dept_name)
VALUES
('HR'),
('Engineering'),
('Marketing');
-- 插入示例数据到 employees 表
INSERT INTO employees (emp_name, emp_position, emp_salary, hire_date, dept_id)
VALUES
('John Doe', 'Manager', 75000.00, '2023-10-01', 1),
('Jane Smith', 'Developer', 60000.00, '2023-09-01', 2),
('Alice Johnson', 'Analyst', 50000.00, '2023-08-01', 1),
('Bob Brown', 'Developer', 70000.00, '2023-07-01', 2),
('Charlie Brown', 'Tester', 55000.00, '2023-11-01', 3);
使用 LIKE 的示例
1. 匹配以 ‘J’ 开头的名字
SELECT * FROM employees
WHERE emp_name LIKE 'J%';
结果:
emp_id | emp_name | emp_position | emp_salary | hire_date | dept_id
-------|------------|--------------|------------|------------|--------
1 | John Doe | Manager | 75000.00 | 2023-10-01 | 1
2 | Jane Smith | Developer | 60000.00 | 2023-09-01 | 2
2. 匹配以 ‘n’ 结尾的名字
SELECT * FROM employees
WHERE emp_name LIKE '%n';
结果:
emp_id | emp_name | emp_position | emp_salary | hire_date | dept_id
-------|---------------|--------------|------------|------------|--------
1 | John Doe | Manager | 75000.00 | 2023-10-01 | 1
3 | Alice Johnson | Analyst | 50000.00 | 2023-08-01 | 1
3. 匹配名字中包含 ‘o’ 的员工
SELECT * FROM employees
WHERE emp_name LIKE '%o%';
结果:
emp_id | emp_name | emp_position | emp_salary | hire_date | dept_id
-------|---------------|--------------|------------|------------|--------
1 | John Doe | Manager | 75000.00 | 2023-10-01 | 1
3 | Alice Johnson | Analyst | 50000.00 | 2023-08-01 | 1
5 | Charlie Brown | Tester | 55000.00 | 2023-11-01 | 3
4. 匹配第二个字符为 ‘a’ 的名字
SELECT * FROM employees
WHERE emp_name LIKE '_a%';
结果:
emp_id | emp_name | emp_position | emp_salary | hire_date | dept_id
-------|------------|--------------|------------|------------|--------
2 | Jane Smith | Developer | 60000.00 | 2023-09-01 | 2
3 | Alice Johnson | Analyst | 50000.00 | 2023-08-01 | 1
5. 匹配包含 ‘it’ 的职位
SELECT * FROM employees
WHERE emp_position LIKE '%it%';
结果:
emp_id | emp_name | emp_position | emp_salary | hire_date | dept_id
-------|-----------------|--------------|------------|------------|--------
2 | Jane Smith | Developer | 60000.00 | 2023-09-01 | 2
5 | Charlie Brown | Tester | 55000.00 | 2023-11-01 | 3
6. 匹配以 ‘De’ 开头的职位
SELECT * FROM employees
WHERE emp_position LIKE 'De%';
结果:
emp_id | emp_name | emp_position | emp_salary | hire_date | dept_id
-------|------------|--------------|------------|------------|--------
2 | Jane Smith | Developer | 60000.00 | 2023-09-01 | 2
4 | Bob Brown | Developer | 70000.00 | 2023-07-01 | 2
7. 匹配以 ‘er’ 结尾的职位
SELECT * FROM employees
WHERE emp_position LIKE '%er';
结果:
emp_id | emp_name | emp_position | emp_salary | hire_date | dept_id
-------|---------------|--------------|------------|------------|--------
2 | Jane Smith | Developer | 60000.00 | 2023-09-01 | 2
4 | Bob Brown | Developer | 70000.00 | 2023-07-01 | 2
5 | Charlie Brown | Tester | 55000.00 | 2023-11-01 | 3
使用 NOT LIKE 运算符
有时我们需要排除特定模式的匹配,可以使用 NOT LIKE
。
8. 排除名字中包含 ‘o’ 的员工
SELECT * FROM employees
WHERE emp_name NOT LIKE '%o%';
结果:
emp_id | emp_name | emp_position | emp_salary | hire_date | dept_id
-------|------------|--------------|------------|------------|--------
2 | Jane Smith | Developer | 60000.00 | 2023-09-01 | 2
4 | Bob Brown | Developer | 70000.00 | 2023-07-01 | 2
小结
通过使用 LIKE
运算符,您可以在 SQL 查询中进行强大的模糊匹配操作。使用 %
和 _
通配符,您可以灵活地匹配各种字符模式,这在搜索和过滤数据时非常有用。上述示例展示了 LIKE
运算符的各种用法,包括匹配前缀、后缀、包含特定字符和使用 NOT LIKE
排除特定模式。