2.1 默认不区分大小写

检查WHERE prod_name=‘fuses’语句,它返回prod_name的值为Fuses的一行。MySQL在执行匹配时默认不区分大小写,所以fuses与Fuses匹配。

  1. SELECT prod_name, prod_price
  2. FROM products
  3. WHERE prod_name = 'fuses'

image.png

2.2 不匹配检测 <>

  1. SELECT dept_id
  2. FROM sys_user
  3. WHERE dept_id <> 103

image.png

2.3 AND 与 OR组合

列出价格为10美元(含)以上且由1002或1003制造的所有产品
SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。当SQL看到上述WHERE子句时,它理解为由供应商1003制造的任何价格为10美元(含)以上的产品,或者由供应商1002制造的任何产品,而不管其价格如何。换句话说,由于 AND 在计算次序中优先级更高,操作符被错误地组合了

  1. SELECT prod_name, prod_price
  2. FROM products
  3. WHERE vend_id = 1002 OR vend_id = 1003 AND prod_price >= 10
  4. -- WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10

image.png

2.4 通配符

2.4.1 百分号通配符 %

在搜索串中,% 表示任何字符出现任意次数搜索可以是区分大小写的。如果区分大小写,‘%e%’与 tEst2 将不匹配

  1. SELECT dept_id, user_name
  2. FROM sys_user
  3. WHERE user_name LIKE '%e%'

image.png

2.4.2 下划线通配符 _

下划线只匹配单个字符而不是多个字符

  1. SELECT dept_id, user_name
  2. FROM sys_user
  3. WHERE user_name LIKE '_e%'

image.png

2.4.3 注意事项

  1. 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
  2. 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。
  3. 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。

    2.5 正则

    在 LIKE 和 REGEXP 之间有一个重要的差别:
  • LIKE 匹配整个列。如果被匹配的文本在列值中出现,LIKE 将不会找到它,相应的行也不被返回(除非使用通配符)。
  • 而 REGEXP 在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP 将会找到它,相应的行将被返回。这是一个非常重要的差别

LIKE 匹配整个串而 REGEXP 匹配子串。利用定位符,通过用 ^ 开始每个表达式,用 $ 结束每个表达式,可以使REGEXP的作用与LIKE一样。

  1. SELECT dept_id
  2. FROM sys_user
  3. WHERE dept_id like '106'

image.png

  1. SELECT dept_id
  2. FROM sys_user
  3. WHERE dept_id REGEXP '106'

image.png

2.5.1 .

. 是正则表达式语言中一个特殊的字符。它表示匹配任意一个字符。也可用 LIKE和通配符 来完成。

  1. SELECT dept_id, user_name
  2. FROM sys_user
  3. WHERE user_name REGEXP '.s'

2.5.2 OR |

搜索两个串之一(或者为这个串,或者为另一个串),使用 |

  1. SELECT prod_name
  2. FROM products
  3. WHERE prod_name REGEXP '1000 | 2000'

image.png

2.5.3 匹配几个字符之一

可通过指定一组用 [和] 括起来的字符来完成匹配特定的字符。

  1. SELECT prod_name
  2. FROM products
  3. WHERE prod_name REGEXP '[123] Ton'

image.png
使用了正则表达式[123] Ton。[123]定义一组字符,它的意思是匹配1或2或3,因此,1 ton和2 ton都匹配且返回(没有3 ton)。[ ]是另一种形式的OR语句。事实上,正则表达式 [123]Ton 为 [1|2|3]Ton 的缩写。

2.5.4 匹配特殊字符

匹配特殊字符,必须用 \ 为前导,转义。\- 表示查找-,\. 表示查找. 。为了匹配反斜杠(\)字符本身,需要使用 \\

  1. SELECT vend_name
  2. FROM vendors
  3. WHERE vend_name REGEXP '\\.'

image.png

2.5.5 匹配字符类

image.png

2.5.6 匹配多个实例

image.png
image.png

2.5.7 定位符

所有例子都是匹配一个串中任意位置的文本。为了匹特定位置的文本,需要使用定位符。
image.png
image.png