day03-过滤数据

day03-过滤数据

使用where子句

SELECT prod_name, prod_price
FROM Products
WHERE prod_price = 3.49;



输出:

mysql> SELECT prod_name, prod_price
    -> FROM Products
    -> WHERE prod_price = 3.49;
+---------------------+------------+
| prod_name           | prod_price |
+---------------------+------------+
| Fish bean bag toy   |       3.49 |
| Bird bean bag toy   |       3.49 |
| Rabbit bean bag toy |       3.49 |
+---------------------+------------+
3 rows in set (0.00 sec)

mysql> 










注意:WHERE 子句的位置 
1.在同时使用 ORDER BY 和 WHERE 子句时,应该让 ORDER BY 位于WHERE 之后,否则将会产生错误
2.提示:有多少个 0? 
你在练习这个示例时,会发现显示的结果可能是 3.49、3.490、3.4900等。出现这样的情况,往往是因为 DBMS 指定了所使用的数据类型及其默认行为。所以,如果你的输出可能与书上的有点不同,不必焦虑,毕竟从数学角度讲,3.49 和 3.4900 是一样的。


where子句操作符

操作符 说明 操作符 说明
= 等于 > 大于
<> 不等于 >= 大于等于
!= 不等于 !> 不大于
< 小于 between 在指定的二个值之间
<= 小于等于 is null 为NULL值
!< 不小于
注意:

1.表中列出的某些操作符是冗余的(如< >与!=相同,!< 相当于 >=)。
并非所有 DBMS 都支持这些操作符。想确定你的 DBMS 支持哪些操作符,请参阅相应的文档。

检索单个值

SELECT prod_name, prod_price
FROM Products
WHERE prod_price < 10;




输出:

mysql> SELECT prod_name, prod_price
    -> FROM Products
    -> WHERE prod_price < 10;
+---------------------+------------+
| prod_name           | prod_price |
+---------------------+------------+
| Fish bean bag toy   |       3.49 |
| Bird bean bag toy   |       3.49 |
| Rabbit bean bag toy |       3.49 |
| 8 inch teddy bear   |       5.99 |
| 12 inch teddy bear  |       8.99 |
| Raggedy Ann         |       4.99 |
| King doll           |       9.49 |
| Queen doll          |       9.49 |
+---------------------+------------+
8 rows in set (0.00 sec)

mysql> 




SELECT prod_name, prod_price
FROM Products
WHERE prod_price <= 10;


输出:

mysql> SELECT prod_name, prod_price
    -> FROM Products
    -> WHERE prod_price <= 10;
+---------------------+------------+
| prod_name           | prod_price |
+---------------------+------------+
| Fish bean bag toy   |       3.49 |
| Bird bean bag toy   |       3.49 |
| Rabbit bean bag toy |       3.49 |
| 8 inch teddy bear   |       5.99 |
| 12 inch teddy bear  |       8.99 |
| Raggedy Ann         |       4.99 |
| King doll           |       9.49 |
| Queen doll          |       9.49 |
+---------------------+------------+
8 rows in set (0.00 sec)

mysql> 



不匹配检查

SELECT vend_id, prod_name
FROM Products
WHERE vend_id <> 'DLL01';



输出:
mysql> SELECT vend_id, prod_name
    -> FROM Products
    -> WHERE vend_id <> 'DLL01';
+---------+--------------------+
| vend_id | prod_name          |
+---------+--------------------+
| BRS01   | 8 inch teddy bear  |
| BRS01   | 12 inch teddy bear |
| BRS01   | 18 inch teddy bear |
| FNG01   | King doll          |
| FNG01   | Queen doll         |
+---------+--------------------+
5 rows in set (0.00 sec)

mysql> 





SELECT vend_id, prod_name
FROM Products
WHERE vend_id != 'DLL01';



输出:
mysql> SELECT vend_id, prod_name
    -> FROM Products
    -> WHERE vend_id != 'DLL01';
+---------+--------------------+
| vend_id | prod_name          |
+---------+--------------------+
| BRS01   | 8 inch teddy bear  |
| BRS01   | 12 inch teddy bear |
| BRS01   | 18 inch teddy bear |
| FNG01   | King doll          |
| FNG01   | Queen doll         |
+---------+--------------------+
5 rows in set (0.00 sec)

mysql> 




注意:何时使用引号 ?
如果仔细观察上述 WHERE 子句中的条件,会看到有的值括在单引号内,而有的值未括起来。单引号用来限定字符串。如果将值与字符串类型的列进行比较,就需要限定引号。用来与数值列进行比较的值不用引号。

范围值检查

要检查某个范围的值,可以使用 BETWEEN 操作符。其语法与其他 WHERE子句的操作符稍有不同,因为它需要两个值,即范围的开始值和结束值。



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


输出:
mysql> SELECT prod_name, prod_price
    -> FROM Products
    -> WHERE prod_price BETWEEN 5 AND 10;
+--------------------+------------+
| prod_name          | prod_price |
+--------------------+------------+
| 8 inch teddy bear  |       5.99 |
| 12 inch teddy bear |       8.99 |
| King doll          |       9.49 |
| Queen doll         |       9.49 |
+--------------------+------------+
4 rows in set (0.00 sec)

mysql> 






注意:
从这个例子可以看到,在使用 BETWEEN 时,必须指定两个值——所需范围的低端值和高端值。这两个值必须用 AND 关键字分隔。BETWEEN 匹配范围中所有的值,包括指定的开始值和结束值。

空值检查

在创建表时,表设计人员可以指定其中的列能否不包含值。在一个列不包含值时,称其包含空值 NULL。

NULL 
无值(no value),它与字段包含 0、空字符串或仅仅包含空格不同。
确定值是否为 NULL,不能简单地检查是否等于 NULL。SELECT 语句有一个特殊的 WHERE 子句,可用来检查具有 NULL 值的列。这个 WHERE 子句就是 IS NULL 子句。其语法如下:




SELECT prod_name
FROM Products
WHERE prod_price IS NULL;


输出:

mysql> SELECT prod_name
    -> FROM Products
    -> WHERE prod_price IS NULL;
Empty set (0.00 sec)

mysql> 




这条语句返回所有没有价格(空 prod_price 字段,不是价格为 0)的产品,由于表中没有这样的行,所以没有返回数据。但是,Customers表确实包含具有 NULL 值的列:如果没有电子邮件地址,则 cust_email列将包含 NULL 值:


SELECT cust_name
FROM Customers
WHERE cust_email IS NULL;



输出:
mysql> SELECT cust_name
    -> FROM Customers
    -> WHERE cust_email IS NULL;
+---------------+
| cust_name     |
+---------------+
| Kids Place    |
| The Toy Store |
+---------------+
2 rows in set (0.00 sec)

mysql> 





注意:NULL 和非匹配 通过过滤选择不包含指定值的所有行时,你可能希望返回含 NULL 值的
行。但是这做不到。因为 NULL 比较特殊,所以在进行匹配过滤或非匹配过滤时,不会返回这些结果。


小结

本小结介绍了如何用 SELECT 语句的 WHERE 子句过滤返回的数据。我们学习了如何检验相等、不相等、大于、小于、值的范围以及 NULL值等。



小练习

1.编写 SQL 语句,从 Products 表中检索产品 ID(prod_id)和产品名称(prod_name),只返回价格为 9.49 美元的产品。

SELECT prod_id, prod_name
FROM Products
WHERE prod_price = 9.49;



mysql> SELECT prod_id, prod_name
    -> FROM Products
    -> WHERE prod_price = 9.49;
+---------+------------+
| prod_id | prod_name  |
+---------+------------+
| RYL01   | King doll  |
| RYL02   | Queen doll |
+---------+------------+
2 rows in set (0.00 sec)

mysql> 



2.编写 SQL 语句,从 Products 表中检索产品 ID(prod_id)和产品名称(prod_name),只返回价格为 9 美元或更高的产品。

SELECT prod_id, prod_name
FROM Products
WHERE prod_price >= 9;




mysql> SELECT prod_id, prod_name
    -> FROM Products
    -> WHERE prod_price >= 9;
+---------+--------------------+
| prod_id | prod_name          |
+---------+--------------------+
| BR03    | 18 inch teddy bear |
| RYL01   | King doll          |
| RYL02   | Queen doll         |
+---------+--------------------+
3 rows in set (0.00 sec)

mysql> 


3. 结合第 2课和第 3 课编写 SQL 语句,从 OrderItems 表中检索出所有不同订单号(order_num),其中包含 100 个或更多的产品。

SELECT DISTINCT order_num
FROM OrderItems
WHERE quantity >=100;




mysql> SELECT DISTINCT order_num
    -> FROM OrderItems
    -> WHERE quantity >=100;
+-----------+
| order_num |
+-----------+
|     20005 |
|     20007 |
|     20009 |
+-----------+
3 rows in set (0.00 sec)

mysql> 




4.编写 SQL 语句,返回 Products 表中所有价格在 3 美元到 6 美元之间 的产品的名称(prod_name)和价格(prod_price),然后按价格对结果进行排序。(本题有多种解决方案,我们在下一课再讨论,不过你可以使用目前已学的知识来解决它。)

SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 3 AND 6
ORDER BY prod_price;




mysql> SELECT prod_name, prod_price
    -> FROM Products
    -> WHERE prod_price BETWEEN 3 AND 6
    -> ORDER BY prod_price;
+---------------------+------------+
| prod_name           | prod_price |
+---------------------+------------+
| Fish bean bag toy   |       3.49 |
| Bird bean bag toy   |       3.49 |
| Rabbit bean bag toy |       3.49 |
| Raggedy Ann         |       4.99 |
| 8 inch teddy bear   |       5.99 |
+---------------------+------------+
5 rows in set (0.00 sec)

mysql> 




posted @ 2025-06-19 19:35  三思博客  阅读(10)  评论(0)    收藏  举报