SQL--使用WHERE子句过滤检索数据
3、过滤数据
search criteria搜索条件 filter condition过滤条件
使用WHERE 子句---
where子句操作符
不等于<> / != #不是所有的DBMS都支持这两种操作符,通常他们俩可以互换
不小于!<
小于等于<=
小于<
在两者数值之间 BETWEEN
为NULL值 IS NULL
并非所有DBMS都支持这些操作符,且有些操作符重复意思
3.1、检查单个值:
SELECT prod_name, prod_price
FROM Products
WHERE prod_price<10; #检索出价格低于10的产品名字
3.2、不匹配检查----过滤不包含某值的数据,这种过滤不能返回NULL值
SELECT vend_id, prod_name
FROM Products
WHERE vend_id<>'DLL01'; #检索出不是DLL01供应商的产品
#使用引号限定字符串类型值
3.3 范围性检查------BETWEEN
SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10; #检索价格在5-10之间的产品,指定开始值与结束值,使用AND关键字分隔
3.4空值检查----IS NULL #NULL不仅仅等于值为0、空字符串、包含空格
SELECT prod_name, prod_price
FROM Products
WHERE prod_price IS NULL; #返回价格字段列为空的产品,若无则不返回数据
练习:
SELECT prod_id, prod_name
FROM Products
WHERE prod_price =9.49;
SELECT prod_id, prod_name
FROM Products
WHERE prod_price >=9.49;
SELECT distinct order_num
FROM Orderltems
WHERE order_num>=100;
SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 3 AND 6
ORDER BY prod_price DESC;
4、操作符operator--用来联结或改变WHERE子句中的子句的关键字,也叫逻辑操作符
4.1、组合使用WHERE子句
AND 条件都要满足
OR 满足任一条件即可
**AND 与OR 关键字的优先级
在WHERE 子句中同时使用AND 与OR需要使用'( )'区分优先级
( ) > AND>OR
例:SELECT prod_name, prod_price
FROM Products
WHERE (vend_id='DELL01' OR vend_id='BRS01' ) AND prod_price >=10; #检索出供应商为DELL01与BRS01且价格高于10的产品
4.2、IN操作符
用于指定条件范围,与OR关键字作用相当,由逗号分隔、括在圆括号中的合法值
例:SELECT prod_name, prod_price
FROM Products
WHERE vend_id IN ('DLL01','BRS01'); #检索供应商为这两个的产品
优点:可以包含其他SELECT语句,更动态地建立WHERE子句
4.3、NOT 操作符
用于否定其后所跟的所有条件,相当于'<>'的作用
例:SELECT prod_name, prod_price
FROM Products
WHERE NOT vend_id='DLL01'; #检索不是DLL01的产品
大多数DBMS允许使用NOT否定任何条件,MariaDB支持使用NOT否定IN、BETWEEN和EXISTS子句
练习:
SELECT vend_name
FROM Vendors
WHERE vend_country ='USA' AND vend_state='CA';
SELECT order_num, prod_id, quantity
FROM Orderltems
WHERE vend_id IN ('BR01', 'BR02','BR03') AND quantity >=100;
或者 WHERE (prod_id ='BR01'OR prod_id ='BR02' OR prod_id ='BR03') AND quantity>=100;
不可以 WHERE (prod_id='BR01' OR 'BR02' OR 'BR03')
SELECT prod_name, prod_price
FROM Products
WHERE prod_price>=3 AND prod_price<=6
ORDER BY prod_price;
ORDER BY子句应为最后一条子句