《MySQL必知必会》第6-7章 过滤数据与数据过滤
1. WHERE子句
根据WHERE子句中指定的搜索条件进行过滤,WHERE子句在表名之后给出.
1 | mysql> select prod_name,prod_price from products where prod_price = 2.50; |
在同时使用ORDERBY和WHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误
2. WHERE子句操作符
操作符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 在指定的两个值之间 |
3. WHERE子句操作
3.1 检索单个值
1 | mysql> select prod_name,prod_price from products where prod_name = 'fuses'; |
MySQL在执行匹配时默认不区分大小写,所以fuses与Fuses匹配。
3.2 不匹配检查
1 | mysql> select vend_id,prod_name from products where vend_id <> 1003; |
`<>`和`!=`的作用是相同的,上面的语句还可以写作: `select vend_id,prod_name from products where vend_id != 1003;`
如果仔细观察上述WHERE子句中使用的条件,会看到有的值括在单引号内(如前面使用的’fuses’),而有的值未括起来。单引号用来限定字符串。如果将值与串类型的列进行比较,则需要限定引号。用来与数值列进行比较的值不用引号。
3.3 范围检查
检查某个范围的值,可使用BETWEEN操作符。它需要两个值,即范围的开始值和结束值。
1 | mysql> select prod_name,prod_price from products where prod_price between 5 and 10; |
3.4 空值检查
NULL 无值(no value),它与字段包含0、空字符串或仅仅包含空格不同。
1 | mysql> select cust_id from customers where cust_email is null; |
4. 组合WHERE子句
4.1 AND操作符
通过不止一个列进行过滤,可使用AND操作符给WHERE子句附加条件。
用在WHERE子句中的关键字,用来指示检索满足所有给定条件的行。
1 | mysql> select prod_id,prod_price,prod_name from products where vend_id = 1003 and prod_price <= 10; |
添加多个过滤条件,每添加一条就要使用一个AND。
4.2 OR操作符
OR操作符告诉DBMS匹配任一条件而不是同时匹配两个条件。
1 | mysql> select prod_name,prod_price from products where vend_id = 1002 or vend_id = 1003; |
4.3 计算次序
SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。
1 | mysql> select prod_name,prod_price from products where (vend_id = 1002 or vend_id = 1003) and prod_price >=10; |
圆括号具有较AND或OR操作符高的计算次序,DBMS首先过滤圆括号内的OR条件。
任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操作符。不要过分依赖默认计算次序,即使它确实是你想要的东西也是如此。使用圆括号没有什么坏处,它能消除歧义。
5. IN操作符
IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由逗号分隔的清单,全都括在圆括号中。
1 | mysql> select prod_name,prod_price from products where vend_id in (1002,1003) order by prod_name; |
IN操作符 WHERE子句中用来指定要匹配值的清单的关键字,功能与OR相当。
IN操作符的优点:
- 在使用长的合法选项清单时,IN操作符的语法更清楚且更直观。
- 在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
- IN操作符一般比OR操作符清单执行更快。
- IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。第14章将对此进行详细介绍。
6. NOT操作符
WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。
1 | mysql> select prod_name,prod_price from products where vend_id not in (1002,1003) order by prod_name; |
MySQL支持使用NOT对IN、BETWEEN和 EXISTS子句取反,这与多数其他DBMS允许使用NOT对各种条件取反有很大的差别。
Tips
欢迎收藏和转发,感谢你的支持!(๑•̀ㅂ•́)و✧
欢迎关注我:后端小哥,专注后端开发,希望和你一起进步!