参考源
- 简单教程
- 菜鸟教程
SQL like 子句
SQL 中的 like
子句用于在 where
子句中搜索列中的指定模式
SELECT column_name FROM table_name WHERE column_name LIKE pattern;
注:
pattern
是一个合法的模式字符串,有很多种模式,但最常用的也是最容易记住的就是百分号 ( % )
可以代替任意字符
示例数据
CREATE DATABASE IF NOT EXISTS hardy_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
USE hardy_db;
DROP TABLE IF EXISTS lesson;
CREATE TABLE lesson (
id INT ( 11 ) NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR ( 32 ) DEFAULT '',
views INT ( 11 ) NOT NULL DEFAULT 0,
created_at TIMESTAMP
);
INSERT INTO lesson ( id, name, views, created_at )
VALUES
( 1, 'Python3 基础教程', 981, '2019-03-18 13:52:03' ),
( 2, 'JavaScript 基础教程', 73, '2019-03-18 16:03:32' ),
( 3, 'Ruby 基础教程', 199, '2019-04-01 06:16:14' ),
( 4, 'SQL 基础教程', 533, '2019-05-02 08:13:42' ),
( 5, 'Linux 基础教程', 1000, '2019-06-02 08:13:42' );
基本使用
如果不使用任何通配符,那么 like
的效果相当于 =
操作符
- 下面的 SQL 语句选取
name
为 Python3 基础教程 的课程
select * from lesson where name like 'Python3 基础教程';
输出结果如下:
mysql> select * from lesson where name like 'Python3 基础教程';
+----+------------------+-------+---------------------+
| id | name | views | created_at |
+----+------------------+-------+---------------------+
| 1 | Python3 基础教程 | 981 | 2019-03-18 13:52:03 |
+----+------------------+-------+---------------------+
1 row in set (0.00 sec)
百分号 ( % )
可以代替任何任意数量的字符
- 所以下面的 SQL 语句选取
name
以 S 开头的课程
select * from lesson where name like 'S%';
运行结果如下:
mysql> select * from lesson where name like 'S%';
+----+--------------+-------+---------------------+
| id | name | views | created_at |
+----+--------------+-------+---------------------+
| 4 | SQL 基础教程 | 533 | 2019-05-02 08:13:42 |
+----+--------------+-------+---------------------+
1 row in set (0.00 sec)
- 下面的 SQL 语句选取
name
以字符串 “教程” 结尾的所有课程
select * from lesson where name like '%教程';
输出结果如下
mysql> select * from lesson where name like '%教程';
+----+---------------------+-------+---------------------+
| id | name | views | created_at |
+----+---------------------+-------+---------------------+
| 1 | Python3 基础教程 | 981 | 2019-03-18 13:52:03 |
| 2 | JavaScript 基础教程 | 73 | 2019-03-18 16:03:32 |
| 3 | Ruby 基础教程 | 199 | 2019-04-01 06:16:14 |
| 4 | SQL 基础教程 | 533 | 2019-05-02 08:13:42 |
| 5 | Linux 基础教程 | 1000 | 2019-06-02 08:13:42 |
+----+---------------------+-------+---------------------+
5 rows in set (0.00 sec)
- 下面的 SQL 语句选取
name
包含 y 字母的课程
select * from lesson where name like '%y%';
输出结果如下:
mysql> select * from lesson where name like '%y%';
+----+------------------+-------+---------------------+
| id | name | views | created_at |
+----+------------------+-------+---------------------+
| 1 | Python3 基础教程 | 981 | 2019-03-18 13:52:03 |
| 3 | Ruby 基础教程 | 199 | 2019-04-01 06:16:14 |
+----+------------------+-------+---------------------+
2 rows in set (0.00 sec)
通过使用 not
关键字,我们可以选取不匹配模式的记录
- 下面的 SQL 语句选取
name
不包含 “y” 的所有课程
select * from lesson where name not like '%y%';
运行结果如下
mysql> select * from lesson where name not like '%y%';
+----+---------------------+-------+---------------------+
| id | name | views | created_at |
+----+---------------------+-------+---------------------+
| 2 | JavaScript 基础教程 | 73 | 2019-03-18 16:03:32 |
| 4 | SQL 基础教程 | 533 | 2019-05-02 08:13:42 |
| 5 | Linux 基础教程 | 1000 | 2019-06-02 08:13:42 |
+----+---------------------+-------+---------------------+
3 rows in set (0.00 sec)