首页 > 编程笔记 > MySQL笔记 阅读:10

MySQL LIKE的用法(附带实例)

MySQL 中,想查找所有包含字符“ge”的水果名称,该如何查找呢?简单的比较操作在这里已经行不通了,需要使用通配符进行匹配查找,通过创建查找模式对表中的数据进行比较。执行这个任务的关键字是 LIKE。

通配符是一种在 SQL 的 WHERE 条件子句中拥有特殊意思的字符。SQL 语句中支持多种通配符,可以和 LIKE 一起使用的通配符有“%”和“_”。

为了方便演示 LIKE 的用法,需要往数据表插入如下数据:
mysql> INSERT INTO fruits (f_id, s_id, f_name, f_price)
       VALUES('a1', 101,'apple',5.2),
       ('b1',101,'blackberry', 10.2),
       ('bs1',102,'orange', 11.2),
       ('bs2',105,'melon',8.2),
       ('t1',102,'banana', 10.3),
       ('t2',102,'grape', 5.3),
       ('o2',103,'coconut', 9.2),
       ('c0',101,'cherry', 3.2),
       ('a2',103, 'apricot',2.2),
       ('l2',104,'lemon', 6.4),
       ('b2',104,'berry', 7.6),
       ('m1',106,'mango', 15.7),
       ('m2',105,'xbabay', 2.6),
       ('t4',107,'xbababa', 3.6),
       ('m3',105,'xxtt', 11.6),
       ('b5',107,'xxxx', 3.6);

使用 SELECT 语句查询 f_id 字段的数据:
mysql> SELECT f_id, f_name FROM fruits;
+------+------------+
| f_id | f_name     |
+------+------------+
| a1   | apple      |
| a2   | apricot    |
| b1   | blackberry |
| b2   | berry      |
| b5   | xxxx       |
| bs1  | orange     |
| bs2  | melon      |
| c0   | cherry     |
| l2   | lemon      |
| m1   | mango      |
| m2   | xbabay     |
| m3   | xxtt       |
| o2   | coconut    |
| t1   | banana     |
| t2   | grape      |
| t4   | xbababa    |
+-----+-------------+

MySQL LIKE百分号通配符(%)

百分号通配符(%)匹配任意长度的字符,甚至包括零字符。

【实例 1】查找所有以“b”字母开头的水果,SQL 语句如下:
SELECT f_id, f_name FROM fruits WHERE f_name LIKE 'b%';
查询结果如下:
+------+------------+
| f_id | f_name     |
+------+------------+
| b1  | blackberry  |
| b2  | berry       |
| t1  | banana      |
+------+------------+
该语句的查询结果返回所有以“b”开头的 f_id 和 f_name。“%”告诉 MySQL,返回所有以字母“b”开头的记录,而不管“b”后面有多少个字符。

在搜索匹配时,通配符“%”可以放在不同位置,如实例 2 所示。

【实例 2】在表 fruits 中,查询 f_name 中包含字母“g”的记录,SQL 语句如下:
SELECT f_id, f_name FROM fruits WHERE f_name LIKE '%g%';
查询结果如下:
+------+--------+
| f_id | f_name |
+------+--------+
| bs1  | orange |
| m1   | mango  |
| t2   | grape  |
+------+--------+
该语句查询字符串中包含字母“g”的水果名称,只要名字中有字母“g”,不管前面或后面有多少个字符,都满足查询的条件。

【实例 3】在表 fruits 中,查询 f_name 中以“b”开头并以“y”结尾的水果的名称,SQL 语句如下:
SELECT f_name FROM fruits WHERE f_name LIKE 'b%y';
查询结果如下:
+------------+
| f_name     |
+------------+
| blackberry |
| berry      |
+------------+
通过以上查询结果可以看到,“%”用于匹配在指定位置的任意数目的字符。

MySQL LIKE下画线通配符(_)

下画线通配符(_)一次只能匹配一个任意字符。

下画线通配符(_)的用法和“%”相同,区别是“%”可以匹配多个字符,而“_”只能匹配任意单个字符。如果要匹配多个字符,则需要使用相同个数的“_”,并且各个“_”之间没有空格。

【实例 4】在表 fruits 中,查询以字母“y”结尾且“y”前面只有 4 个字母的记录,SQL 语句如下:
SELECT f_id, f_name FROM fruits WHERE f_name LIKE '____y';
查询结果如下:
+------+--------+
| f_id | f_name |
+------+--------+
| b2   | berry  |
+------+--------+
从结果中可以看到,以“y”结尾且前面只有 4 个字母的记录只有一条。其他记录的 f_name 字段也有以“y”结尾的,但其总的字符串长度不为 5,因此不在返回结果中。

相关文章