mysql模糊查询固定某个字符

mysql模糊查询固定某个字符,第1张

使用mysql模糊查询时,如果输入特殊字符,比如%,_会导致查询条件匹配所有记录,因为mysql的模糊查询要使用like关键字,而%和_分别时通配符,%表示任意个任意字符,_表示任意一个字符,如果要查询的字符包含%或_,会导致查询条件无效。

这个问题,首先要将%和_符号进行转义,这样就与mysql的%和_通配符不冲突,

在特殊字符前加 / ,特殊字符分别转义成

# SELECT 数据查询(二)

## 对查询结果排序 ORDER BY

ORDER BY 关键字主要用来将查询结果中的数据按照一定的顺序进行排序

1. 语法: - `order by 字段名>[asc|desc]`

- 说明 asc 按照升序排序【默认】, desc 按照降序排序

2. 注意:

- ORDER BY 关键字后可以跟子查询 - 当排序的字段中存在空值时,ORDER BY 会将该空值作为最小值来对待

- 当排序的字段中存在空值时,ORDER BY 会将该空值作为最小值来对待查询数据按字母升序进行排序(A Z),但数据的排序并不仅限于此,还可以使用 ORDER BY 中的 DESC 对查询结果进行降序排序(Z A)。

## 条件查询数据 WHERE

如果需要有条件的从数据表中查询数据,可以使用 WHERE 关键字来指定查询条件。

1. 语法 - `WHERE conditons`

- 带比较运算符和逻辑运算符的查询条件

- 带 BETWEEN AND 关键字的查询条件

- 带 IS NULL 关键字的查询条件

- 带 IN 关键字的查询条件 - 带 LIKE 关键字的查询条件

### 单条件查询

### 多条件查询

在 WHERE 关键词后可以有多个查询条件,这样能够使查询结果更加精确。

多个查询条件时用逻辑运算符 `AND(&&)、OR(||)` 或 `XOR` 隔开。

1. AND :记录 满足所有条件,才会被查询出结果

2. OR : 记录 满足任意一个查询条件,才会被查询出结果

3. XOR : 记录 满足其中一个条件,并且不满足另外一个条件是,才会被查询出结果

>OR、AND 和 XOR 可以一起使用,但是在使用时要注意运算符的优先级。

http://c.biancheng.net/view/7399.html

### 模糊查询 LIKE [新知识 4me]

1. 语法:

- `[NOT]LIKE`

- NOT :可选参数,字段中的内容与指定的字符串不匹配时满足条件。

- 字符串:指定用来匹配的字符串。“字符串”可以是一个很完整的字符串,也可以包含通配符。

LIKE 关键字支持百分号` % `和下划线` _ `通配符。

#### 带有“%”通配符的查询

“%”是 MySQL 中最常用的通配符,它能代表 **任何长度的字符串** ,字符串的长度可以为 0。

例如,a%b表示以字母 a 开头,以字母 b 结尾的任意长度的字符串。该字符串可以代表 ab、acb、accb、accrb 等字符串。

注意:匹配的字符串必须加 *单引号* 或 *双引号* 。

#### 带有“_”通配符的查询

“_”只能代表单个字符,字符的长度不能为 0。 例如,a_b可以代表 acb、adb、aub 等字符串。

#### LIKE 区分大小写(默认不区分)

默认情况下,LIKE 关键字匹配字符的时候是 不 区分大小写的。如果需要 可以加入`BINARY`关键字

#### 使用通配符的注意事项和技巧

1. 注意事项:

- 注意大小写。MySQL 默认是不区分大小写的。如果区分大小写,像“Tom”这样的数据就不能被“t%”所匹配到。

- 注意尾部的空格 尾部空格会干扰通配符的匹配。例如,“T% ”就不能匹配到“Tom”。

- 注意NULL。”%”通配符可以到匹配任意字符,但是不能匹配 NULL。也就是说 “%”匹配不到 tb_students_info 数据表中值为 NULL 的记录。

2. 使用技巧:

- 不要过度使用通配符,如果其它 *** 作符能达到相同的目的,应该使用其它 *** 作符。因为 MySQL 对通配符的处理一般会比其他 *** 作符花费更长的时间。

- 在确定使用通配符后,除非绝对有必要,否则不要把它们用在字符串的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。

- 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。 ** *拓展* ** 如果查询内容中包含通配符,可以使用“”转义符。

*** 2021-12-23 今天先学到这里 明天继续 MySql 的查询 学习

MySql字符转义

在字符串中,某些序列具有特殊含义。这些序列均用反斜线(‘\’)开始,即所谓的转义字符。MySQL识别下面的转义序列:

\0

ASCII 0(NUL)字符。

\'

单引号(‘'’)。

\"

双引号(‘"’)。

\b

退格符。

\n

换行符。

\r

回车符。

\t

tab字符。

\Z

ASCII 26(控制(Ctrl)-Z)。该字符可以编码为‘\Z’,以允许你解决在Windows中ASCII 26代表文件结尾这一问题。(如果你试图使用mysql db_name <file_name,ASCII 26会带来问题)。

\\

反斜线(‘\’)字符。

\%

‘%’字符。参见表后面的注解。

\_

‘_’字符。参见表后面的注解。

这些序列对大小写敏感。例如,‘\b’解释为退格,但‘\B’解释为‘B’。

‘\%’和‘\_’序列用于搜索可能会解释为通配符的模式匹配环境中的‘%’和‘_’文字实例。参见12.3.1节,“字符串比较函数”。请注意如果你在其它环境中使用‘\%’或‘\_’,它们返回字符串‘\%’和‘\_’,而不是‘%’和‘_’。

在其它转义序列中,反斜线被忽略。也就是说,转义字符解释为仿佛没有转义。

有几种方式可以在字符串中包括引号:

· 在字符串内用‘'’引用的‘'’可以写成‘''’。

· 在字符串内用‘"’引用的‘"’可以写成‘""’。

· 可以在引号前加转义字符(‘\’)。

· 在字符串内用‘"’引用的‘'’不需要特殊处理,不需要用双字符或转义。同样,在字符串内用‘'’引用的‘"’也不需要特殊处理。

下面的SELECT语句显示了引用和转义如何工作:

mysql>SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'

+-------+---------+-----------+--------+--------+

| hello | "hello" | ""hello"" | hel'lo | 'hello |

+-------+---------+-----------+--------+--------+

mysql>SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"

+-------+---------+-----------+--------+--------+

| hello | 'hello' | ''hello'' | hel"lo | "hello |

+-------+---------+-----------+--------+--------+

mysql>SELECT 'This\nIs\nFour\nLines'

+--------------------+

| This

Is

Four

Lines |

+--------------------+

mysql>SELECT 'disappearing\ backslash'

+------------------------+

| disappearing backslash |

+------------------------+

如果你想要在字符串列内插入二进制数据(例如BLOB),必须通过转义序列表示下面的字符:

NUL

NUL字节(ASCII 0)。用‘\0’表示该字符(反斜线后面跟一个ASCII‘0’字符)。

\

反斜线(ASCII 92)。用‘\\’表示该字符。

'

单引号(ASCII 39)。用‘\'’表示该字符。

"

双引号(ASCII 34)。用‘\"’表示该字符。

当编写应用程序时,在包含这些特殊字符的字符串用于发送到MySQL服务器的SQL语句中的数据值之前,必须对它们正确进行转义。可以用两种方法来完成:

· 用转义特殊字符的函数处理字符串。例如,在C程序中,可以使用mysql_real_escape_string() C API函数来转义字符。参见25.2.3.52节,“mysql_real_escape_string()”。Perl DBI接口提供一个quote方法来将特殊字符转换为正确的转义序列。参见25.4节,“MySQL Perl API”。

· 显式转义特殊字符,许多MySQL API提供了占位符功能,允许你在查询字符串中插入特殊标记,然后当你发出查询时将数据值同它们绑定起来。在这种情况下,API关注转义值中的特殊字符。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8624861.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存