数据过滤之WHERE

1. 简单的WHERE子句

MySQL在执行匹配时默认不区分大小写
如:SELECT prod_name, prod_price FROM products WHERE prod_name = 'fuses';
所以fuses与Fuses都匹配出来了

何时使用引号
单引号用来限定字符串。
如果将值与串类型的列进行比较,则需要限定引号。用来与数值列进行比较的值不用引号。

where子句操作符

范围检查
在使用BETWEEN时,必须指定两个值---所需范围的低端值和高端值。这两个值必须用AND关键字分隔。BETWEEN匹配范围中所有的值,包括指定的开始值和结束值。

空值检查
在创建表时,表设计人员可以指定其中的列是否可以不包含值。在一个列不包含值时,称其为包含空值NULL。
NULL:无值(no value),它与字段包含0、空字符串或仅仅包含空格不同。
SELECT语句有一个特殊的WHERE子句,可以来检查具有NULL值得列。这个WHERE子句就是IS NULL子句。
如:SELECT cust_id FROM customers WHERE cust_email IS NULL;

note:
NULL与不匹配,在通过过滤选择出不具有特定值的行时,可能希望返回具有NULL值的行,但是,不行。因为未知具有特殊的含义,数据库不知道他们是否匹配,所以在匹配过滤或不匹配过滤时不返回它们。因此,在过滤数据时,一定要验证返回数据中确实给出了被过滤列具有NULL的行

2. where子句之NOT和IN操作符的使用

AND和OR操作符
计算次序:SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。
避免出错:任何使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操作符。

IN操作符
WHERE子句中用来指定要匹配值的清单的关键字,功能与OR相当;
使用IN操作符的优点具体如下:
1. 在使用长的合法选项清单时,IN操作符的语法更清楚且更直观。
2. 在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
3. IN操作符一般比OR操作符清单执行更快。
4. IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。

NOT操作符
WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件;
MySQL支持使用NOT对IN、BETWEEN和EXISTS子句取反,这与多数其他DBMS允许使用NOT对各种条件取反有很大的差别。

3. 通配符过滤之LIKE操作符

通配符:用来匹配值得一部分的特殊字符。
LIKE指示MySQL,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。

百分号(%)通配符
在搜索串中,%表示任何字符出现任意次数。
注意NULL,虽然似乎%通配符可以匹配任何东西,但有一个例外,即NULL。即使是WHERE prod_name LIKE '%'也不能匹配用值NULL作为产品的行。

下划线(_)通配符
下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符。

MySQL的通配符很有用。
但这种功能是有代价的:通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长。
通配符的使用技巧:
(1). 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
(2). 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。
(3). 仔细注意通配符的位置。如果放错地方,可能不会返回。 
 

猜你喜欢

转载自blog.csdn.net/chpllp/article/details/83344842