MySQL LIKE
1. 介绍¶
1.1 环境准备¶
mysql> truncate leco; values(8,"张三4","female",18);Query OK, 0 rows affected (0.04 sec) mysql> mysql> insert into leco(id,name,sex,age) values(1,"张三","female",18); Query OK, 1 row affected (0.01 sec) mysql> insert into leco(id,name,sex,age) values(2,"李四","male",20); Query OK, 1 row affected (0.01 sec) mysql> insert into leco(id,name,sex,age) values(3,"王五","male",30); Query OK, 1 row affected (0.02 sec) mysql> insert into leco(id,name,sex,age) values(4,"赵六","female",40); Query OK, 1 row affected (0.01 sec) mysql> mysql> insert into leco(id,name,sex,age) values(5,"张三1","female",18); Query OK, 1 row affected (0.01 sec) mysql> insert into leco(id,name,sex,age) values(6,"张三2","female",18); Query OK, 1 row affected (0.00 sec) mysql> insert into leco(id,name,sex,age) values(7,"张三3","female",18); Query OK, 1 row affected (0.01 sec) mysql> insert into leco(id,name,sex,age) values(8,"张三4","female",18); Query OK, 1 row affected (0.00 sec) mysql> select * from leco; +------+---------+--------+------+ | id | name | sex | age | +------+---------+--------+------+ | 1 | 张三 | female | 18 | | 2 | 李四 | male | 20 | | 3 | 王五 | male | 30 | | 4 | 赵六 | female | 40 | | 5 | 张三1 | female | 18 | | 6 | 张三2 | female | 18 | | 7 | 张三3 | female | 18 | | 8 | 张三4 | female | 18 | +------+---------+--------+------+ 8 rows in set (0.00 sec)
1.2 开始¶
我们知道在 MySQL 中使用 SQL SELECT 命令来读取数据, 同时我们可以在 SELECT 语句中使用 WHERE 子句来获取指定的记录。WHERE 子句中可以使用等号 = 来设定获取数据的条件,如 "name = '张三'"。但是有时候我们需要获取 leco 字段含有 "张三" 字符的所有记录,这时我们就需要在 WHERE 子句中使用 SQL LIKE 子句。SQL LIKE 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号 *。如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。
以下是 SQL SELECT 语句使用 LIKE 子句从数据表中读取数据的通用语法:
SELECT field1, field2,...fieldN FROM table_name WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
- 你可以在 WHERE 子句中指定任何条件。
- 你可以在 WHERE 子句中使用LIKE子句。
- 你可以使用LIKE子句代替等号 =。
- LIKE 通常与 % 一同使用,类似于一个元字符的搜索。
- 你可以使用 AND 或者 OR 指定一个或多个条件。
- 你可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句来指定条件。
当你想删除数据表中指定的记录时 WHERE 子句是非常有用的。
2. like 用法¶
以下我们将在 SQL SELECT 命令中使用 WHERE...LIKE 子句来从MySQL数据表 leco 中读取数据。
mysql> select * from leco; +------+---------+--------+------+ | id | name | sex | age | +------+---------+--------+------+ | 1 | 张三 | female | 18 | | 2 | 李四 | male | 20 | | 3 | 王五 | male | 30 | | 4 | 赵六 | female | 40 | | 5 | 张三1 | female | 18 | | 6 | 张三2 | female | 18 | | 7 | 张三3 | female | 18 | | 8 | 张三4 | female | 18 | +------+---------+--------+------+ 8 rows in set (0.00 sec) mysql> select * from leco where name like '%张三'; +------+--------+--------+------+ | id | name | sex | age | +------+--------+--------+------+ | 1 | 张三 | female | 18 | +------+--------+--------+------+ 1 row in set (0.00 sec) mysql> select * from leco where name like '张三%'; +------+---------+--------+------+ | id | name | sex | age | +------+---------+--------+------+ | 1 | 张三 | female | 18 | | 5 | 张三1 | female | 18 | | 6 | 张三2 | female | 18 | | 7 | 张三3 | female | 18 | | 8 | 张三4 | female | 18 | +------+---------+--------+------+ 5 rows in set (0.01 sec)
3. 匹配¶
3.1 匹配位¶
like 匹配/模糊匹配,会与 % 和 _ 结合使用。
% - 百分号表示零个,一个或多个字符 _ - 下划线表示单个字符
运算符 | 描述 |
---|---|
'%a' | 以a结尾的数据 |
'a%' | 以a开头的数据 |
'%a%' | 含有a的数据 |
'a' | 三位且中间字母是a的 |
'_a' | 两位且结尾字母是a的 |
'a_' | 两位且开头字母是a的 |
3.2 例子¶
查询以 张三 字段开头的信息。 SELECT * FROM leco WHERE name LIKE '张三%'; 查询包含 张三 字段的信息。 SELECT * FROM leco WHERE name LIKE '%张三%'; 查询以 张三 字段结尾的信息。 SELECT * FROM leco WHERE name LIKE '%张三';