(原创)SQL总结(二)

过滤数据

有时候在搜索时需要指定搜索范围,过滤掉一些不需要输出的数据

使用where子句

SELECT prod_name,prod_id,prod_price FROM Products WHERE prod_price=3.49;表示输出价格为3.49的所有行的name,id,price项。
注意,如果要使用排序,那么ORDER BY一定要位于WHERE子句之后。

where子句的操作符

这一部分看书即可,包括等于=,不等于<>,小于<,等操作符
另外还有BETWEEN表示在指定的两个值之间,IS NULL表示为NULL值
SELECT prod_name,prod_price FROM Products WHERE prod_price BETWEEN 5 AND 10 ORDER BY prod_name;
如果操作符后面是字符串,那么需要将字符串用单引号,如果是数值,则不需要。
SELECT prod_name,prod_price FROM Products WHERE prod_price IS NULL;

高级数据过滤

组合where子句

AND OR
SELECT prod_name,prod_id,prod_price FROM Products WHERE prod_price<=4 AND vend_id ='DLL01';

求值顺序

如果,在where子句中and和or太多,容易造成输出错误问题,因为在处理OR之前,会先处理AND,这可能与我们的初衷不同。因此,我们需要时刻添加括号来保证求值顺序。
SELECT prod_name,prod_id,prod_price FROM Products WHERE (vend_id ='DLL01' OR vend_id ='BRS01') AND prod_price>=10;

IN

SELECT prod_name,prod_id,prod_price FROM Products WHERE vend_id IN ('DLL01','BRS01') AND prod_price>=10;
IN与OR完成了相同的功能。

NOT

用来否定其后所跟的任何条件。
SELECT prod_name,prod_id,prod_price FROM Products WHERE NOT vend_id 'DLL01' ORDER BY prod_price;

通配符进行数据过滤

LIKE操作符

问题引出,怎么搜索产品名称中包含文本 bean bag 的所有产品?
通配符:用来匹配值的一部分的特殊字符。
搜索模式:有字面值、通配符或两者组合构成的搜索条件。
注意 通配符搜索只能作用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索。
最常使用的通配符是%
SELECT prod_id,prod_name FROM Products WHERE prod_name LIKE 'Fish%';找出所有以词Fish起头的产品。
注意,有的数据库区分大小写,但是MYSQL不区分。
SELECT prod_id,prod_name FROM Products WHERE prod_name LIKE '%bean bag%';
比较有用的地方是根据邮件地址的一部分来查找电子邮件。如 WHERE email LIKE '%@sina.com';
注 %不能匹配NULL。
下划线(_)通配符。
与%的区别,一个_只匹配单个字符,两个_就匹配两个字符,而一个%就能匹配多个字符。
SELECT prod_id,prod_name FROM Products WHERE prod_name LIKE '__ inch teddy bear';可以匹配inch前的两个字符。
方括号[]通配符。
用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符。
只有ACCESS和SQL Server支持集合。

原文地址:https://www.cnblogs.com/rayshaw/p/9021123.html