一、相关知识点
1. SELECT 语句的基本语法:
SELECT column1, column2, ...
FROM table_name;
2. 选择特定列:
使用 SELECT 语句时,可以指定要检索的列名,用逗号分隔。也可以使用通配符 * 来选择所有列。
3. 过滤行数据:
使用 WHERE 子句可以添加条件来过滤行数据。例如,只选择满足某个条件的行:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
4. 分组查询:
(1)基本语法:
SELECT column1, column2, ..., aggregate_function(column)
FROM table_name
GROUP BY column1, column2, ...;
(2) 分组列:
在 GROUP BY 子句中指定要进行分组的列。查询结果将根据这些分组列进行分组。
(3)聚合函数:
在 SELECT 子句中,可以使用各种聚合函数对分组列进行计算。常见的聚合函数包括 SUM、COUNT、AVG、MIN 和 MAX 等。
(4)过滤分组数据:
可以在 HAVING 子句中添加条件来过滤分组后的数据。只有满足条件的分组才会包含在查询结果中。
SELECT column1, column2, ..., aggregate_function(column)
FROM table_name
GROUP BY column1, column2, ...
HAVING condition;
(5)多列分组:
可以在 GROUP BY 子句中指定多个列,以便按照多个列进行分组。
SELECT column1, column2, ..., aggregate_function(column)
FROM table_name
GROUP BY column1, column2, ...;
(6)排序分组数据:
可以使用 ORDER BY 子句对分组查询的结果进行排序。可以按照分组列或聚合函数的计算结果进行排序。
(7)嵌套分组:
在 GROUP BY 子句中可以使用表达式,甚至是其他查询的结果作为分组条件,从而实现嵌套分组。
5. 排序数据:
可以使用 ORDER BY 子句对结果进行排序。默认按照升序排列,可以使用 ASC(升序)或 DESC(降序)关键字来指定排序方式。
6. 对查询结果进行限制:
使用 TOP 关键字可以限制查询结果的行数。例如,只选择前 5 行:
SELECT TOP 5 column1, column2, ...
FROM table_name;
7. 去重数据:
使用 DISTINCT 关键字可以去重查询结果。例如,只返回不重复的城市名称:
SELECT DISTINCT city
FROM table_name;
8. 使用聚合函数:
SQL Server 提供了多个聚合函数,例如 SUM、COUNT、AVG 等,用于计算列中的汇总数据。例如,计算某列的总和:
SELECT SUM(column_name)
FROM table_name;
二、软件版本
Microsoft SQL Server Management Studio(v18.7.1)
三、实验所用数据库
实验所基于的销售管理数据库中涉及以下表:
四、实验内容
1、指定列或全部列查询(Select)
- 查询商品表(Product)中所有商品的信息
- 检索客户表(Customer)中前5位客户的公司名称、联系人姓名和地址。
- 从员工表(Employee)中查询所有员工的部门信息。
- 查询将员工表中(Employee)所有员工的工资提高10%后的信息,输出字段为:员工姓名,原工资,提高后工资。
- 统计员工表(Employee)中的职工数。
2、按条件查询(Where)
- 检索员工表所有姓李和姓章的员工信息。
- 检索员工表姓李的名字只有一个汉字的员工信息。
- 查询员工表中工资在3400以下的女性员工姓名和工资信息。
- 查询员工表中工资在5000到7000之间的员工信息。(Between)
- 检索销售订单表(Sell_Order)中,员工编号为1、5、7的员工接收订单的信息。(IN)
- 检索部门表(Department)中主管位置不为空的部门信息。
3、分组统计查询
- 查询员工表中男女员工的平均工资。输出字段性别,平均工资。
- 查询销售订单表中各种商品的订货总数,输出字段为商品编号,订货总数。
- 查询销售订单表中,订购两种以上商品的客户编号,订购商品种类。
4、对查询结果排序
- 查询员工表中男女员工的平均工资。输出字段性别,平均工资,按照平均工资升序排列。
- 查询销售订单表中各种商品的订货总数,输出字段为商品编号,订货总数,按照订货总数降序排列。
五、实验过程及数据记录
1、指定列或全部列查询(Select)
(1) 查询商品表(Product)中所有商品的信息
(2) 检索客户表(Customer)中前5位客户的公司名称、联系人姓名和地址。
(3) 从员工表(Employee)中查询所有员工的部门信息。
(4) 查询将员工表中(Employee)所有员工的工资提高10%后的信息,输出字段为:员工姓名,原工资,提高后工资。
(5) 统计员工表(Employee)中的职工数。
2、按条件查询(Where)
(1) 检索员工表所有姓李和姓章的员工信息。
(2) 检索员工表姓李的名字只有一个汉字的员工信息。
(3) 查询员工表中工资在3400以下的女性员工姓名和工资信息。
(4) 查询员工表中工资在5000到7000之间的员工信息。(Between)
(5) 检索销售订单表(Sell_Order)中,员工编号为1、5、7的员工接收订单的信息。(IN)
(6) 检索部门表(Department)中主管位置不为空的部门信息。
3、分组统计查询
(1) 查询员工表中男女员工的平均工资。输出字段性别,平均工资。
(2) 查询销售订单表中各种商品的订货总数,输出字段为商品编号,订货总数。
(3) 查询销售订单表中,订购两种以上商品的客户编号,订购商品种类。
4、对查询结果排序
(1) 查询员工表中男女员工的平均工资。输出字段性别,平均工资,按照平均工资升序排列。
(2) 查询销售订单表中各种商品的订货总数,输出字段为商品编号,订货总数,按照订货总数降序排列。
六、实验小结
1、我认为实验前要熟悉查询操作的知识点,如果熟悉每个知识点做起来很轻松。我在实验中卡在了分组查询的第三题,原因是不知道count、sum、avg、max、min等聚集函数可以指定distinct短语,在指定distinct短语后可以取消指定列中的重复值。在分组查询问题的第三问中,利用count(distinct ProductID)group by CustomerID可以求出每个客户订购的商品种类数,如果不加就是每个客户的订单数。
2、实验中还需要注意distinct短语的使用,在本次实验中用到的表都不存在重复行,所以在select使用通配符(*)时不需要添加distinct。但是,在进行投影操作后就要考虑投影后的表中是否会存在相同行,这时候就需要考虑是否需要添加distinct。