本文是个人学习笔记,学习素材参考《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;

Logo

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

更多推荐