MySQL LIKE的用法(附带实例)
MySQL 中,想查找所有包含字符“ge”的水果名称,该如何查找呢?简单的比较操作在这里已经行不通了,需要使用通配符进行匹配查找,通过创建查找模式对表中的数据进行比较。执行这个任务的关键字是 LIKE。
通配符是一种在 SQL 的 WHERE 条件子句中拥有特殊意思的字符。SQL 语句中支持多种通配符,可以和 LIKE 一起使用的通配符有“%”和“_”。
为了方便演示 LIKE 的用法,需要往数据表插入如下数据:
使用 SELECT 语句查询 f_id 字段的数据:
【实例 1】查找所有以“b”字母开头的水果,SQL 语句如下:
在搜索匹配时,通配符“%”可以放在不同位置,如实例 2 所示。
【实例 2】在表 fruits 中,查询 f_name 中包含字母“g”的记录,SQL 语句如下:
【实例 3】在表 fruits 中,查询 f_name 中以“b”开头并以“y”结尾的水果的名称,SQL 语句如下:
下画线通配符(_)的用法和“%”相同,区别是“%”可以匹配多个字符,而“_”只能匹配任意单个字符。如果要匹配多个字符,则需要使用相同个数的“_”,并且各个“_”之间没有空格。
【实例 4】在表 fruits 中,查询以字母“y”结尾且“y”前面只有 4 个字母的记录,SQL 语句如下:
通配符是一种在 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,因此不在返回结果中。