Home Database Mysql Tutorial MySql官方手册学习笔记2 MySql的模糊查询和正则表达式_MySQL

MySql官方手册学习笔记2 MySql的模糊查询和正则表达式_MySQL

Jun 01, 2016 pm 01:23 PM
expression

正则表达式

bitsCN.com

SQL模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。在 MySQL中,SQL的模式默认是忽略大小写的。下面给出一些例子。注意使用SQL模式时,不能使用=或!=;而应使用LIKE或NOT LIKE比较操作符。

要想找出以“b”开头的名字:

 

mysql&gt; <strong>SELECT * FROM pet WHERE name LIKE 'b%';</strong>
Copy after login
+--------+--------+---------+------+------------+------------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
| name   | owner  | species | sex  | birth      | death      |
Copy after login
Copy after login
+--------+--------+---------+------+------------+------------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       |
Copy after login
Copy after login
| Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 |
Copy after login
Copy after login
+--------+--------+---------+------+------------+------------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
 
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login

要想找出以“fy”结尾的名字:

 

mysql&gt; <strong>SELECT * FROM pet WHERE name LIKE '%fy';</strong>
Copy after login
+--------+--------+---------+------+------------+-------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
| name   | owner  | species | sex  | birth      | death |
Copy after login
Copy after login
+--------+--------+---------+------+------------+-------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
| Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  |
Copy after login
Copy after login
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  |
Copy after login
Copy after login
+--------+--------+---------+------+------------+-------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
 
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login

要想找出包含“w”的名字:

 

mysql&gt; <strong>SELECT * FROM pet WHERE name LIKE '%w%';</strong>
Copy after login
+----------+-------+---------+------+------------+------------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
| name     | owner | species | sex  | birth      | death      |
Copy after login
Copy after login
+----------+-------+---------+------+------------+------------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
| Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       |
Copy after login
Copy after login
| Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
Copy after login
Copy after login
| Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       |
Copy after login
Copy after login
+----------+-------+---------+------+------------+------------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
 
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login

要想找出正好包含5个字符的名字,使用“_”模式字符:

 

mysql&gt; <strong>SELECT * FROM pet WHERE name LIKE '_____';</strong>
Copy after login
+-------+--------+---------+------+------------+-------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
| name  | owner  | species | sex  | birth      | death |
Copy after login
Copy after login
Copy after login
+-------+--------+---------+------+------------+-------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
Copy after login
Copy after login
Copy after login
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
Copy after login
Copy after login
Copy after login
+-------+--------+---------+------+------------+-------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
 
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login

MySQL提供的模式匹配的其它类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。

扩展正则表达式的一些字符是:

         ‘.'匹配任何单个的字符。

         字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”“b”“c”。为了命名字符的范围,使用一个“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。

         “ * ”匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配任何数量的数字,而“.*”匹配任何数量的任何字符。

  • 如果REGEXP模式与被测试值的任何地方匹配,模式就匹配(这不同于LIKE模式匹配,只有与整个值匹配,模式才匹配)。
  • 为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”在模式的结尾用“$”

为了说明扩展正则表达式如何工作,下面使用REGEXP重写上面所示的LIKE查询:

为了找出以“b”开头的名字,使用“^”匹配名字的开始:

 

mysql&gt; <strong>SELECT * FROM pet WHERE name REGEXP '^b';</strong>
Copy after login
+--------+--------+---------+------+------------+------------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
| name   | owner  | species | sex  | birth      | death      |
Copy after login
Copy after login
+--------+--------+---------+------+------------+------------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       |
Copy after login
Copy after login
| Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 |
Copy after login
Copy after login
+--------+--------+---------+------+------------+------------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
 
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login

如果你想强制使REGEXP比较区分大小写,使用BINARY关键字使其中一个字符串变为二进制字符串。该查询只匹配名称首字母的小写‘b'。

 

mysql&gt; <strong>SELECT * FROM pet WHERE name REGEXP BINARY '^b';</strong>
Copy after login
<strong> </strong>
Copy after login

为了找出以“fy”结尾的名字,使用“$”匹配名字的结尾:

 

mysql&gt; <strong>SELECT * FROM pet WHERE name REGEXP 'fy$';</strong>
Copy after login
+--------+--------+---------+------+------------+-------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
| name   | owner  | species | sex  | birth      | death |
Copy after login
Copy after login
+--------+--------+---------+------+------------+-------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
| Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  |
Copy after login
Copy after login
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  |
Copy after login
Copy after login
+--------+--------+---------+------+------------+-------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
 
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login

为了找出包含一个“w”的名字,使用以下查询:

 

mysql&gt; <strong>SELECT * FROM pet WHERE name REGEXP 'w';</strong>
Copy after login
+----------+-------+---------+------+------------+------------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
| name     | owner | species | sex  | birth      | death      |
Copy after login
Copy after login
+----------+-------+---------+------+------------+------------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
| Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       |
Copy after login
Copy after login
| Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
Copy after login
Copy after login
| Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       |
Copy after login
Copy after login
+----------+-------+---------+------+------------+------------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
 
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login

既然如果一个正则表达式出现在值的任何地方,其模式匹配了,就不必在先前的查询中在模式的两侧放置一个通配符以使得它匹配整个值,就像你使用了一个SQL模式那样。

为了找出包含正好5个字符的名字,使用“^”“$”匹配名字的开始和结尾,和5个“.”实例在两者之间:

 

mysql&gt; <strong>SELECT * FROM pet WHERE name REGEXP '^.....$';</strong>
Copy after login
+-------+--------+---------+------+------------+-------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
| name  | owner  | species | sex  | birth      | death |
Copy after login
Copy after login
Copy after login
+-------+--------+---------+------+------------+-------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
Copy after login
Copy after login
Copy after login
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
Copy after login
Copy after login
Copy after login
+-------+--------+---------+------+------------+-------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
 
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login

你也可以使用“{n}”“重复n次”操作符重写前面的查询:

 

mysql&gt; <strong>SELECT * FROM pet WHERE name REGEXP '^.{5}$';</strong>
Copy after login
+-------+--------+---------+------+------------+-------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
| name  | owner  | species | sex  | birth      | death |
Copy after login
Copy after login
Copy after login
+-------+--------+---------+------+------------+-------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
Copy after login
Copy after login
Copy after login
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
Copy after login
Copy after login
Copy after login
+-------+--------+---------+------+------------+-------+
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
bitsCN.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article

Hot Article

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to solve Python expression syntax errors? How to solve Python expression syntax errors? Jun 24, 2023 pm 05:04 PM

How to solve Python expression syntax errors?

In C and C++, comma is used to separate expressions or statements In C and C++, comma is used to separate expressions or statements Sep 09, 2023 pm 05:33 PM

In C and C++, comma is used to separate expressions or statements

Introduction to exponential function expressions in C language Introduction to exponential function expressions in C language Feb 18, 2024 pm 01:11 PM

Introduction to exponential function expressions in C language

lambda expression in Java lambda expression in Java Jun 09, 2023 am 10:17 AM

lambda expression in Java

Loop over a collection using lambda expressions Loop over a collection using lambda expressions Feb 19, 2024 pm 07:32 PM

Loop over a collection using lambda expressions

Advanced Guide to Python Lambda Expressions: From Beginner to Mastery Advanced Guide to Python Lambda Expressions: From Beginner to Mastery Feb 24, 2024 pm 03:31 PM

Advanced Guide to Python Lambda Expressions: From Beginner to Mastery

The try statement block in PHP8.0 supports expressions The try statement block in PHP8.0 supports expressions May 14, 2023 am 08:12 AM

The try statement block in PHP8.0 supports expressions

Java Lambda Expression in Practice: Unlocking the Mysteries of Functional Programming with Code Java Lambda Expression in Practice: Unlocking the Mysteries of Functional Programming with Code Feb 26, 2024 am 10:25 AM

Java Lambda Expression in Practice: Unlocking the Mysteries of Functional Programming with Code

See all articles