学前必备知识
在 第六章:SQL Server2019数据库之 SELECT 语句的深入使用 一文中我们学习了几种简单的查询。 这里我们简单的回顾一下SELECT 语句,SELECT 语句是从数据库中检索数据并查询,并将查询结果以表格的形式返回。SELECT 语句的基本语法如下:
SELECT select_list
[ INTO new_table ]
FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ASC| DESC ]]
参数说明如下表所示:
说明:[] 表示可选参数,需要我们自己根据实际情况进行判断是否添加。
(1) 使用附加的方式将 Xk 数据库添加到自己本地环境。如下图所示:
素材文件下载地址如下:
链接:https://pan.baidu.com/s/1grw3oDrz2lw77OHNlty1KA
提取码:0yrz
复制这段内容后打开百度网盘手机App,操作更方便哦--来自百度网盘超级会员V6的分享
(2) 从课程表(Course) 中查询所有课程的信息。
(3) 查询课程表(Course) 中的课程编号、课程名称、教师、上课时间、限制选课人数和报名人数,要求显示汉字标题。
(4) 从课程表(Course) 中查询课程类别的信息。
(5) 从学生表(Student) 中查询所有信息,要求只显示查询结果的前 6 行数据。
(6) 查询学号为 00000006
同学的姓名和班级编号。
(7) 查询报名人数(WillNum)小于等于25并且大于等于15人的课程信息。
(8) 查询报名人数(WillNum)大于等于25或者小于等于15人的课程信息。
(9) 查询课程编号分别为 004、007、013 的课程信息。
(10) 查询课程编号不为 004、007、013 的课程编号和课程名称。
(11) 查询表课程表(Course) 的课程信息、报名人数与限选人数之比。
(12) 从学生表(Student) 中 查询 StuName 中包含林的学生信息。
(13) 从学生表(Student) 中 查询 Pwd 中以B开头但是不以数字结尾的学生信息。
(14) 从学生表(Student) 中 查询 StuName 中姓李且名字是三个字的学生信息。
范围查询用来查询两个给定的值之间的值,通常使用 BETWEEN...AND
和 NOT..BETWEEN..AND
来指定范围条件。理论上讲,SELECT 语句所返回的结果集都是无序的,结果集中记录之间的顺序主要取决于物理位置。对结果集排序的唯一方法就是在 SELECT 查询中嵌入 ORDER BY 子句,ORDER BY 子句用来指定最后结果集中的行顺序。本小节将向读者介绍数据库中的数据排序技术。
对于表格比较小,不用 ORDER BY
子句,查询结果会按照在表格中的顺序排列的。但对于表格比较大的,则必须使用 ORDER BY
子句,方便查看查询结果。ORDER BY
子句由关键字 ORDER BY
后跟一个用逗号分开的排序列表组成,语法如下:
[ ORDER BY { order_by_expression [ ASC | DESC ] } [ ,...n ] ]
参数说明如下表所示:
排序的关键字是 order by,默认状态下是升序,关键字是 asc。可以按照某一个字段排序,排序的字段是数值型,也可以是字符型、日期和时间型。
【例1】 按照某一个字段进行排序。在 goods 商品信息表中,根据商品销量进行降序排列。SQL 语句如下:
SELECT goods_id,goods_name,sales_sum FROM goods ORDER BY sales_sum DESC;
-- 按列别名排序
SELECT goods_id 商品编号,goods_name 商品名称,sales_sum 商品销量
FROM goods
ORDER BY 商品销量 DESC;
-- 注意:在 ORDER BY 子句中使用别名时,如果在 SELECT 查询中设置的别名含有空格,这时别名需要加上单引号或双引号。
SELECT goods_id 商品编号,goods_name 商品名称,sales_sum '商品 销量'
FROM goods
ORDER BY '商品 销量' DESC;
查询结果如下图所示:
如果按照商品销量升序排列输出结果,可以使用如下 SQL 语句:
SELECT goods_id,goods_name,sales_sum FROM goods ORDER BY sales_sum ASC;
说明:如果在 ORDER BY 子句中没有指明 DESC 或 ASC,则默认为升序排列。
有时按照一列进行排序之后,如果查询的记录比较多,那么查询结果可能仍然不是很清晰,这时就可以按多个列进行排序。SQL 指定多列排序时,初级排序是对查询结果进行分类并排序,第二级排序是对初级排序分好类的数据进行再次排序,以此类推。
现实编程中经常需要按多列进行数据排序。例如,如果要显示员工清单,可能希望按照姓或名进行排列(首先按姓排列,然后在每个姓的集合中按名排序),对于多个员工具有相同姓的情况,这样做很有意义。
如果需要对多列的字段进行排序,可以对所有要用于排序的列加以限制。当对多列数据进行排序时,优先顺序应按从左到右依次降低,所以在查询语句中的 ORDER BY 子句的各个列的排列顺序很重要。
【例2】在 goods 商品信息表中,按照商品价格列和商品名称列对结果进行排序,即首先按照价格排序,然后再按照商品名称进行排序。SQL 语句如下:
SELECT goods_id,goods_name,shop_price FROM goods
ORDER BY shop_price, goods_name;
查询结果如下图所示:
如果希望在某个列上进行降序排列,而在其他列上进行升序排列,可以使用 DESC 关键字对希望降序排列的列进行限制。如果要对多个列进行降序排序,必须对每个列指定 DESC 关键字。例如:
-- shop_price 升序排列,goods_name 降序排列
SELECT goods_id,goods_name,shop_price FROM goods
ORDER BY shop_price, goods_name DESC;
-- shop_price 降序排列,goods_name 降序排列
SELECT goods_id,goods_name,shop_price FROM goods
ORDER BY shop_price DESC, goods_name DESC;
注意:在实际的应用中,可以在 ORDER BY 子句中引用前面 SELECT 查询中没有使用到的字段,但是如果在 SELECT 查询语句中使用了 DISTINCT 关键字,那么只允许使用在 SELECT 查询中明确列出的那些字段进行排序,否则会出现错误。如下图所示:
【例3】在 goods 商品信息表中,查询价格最高的前3条商品信息。SQL 语句如下:
SELECT TOP 3 goods_id,goods_name,shop_price FROM goods
ORDER BY shop_price DESC;
查询结果如下图所示:
总结:通过本小节的学习,读者可以掌握如何使用 SELECT 语句的 ORDER BY 子句对查询出的数据进行排序。需要注意,ORDER BY 子句必须是 SELECT 语句中的最后一条子句。此子句可以对数值数据和汉字按照一定要求进行排序。
保存数据的目的是为了对数据进行统计和分析,统计的作用是对过去的工作进行总结,分析的作用是通过总结过去来谋划未来。本小节将深入学习通过 SQL 语句对数据进行统计分析的方法。本小节主要学习 COUNT() 函数、 SUM() 函数、AVG() 函数、MAX() 函数以及 MIN() 函数的使用方法。
聚合函数对一组值进行计算并返回单一的值,它也被称为聚集函数或统计函数。聚合函数能够对整个数据集合进行计算,并返回一行包含着原始数据集合汇总结果的记录。它包括 SUM()、AVG()、COUNT()、MAX() 及MIN() 函数,它们的作用是在查询结果集中生成汇总值。SQL 的聚合函数如下表所示:
【例1】在 goods 商品信息表中,查询所有商品价格的平均值。SQL 语句如下:
SELECT AVG(shop_price) AS '平均值' FROM goods;
-- 去掉小数点有效数字后面的0
SELECT CAST(AVG(shop_price) AS real) AS '平均值' FROM goods;
-- 获取商品价格中非重复值的平均值
SELECT CAST(AVG(DISTINCT shop_price) AS real) AS '平均值' FROM goods;
查询结果如下图所示:
【例2】在 goods 商品信息表中,计算价格大于1500元的商品平均价格。SQL 语句如下:
SELECT AVG(shop_price) AS '平均值' FROM goods WHERE shop_price > 1500;
-- 保留两位小数
SELECT CAST(ROUND(AVG(shop_price),2) AS real) AS '平均值' FROM goods WHERE shop_price > 1500;
查询结果如下图所示:
【例3】在 goods 商品信息表中,查询商品价格大于3000元的商品个数。SQL 语句如下:
SELECT COUNT(*) AS '商品个数' FROM goods WHERE shop_price > 3000;
【例4】在 goods 商品信息表中,统计商品个数。SQL 语句如下:
SELECT COUNT(goods_id) FROM goods;
请看下面的两个 SQL 语句:
说明:COUNT(*) 统计 NULL 值的个数。使用 COUNT() 函数统计时,重复的内容将放在统计结果中。对所有重复的内容不做统计操作,可以在 COUNT() 函数中加入 DISTINCT 关键字。
【例5】在 goods 商品信息表中,计算液晶电视最高售价与最低售价。SQL 语句如下:
SELECT MAX(shop_price) AS 最大值 FROM goods WHERE goods_name Like '%液晶电视%';
SELECT MIN(shop_price) AS 最小值 FROM goods WHERE goods_name Like '%液晶电视%';
【例6】在 goods 商品信息表中,计算所有商品价格总和。SQL 语句如下:
SELECT SUM(shop_price) AS '所有商品价格总和' FROM goods;
【例7】在 goods 商品信息表中,计算所有商品的总盈利。SQL 语句如下:
SELECT SUM(shop_price-cost_price) AS 所有商品的总盈利 FROM goods;
在 SUM() 函数的参数中也可以使用 DISTINCT 关键字来获取唯一值。
总结:本小节介绍了聚合函数,聚合函数用来统计汇总数据。SQL 支持5个聚合函数,分别为 SUM()、AVG()、COUNT()、MAX()及 MIN()函数。使用聚合函数可以提高计算效率,节省工作时间。