2.1 默认不区分大小写
检查WHERE prod_name=‘fuses’语句,它返回prod_name的值为Fuses的一行。MySQL在执行匹配时默认不区分大小写,所以fuses与Fuses匹配。
SELECT prod_name, prod_priceFROM productsWHERE prod_name = 'fuses'
2.2 不匹配检测 <>
SELECT dept_idFROM sys_userWHERE dept_id <> 103
2.3 AND 与 OR组合
列出价格为10美元(含)以上且由1002或1003制造的所有产品
SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。当SQL看到上述WHERE子句时,它理解为由供应商1003制造的任何价格为10美元(含)以上的产品,或者由供应商1002制造的任何产品,而不管其价格如何。换句话说,由于 AND 在计算次序中优先级更高,操作符被错误地组合了
SELECT prod_name, prod_priceFROM productsWHERE vend_id = 1002 OR vend_id = 1003 AND prod_price >= 10-- WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10
2.4 通配符
2.4.1 百分号通配符 %
在搜索串中,% 表示任何字符出现任意次数。搜索可以是区分大小写的。如果区分大小写,‘%e%’与 tEst2 将不匹配
SELECT dept_id, user_nameFROM sys_userWHERE user_name LIKE '%e%'
2.4.2 下划线通配符 _
下划线只匹配单个字符而不是多个字符
SELECT dept_id, user_nameFROM sys_userWHERE user_name LIKE '_e%'
2.4.3 注意事项
- 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
- 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。
- 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。
2.5 正则
在 LIKE 和 REGEXP 之间有一个重要的差别:
- LIKE 匹配整个列。如果被匹配的文本在列值中出现,LIKE 将不会找到它,相应的行也不被返回(除非使用通配符)。
- 而 REGEXP 在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP 将会找到它,相应的行将被返回。这是一个非常重要的差别
LIKE 匹配整个串而 REGEXP 匹配子串。利用定位符,通过用 ^ 开始每个表达式,用 $ 结束每个表达式,可以使REGEXP的作用与LIKE一样。
SELECT dept_idFROM sys_userWHERE dept_id like '106'

SELECT dept_idFROM sys_userWHERE dept_id REGEXP '106'
2.5.1 .
. 是正则表达式语言中一个特殊的字符。它表示匹配任意一个字符。也可用 LIKE和通配符 来完成。
SELECT dept_id, user_nameFROM sys_userWHERE user_name REGEXP '.s'
2.5.2 OR |
搜索两个串之一(或者为这个串,或者为另一个串),使用 |
SELECT prod_nameFROM productsWHERE prod_name REGEXP '1000 | 2000'
2.5.3 匹配几个字符之一
可通过指定一组用 [和] 括起来的字符来完成匹配特定的字符。
SELECT prod_nameFROM productsWHERE prod_name REGEXP '[123] Ton'

使用了正则表达式[123] Ton。[123]定义一组字符,它的意思是匹配1或2或3,因此,1 ton和2 ton都匹配且返回(没有3 ton)。[ ]是另一种形式的OR语句。事实上,正则表达式 [123]Ton 为 [1|2|3]Ton 的缩写。
2.5.4 匹配特殊字符
匹配特殊字符,必须用 \ 为前导,转义。\- 表示查找-,\. 表示查找. 。为了匹配反斜杠(\)字符本身,需要使用 \\
SELECT vend_nameFROM vendorsWHERE vend_name REGEXP '\\.'
2.5.5 匹配字符类
2.5.6 匹配多个实例
2.5.7 定位符
所有例子都是匹配一个串中任意位置的文本。为了匹特定位置的文本,需要使用定位符。


