SQL必知必会阅读笔记(过滤数据、高级数据过滤、用通配符进行过滤)

四、过滤数据

1、使用WHERE子句

SELECT prod_name, prod_price
FROM Products
WHERE prod_price = 3.49; 

     这条语句从products表中检索两个列,但不返回所有行,只返回prod_price值为3.49的行。

     在同时使用ORDER BYWHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误。

2、WHERE子句操作符

   

     BETWEEN的使用:

SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10;

     说明:该例子检索价格在5美元和10美元之间的所有产品。

     

     SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值的列。这个WHERE子句就是IS NULL子句。

     通过过滤选择不包含指定值的所有行时,你可能希望返回含NULL值的行。但是这做不到。因为未知(unknown)有特殊的含义,数据库不知道它们是否匹配,所以在进行匹配过滤或非匹配过滤时,不会返回这些结果。


五、高级数据过滤

1、AND操作符

     要通过不止一个列进行过滤,可以使用AND操作符给WHERE子句附加条件。

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

     说明:SQL语句检索由供应商DLL01制造且价格小于等于4美元的所有产品的名称和价格。

     可以增加多个过滤条件,每个条件间都要使用AND关键字。

2、OR操作符

     或操作,如下:

SELECT prod_name, prod_price
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = ‘BRS01’;

     正常情况下,AND和OR一起用的时候,AND的优先级比较高,所以推荐加括号将要优先操作的子句括起来。

     任何时候使用具有ANDOR操作符的WHERE子句,都应该使用圆括号明确地分组操作符。不要过分依赖默认求值顺序,即使它确实如你希望的那样。使用圆括号没有什么坏处,它能消除歧义。

3、IN操作符

     IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取一组由逗号分隔、括在圆括号中的合法值。

SELECT prod_name, prod_price
FROM Products
WHERE vend_id IN ( 'DLL01', 'BRS01' )
ORDER BY prod_name;

     说明:SELECT语句检索由供应商DLL01BRS01制造的所有产品。IN操作符后跟由逗号分隔的合法值,这些值必须括在圆括号中。类似于OR操作符的功能。

     IN操作符的优点:

                        在有很多合法选项时,IN操作符的语法更清楚,更直观。
                        在与其他AND和OR操作符组合使用IN时,求值顺序更容易管理。
                        IN操作符一般比一组OR操作符执行得更快(在上面这个合法选项很少的例子中,你看不出性能差异)。
                        IN的最大优点是可以包含其他SELECT语句,能够更动态地建立WHERE子句。

4、NOT操作符

     WHERE子句中的NOT操作符有且只有一个功能,那就是否定其后所跟的任何条件。因为NOT从不单独使用(它总是与其他操作符一起使用),所以它的语法与其他操作符有所不同。NOT关键字可以用在要过滤的列前,而不仅是在其后。

SELECT prod_name
FROM Products
WHERE NOT vend_id = 'DLL01'
ORDER BY prod_name;

     说明:列出除DLL01之外的所有供应商制造的产品。

     分析:为什么使用NOT?对于这里的这种简单的WHERE子句,使用NOT确实没有什么优势。但在更复杂的子句中,NOT是非常有用的。例如,在与IN操作符联合使用时,NOT可以非常简单地找出与条件列表不匹配的行。


六、用通配符进行过滤

1、LIKE操作符

     利用通配符,可以创建比较特定数据的搜索模式。在这个例子中,如果你想找出名称包含bean bag的所有产品,可以构造一个通配符搜索模式,找出在产品名的任何位置出现bean bag的产品。

     通配符(wildcard):用来匹配值的一部分的特殊字符。

     搜索模式(search pattern):由字面值、通配符或两者组合构成的搜索条件。

     通配符本身实际上是SQLWHERE子句中有特殊含义的字符,SQL支持几种通配符。为在搜索子句中使用通配符,必须使用LIKE操作符。LIKE指示DBMS,后跟的搜索模式利用通配符匹配而不是简单的相等匹配进行比较。

     谓词(predicate操作符何时不是操作符?答案是,它作为谓词时。从技术上说,LIKE是谓词而不是操作符。虽然最终的结果是相同的,但应该对此术语有所了解,以免在SQL文献或手册中遇到此术语时不知所云。

     通配符搜索只能用于文本字段(串),非文本数据类型字段不能使用通配符搜索。

2、百分号(%)通配符

     (1)、最常使用的通配符是百分号(%)。在搜索串中,%表示任何字符出现任意次数。例如,为了找出所有以词Fish起头的产品,可发布以下SELECT语句:

SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE 'Fish%';

     说明:此例子使用了搜索模式'Fish%'。在执行这条子句时,将检索任意以Fish起头的词。%告诉DBMS接受Fish之后的任意字符,不管它有多少字符。

     注意:如果使用的是Microsoft Access,需要使用 而不是%

    (2)、 通配符可在搜索模式中的任意位置使用,并且可以使用多个通配符。下面的例子使用两个通配符,它们位于模式的两端:

SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '%bean bag%';

     说明:搜索模式'%bean bag%'表示匹配任何位置上包含文本bean bag的值,不论它之前或之后出现什么字符。

     (3)、通配符也可以出现在搜索模式的中间,虽然这样做不太有用。下面的例子找出以F起头、以y结尾的所有产品:

SELECT prod_name
FROM Products
WHERE prod_name LIKE 'F%y';
     说明: 有一种情况下把通配符放在搜索模式中间是很有用的,就是根据邮件地址的一部分来查找电子邮件,例如 WHERE email LIKE b%@forta.com


     注意:除了能匹配一个或多个字符外,%还能匹配0个字符。%代表搜索模式中给定位置的0个、1个或多个字符。

               通配符%看起来像是可以匹配任何东西,但有个例外,这就是NULL。子句WHERE prod_name LIKE '%'不会匹配产品名称为NULL的行。

猜你喜欢

转载自blog.csdn.net/MessiNine/article/details/80682980