从今天起,正式开始学习数据分析相关的知识,希望在未来可以找到一份优秀的Offer,也希望我可以努力成为那个优秀的他。话不多说,首先开始我们的SQL语言学习。
第三课 排序检索数据
排序数据
为了明确排序用SELECT语句检索出的数据,可使用ORDER BY子句。ORDER BY子句取一个或多个列的名字,据此对输出进行排序。
SELECT `prod_name`
FROM `products`
ORDER BY `prod_name`;
![fdf316ff39ff73d6ccbe25de460c64d7.png](https://img-blog.csdnimg.cn/img_convert/fdf316ff39ff73d6ccbe25de460c64d7.png)
【注】通常,ORDER BY子句中使用的列将是为显示而选择的列,但是实际上并不一定这样,用非检索的列排序数据是完全合法的。
按多个列排序
多个列排序时,先按第一个列进行排序,依次按照后面的列排序。
SELECT `prod_id`, `prod_price`, `prod_name`
FROM `products`
ORDER BY `prod_price`, `prod_name`;
![0ea24d53527c4ff9ed3fb0b412cf5fa9.png](https://img-blog.csdnimg.cn/img_convert/0ea24d53527c4ff9ed3fb0b412cf5fa9.png)
按列位置排序
除了能用列名指出排序顺序外,ORDER BY还支持按相对列位置进行排序。
SELECT `prod_id`, `prod_price`, `prod_name`
FROM `products`
ORDER BY 2,3;
【注】当根据不出现在SELECT清单中的列进行排序时,不能采用这项方法。
指定排序方向
ASC指示升序,DESC指示降序。
SELECT `prod_id`, `prod_price`, `prod_name`
FROM `products`
ORDER BY `prod_price` DESC, `prod_name`;
![dbe695c79e2abe662e68f18a7c3ddc44.png](https://img-blog.csdnimg.cn/img_convert/dbe695c79e2abe662e68f18a7c3ddc44.png)
挑战题
- 编写 SQL 语句,从 Customers 中检索所有的顾客名称(cust_name), 并按从 Z 到 A 的顺序显示结果。
SELECT `cust_name`
FROM `customers`
ORDER BY `cust_name` DESC;
- 编写 SQL 语句,从 Orders 表中检索顾客 ID(cust_id)和订单号 (order_num),并先按顾客 ID 对结果进行排序,再按订单日期倒序排列。
SELECT `cust_id`, `order_num`
FROM `orders`
ORDER BY `cust_id`, `order_date` DESC;
- 显然,我们的虚拟商店更喜欢出售比较贵的物品,而且这类物品有很多。 编写 SQL 语句,显示 OrderItems 表中的数量和价格(item_price), 并按数量由多到少、价格由高到低排序。
SELECT `quantity`, `item_price`
FROM `orderItems`
ORDER BY `quantity` DESC, `item_price` DESC;
第四课 过滤数据
使用WHERE子句
数据库表一般包含大量的数据,很少需要检索表中的所有行。通常只会根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要指定搜索条件,搜索条件也被称为过滤条件。在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。
SELECT `prod_name`, `prod_price`
FROM `products`
WHERE `prod_price` = 3.49;
![512439f7d1fc144927ed1f15225bf126.png](https://img-blog.csdnimg.cn/img_convert/512439f7d1fc144927ed1f15225bf126.png)
WHERE子句操作符
“=”等于 “!=”不等于 “<”小于 “>”大于 “<=”小于等于 “>=”大于等于 BETWEEN...AND...在指定的两个值之间。
SELECT `prod_name`, `prod_price`
FROM `products`
WHERE `prod_price` < 10;
![40406ea01d72ce26c8b0142b4b899f3a.png](https://img-blog.csdnimg.cn/img_convert/40406ea01d72ce26c8b0142b4b899f3a.png)
SELECT `vend_id`, `prod_name`
FROM `products`
WHERE `vend_id` != 'DLL01';
![c9e93a9209d552796b6fa1382296f3b2.png](https://img-blog.csdnimg.cn/img_convert/c9e93a9209d552796b6fa1382296f3b2.png)
SELECT `prod_name`, `prod_price`
FROM `products`
WHERE `prod_price` BETWEEN 5 AND 10;
![6ed2af172aed65494ec5392b8b9f7fb0.png](https://img-blog.csdnimg.cn/img_convert/6ed2af172aed65494ec5392b8b9f7fb0.png)
在使用BETWEEN AND时,必须指定两个值---所需范围的低端值到高端值。这两个值必须用AND关键字分隔。BETWEEN 匹配范围中所有的值,包括指定的开始值和结束值。
SELECT `cust_name`
FROM `customers`
WHERE `cust_email` IS NULL;
![a628384a22cf251d1cb9539c0d903b9d.png](https://img-blog.csdnimg.cn/img_convert/a628384a22cf251d1cb9539c0d903b9d.png)
NULL与字段包含0,空字符串或仅仅包含空格不同。
挑战题
- 编写 SQL 语句,从 Products 表中检索产品 ID(prod_id)和产品名 称(prod_name),只返回价格为 9.49 美元的产品。
SELECT `prod_id`, `prod_name`
FROM `products`
WHERE `prod_price` = 9.49;
- 编写 SQL 语句,从 Products 表中检索产品ID(prod_id)和产品名称(prod_name),只返回价格为9美元或更高的产品。
SELECT `prod_id`, `prod_name`
FROM `products`
WHERE `prod_price` >= 9;
- 结合第3课和第4课编写SQL语句,从OrderItems表中检索出所有不同订单(order_num),其中包含100个或更多的产品。
SELECT DISTINCT `order_num`
FROM `orderitems`
WHERE `quantity` >=100;
- 编写 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`;