在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名(FROM子句)之后给出
SELECT prod_name,prod_price
FROM products
where prod_price = 2.5;
ORDER BY和WHERE同时使用时
ORDER BY位于WHERE之后
SELECT prod_name,prod_price
FROM products
where prod_name = 'fuses';
SELECT prod_name,prod_price
FROM products
where prod_price<10;
SELECT vend_id,prod_name
FROM products
where vend_id <> 1003;
SELECT vend_id,prod_name
FROM products
where vend_id != '1003';
BETWEEN匹配范围中所有的值,包括指定的开始值和结束值
SELECT prod_name,prod_price
FROM products
where prod_price BETWEEN 5 AND 10;
NULL无值(no value),它与字段包含0、空字符串或仅仅包含空格不同
SELECT prod_name
FROM products
where prod_price IS NULL;##返回价格为空的名字
在过滤数据时,一定要验证返回数据中确实给出了被过滤列具有NULL的行
SELECT cust_id
FROM customers
where cust_email IS NULL;
SELECT prod_id,prod_price,prod_name
FROM products
where vend_id = 1003 AND prod_price <=10;
SELECT prod_price,prod_name
FROM products
where vend_id = 1003 OR vend_id=1002;
假如需要列出价格为10美元(含)以上且由1002或1003制造的所有产品
SELECT prod_name,prod_price
FROM products
where vend_id = 1002 OR vend_id=1003 AND prod_price >=10 ;
返回的行中有两行价格小于10美元,显然,返回的行未按预期的进行过滤。为什么会这样呢?
原因在于计算的次序。SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符
AND 优先级大于 OR
SELECT prod_name,prod_price
FROM products
where (vend_id = 1002 OR vend_id=1003) AND prod_price >=10 ;
此为我们所想要的
注:任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操作符
圆括号在WHERE子句中还有另外一种用法
IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配
IN取合法值的由逗号分隔的清单,全都括在圆括号中
SELECT prod_name,prod_price
FROM products
where vend_id IN (1002,1003)
ORDER BY prod_name;
IN操作符后跟由逗号分隔的合法值清单,整个清单必须括在圆括号中。
IN操作符完成与OR相同的功能
SELECT prod_name,prod_price
FROM products
where vend_id =1002 OR vend_id=1003
ORDER BY prod_name;
IN操作符优点
功能: 否定它之后所跟的任何条件
SELECT prod_name,prod_price
FROM products
where vend_id NOT IN(1002,1003)
ORDER BY prod_name;
通配符(wildcard):用来匹配值的一部分的特殊字符
搜索模式(search pattern):由字面值、通配符或两者组合构成的搜索条件
为在搜索子句中使用通配符,必须使用LIKE操作符
%:表示任何字符出现任意次数
#找出所有以词jet起头的产品
SELECT prod_id,prod_name
FROM products
where prod_name LIKE 'jet%'
SELECT prod_id,prod_name
FROM products
where prod_name LIKE '%anvil%'
注:%可匹配 0,1,多个字符,不能匹配NULL
注:下划线(_)只能匹配一个字符,要注意空格,空格也是字符
SELECT prod_id,prod_name
FROM products
where prod_name LIKE '_ ton anvil'
SELECT prod_id,prod_name
FROM products
where prod_name LIKE '% ton anvil'
通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长
技巧: