数据库表中一般包含大量数据,而我们一般需要的是表数据的子集,所以只要指定好搜索条件,就可以检索到我们想要的数据
本节对应的是《Mysql必知必会》六、七章
过滤数据
通过WHERE子句指定搜索条件
使用WHERE子句
WHERE子句在FROM子句后面,ORDER BY子句在WHERE子句后面,因为先选出数据再排序
#查询价格为2.50的商品的名字
select prod_name,prod_price from products where prod_price = 2.50;
这个是简单的判断数值相等
WHERE子句操作符
操 作 符 | 说 明 |
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 在指定的两个值 |
检查单个值
#查询商品名称为fuses的商品和价格
select prod_name,prod_price from products where prod_name = 'fuses';
需要注意的是商品名是大写的Fuses,也就是说Mysql默认不区分大小写,另外字符串需要用单引号
#查询价格小于等于10的所有商品
select prod_name,prod_price from products where prod_price <= 10;
不匹配检查
#不是由供应商1003制造的产品
select vend_id,prod_name from products where vend_id != 1003;
其中 != 可以换成 <>
范围值检查
利用BETWEEN操作符检查某个范围的值
#查询价格为5-10的商品
select prod_name,prod_price from products where prod_price between 5 and 10;
需要注意的是between是闭区间,包括范围边界值5和10
#between用于字符
select prod_name,prod_price from products where prod_name between 'a' and 'z';
空值检查
如果一个列的值不存在,则称为空值NULL,需要注意的是空格和0是有值的,空值就是啥都没有
#查询顾客邮箱为空的顾客信息
select cust_id,cust_name from customers where cust_email is null;
数据过滤
上一部分主要是讲单一条件下对数据进行过滤,这一部分是通过组合WHERE子句来实现更高级的搜索条件
组合WHERE子句
操作符(operator) 用来联结或改变WHERE子句中的子句的关键字,也称为逻辑操作符(logical operator),以AND子句的方式或OR子句的方式使用。
AND操作符,就是逻辑与
#查询由供应商1003制造且价格小于等于10的产品信息
select prod_id,prod_name,prod_price from products where vend_id=1003 and prod_price <= 10;
如果有更多的条件,每两个条件之间一个AND
OR操作符,就是逻辑或
#查询供应商1002和1003制造的商品信息
select prod_name,prod_price from products where vend_id = 1002 or vend_id = 1003;
计算次序
AND与OR操作符可以组合进行复杂的过滤,但是如果一起用的时候会有一个优先级的问题,AND优先级高于OR
#查询供应商1002和1003生产的产品价格大于等于10的产品信息
select prod_name,prod_price from products where vend_id=1002 or vend_id=1003 and prod_price >= 10;
从结果可以看出,有两个商品价格低于10,原因就是AND优先级高于OR,所以为了避免错误多个条件一定要用括号
select prod_name,prod_price from products where (vend_id=1002 or vend_id=1003 ) and prod_price >= 10;
IN操作符
IN操作符用来指定条件范围,范围中的每个条件都会进行匹配
#查询供应商1002和1003制造的产品信息
select prod_name,prod_price from products where vend_id in (1002,1003) order by prod_name;
上述语句与下面语句等价的
select prod_name,prod_price from products where vend_id=1002 or vend_id=1003 order by prod_name;
IN操作符主要有自己的优点
在使用长的合法选项清单时,IN操作符的语法更清楚且更直观。
在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
IN操作符一般比OR操作符清单执行更快。
IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。
NOT操作符
NOT操作符是否定后面的所有条件
#查询除1002和1003供应商之外其他供应商制造的产品信息
select vend_id,prod_name,prod_price from products where vend_id not in (1002,1003);
NOT在后面复杂的SQL语句中很有用
下一节将会讲解匹配搜索