SQL必知必会跟练 3-5
本文是个人学习笔记,学习素材参考《SQL必知必会(第5版)》,仅用于个人学习记录,非商用。样例数据、练习思路来自该书。
三.排序检索数据
3.1排序数据
可使用ORDER BY子句进行排序,默认升序,先数字后字母
SELECT PROD_NAME
FROM PRODUCTS
ORDER BY PROD_NAME;
使用该子句时,要保证放在语句的最后,否则会出错

3.2按多个列排序
列名之间用逗号分开
SELECT PROD_ID,PROD_PRICE,PROD_NAME
FROM PRODUCTS
ORDER BY PROD_PRICE,PROD_NAME;
谁在前先按谁排

3.3按列位置排序
ORDER BY还支持按相对列位置进行排序
SELECT PROD_ID,PROD_PRICE,PROD_NAME
FROM PRODUCTS
ORDER BY 2,3;

与上一节的查询结果一致
3.4指定排序方向
用DESC关键字进行降序排序
SELECT PROD_ID,PROD_PRICE,PROD_NAME
FROM PRODUCTS
ORDER BY PROD_PRICE DESC;

用多个列排序:DESC关键字只作用于它前面的一个列名
SELECT PROD_ID,PROD_PRICE,PROD_NAME
FROM PRODUCTS
ORDER BY PROD_PRICE DESC,PROD_NAME;

DESC是DESCENDING的缩写,这两个关键字都可以用
与DESC相对的是ASC,ASC是ASCENDING的缩写,表示升序,因为升序是默认的所以不怎么用
提示:在字典排序序列中,A与a相同
四.过滤数据
4.1使用WHERE子句
使用WHERE子句可以只检索所需数据 需要指定搜索条件,搜索条件已称为过滤条件
WHERE子句在表名(FROM子句)之后给出
在同时使用ORDER BY和WHERE子句时,ORDER应该排在后面,否则会产生错误
SELECT PROD_NAME,PROD_PRICE
FROM PRODUCTS
WHERE PROD_PRICE = 3.49;

4.2WHERE子句操作符
| 操作符 | 说明 |
| = | 等于 |
| <> | 不等于 |
| != | 不等于 |
| < | 小于 |
| <= | 小于等于 |
| !< | 不小于 |
| > | 大于 |
| >= | 大于等于 |
| !> | 不大于 |
| BETWEEN | 在指定的两个值之间 |
| IS NULL | 为NULL值 |
4.2.1检查单个值
例:列出所有价格小于10美元的产品
SELECT PROD_NAME,PROD_PRICE
FROM PRODUCTS
WHERE PROD_PRICE < 10;

4.2.2不匹配检查
例:列出所有不是供应商DLL01制造的产品
SELECT VEND_ID,PROD_NAME
FROM PRODUCTS
WHERE VEND_ID <> 'DLL01';

提示:WHERE查找的是字符串类型的列则需要用‘ ’,如果与数值直接进行比较则不用引号
4.2.3范围值查询
BETWEEN操作符,中间必须用AND关键字分隔,其查找结果包括指定的开始值和结束值
SELECT PROD_NAME,PROD_PRICE
FROM PRODUCTS
WHERE PROD_PRICE BETWEEN 5 AND 10;

4.2.4空值查询
NULL:无值,在一个列不包含值时,称其包含空值NULL,它与字段包含0、空字符串或仅仅包含空格不同
IS NULL子句用来检查具有NULL值的列
例:查找价格为空的行
SELECT PROD_NAME
FROM PRODUCTS
WHERE PROD_PRICE IS NULL;

例:查找没有电子邮件地址的行
SELECT CUST_NAME
FROM CUSTOMERS
WHERE CUST_EMAIL IS NULL;

五.高级数据过滤
5.1组合WHERE子句
5.1.1 AND操作符
AND:用来指示所有给定条件的行
例:查询由供应商DLL01制造且价格小于等于4美元的所有产品的名称和价格
SELECT VEND_ID,PROD_PRICE,PROD_NAME
FROM PRODUCTS
WHERE VEND_ID = 'DLL01' AND PROD_PRICE <= 4;

5.1.2 OR操作符
OR:表示检索匹配任一给定条件的行
SELECT PROD_NAME,PROD_PRICE
FROM PRODUCTS
WHERE VEND_ID = 'DLL01' OR VEND_ID = 'BRS01';

5.1.3求值顺序
WHERE子句可以包含任意数目的AND和OR操作符
AND的优先级比OR高,圆括号()的优先级比AND、OR高,所以可以使用圆括号()对操作符明确顺序,建议AND和OR连用时都使用圆括号进行分组操作
SELECT PROD_NAME,PROD_PRICE
FROM PRODUCTS
WHERE PROD_PRICE >= 10 AND (VEND_ID = 'DLL01' OR VEND_ID = 'BRS01');

5.2 IN操作符
IN:功能与OR相同,可以包含其他SELECT语句
SELECT PROD_NAME,PROD_PRICE
FROM PRODUCTS
WHERE VEND_ID IN ('DLL01','BRS01')
ORDER BY PROD_NAME;

5.3 NOT操作符
NOT:否定其后条件
例:列出出DLL01之外的所有供应商制作的产品
SELECT PROD_NAME
FROM PRODUCTS
WHERE NOT VEND_ID = 'DLL01'
ORDER BY PROD_NAME;

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐



所有评论(0)