两个月冲刺软考——SQL基础:排序、分组和聚合函数的实用指南

1.涉及到的部分基本语法

1.1 ORDER BY 与 GROUP BY

ORDER BY用于对查询结果进行排序;默认是升序(ASC),可以指定降序(DESC)。

GROUP BY用于将数据按照一个或多个列进行分组;通常与聚合函数(如SUM、AVG、COUNT等)一起使用。使用聚合函数时需加括号,即:AVG(单价),表示平均单价。

二者均位于SQL语句的末尾。

1.2 SELECT语句

SELECT [DISTINCT] column1, column2,...
FROM table_name
[WHERE condition]
[GROUP BY column(s)]
[HAVING condition]
[ORDER BY column(s) [ASC|DESC]];

补充:中括号表示为可选项。DISTINCT关键字用于去除结果集中的重复行。WHERE用于指定筛选条件,只有满足条件的行才会被包含在结果集中。例如 WHERE age > 18。HAVING用于筛选分组后满足特定条件的结果集,通常表示为保留……

扩展:WHERE和HAVING的区别

  1. WHERE在分组之前对数据进行筛选,而HAVING在分组之后对数据进行筛选。

  2. WHERE不能直接与聚合函数一起使用,而HAVING通常与聚合函数一起使用。

1.3 例题1:

查询各种零件的平均单价、最高单价与最低单价之间差距的SQL语句为: SELECT 零件号,( ) FROM P ( );

两个月冲刺软考——SQL基础:排序、分组和聚合函数的实用指南_第1张图片

答案:SELECT 零件号,零件名称,AVG(单价),MAX(单价)-MIN(单价) FROM P GROUP BY 零件号;

例题2:

查询人数大于2的部门和部门员工应发工资的平均工资的SQL语句为:

两个月冲刺软考——SQL基础:排序、分组和聚合函数的实用指南_第2张图片

补充:SQL提供可为关系和属性重新命名的机制,这是通过使用as子句来实现的。As子句即可出现在select子句也可出现在from子句中。

答案:SELECT 部门,AVG(应发工资) AS 平均工资 FROM 工资表GROUP BY 部门 HAVING COUNT(姓名) > 2;


2.关系数据库中的选择,投影,连接,除法

2.1自然连接(举例说明):

假设有两个关系表,表 A 和表 B。

表 A:学生成绩表

学生编号 课程编号 成绩
001 C01 85
002 C02 90
003 C01 78

表 B:课程信息表

课程编号 课程名称
C01 数学
C02 英语

进行自然连接后的结果如下:

学生编号 课程编号 成绩 课程名称
001 C01 85 数学
002 C02 90 英语
003 C01 78 数学

首先,找到两个表中相同的属性 “课程编号”。然后,对于表 A 中的每一行,在表 B 中查找具有相同 “课程编号” 的行,并将它们组合在一起。最后,去掉重复的 “课程编号” 列,得到自然连接的结果。

白话:或者是可以看成将列数少的那个表,放在列数多的那个表之上,也就是将二者叠起来(重复的部分)。

2.2投影

根据条件只对列产生影响;

2.3选择

根据条件只对行产生影响;

2.4例题:

两个月冲刺软考——SQL基础:排序、分组和聚合函数的实用指南_第3张图片

第一空:R.B,D,F,G

表达式中要求的是R与S自然连接之后,投影第2、4、6、7列。注意这里是从1开始,而非以0为第1列。即B、D、F、G。

第二空:R.B=S.B AND R.C=S.C AND R.B

第二空即where之后:这类题型填的都是重复列二者必须相等,即R与S中重复的列为B、C,所以R.B=S.B AND R.C=S.C;然后看选择部分:2<7,即选择自然连接之后的第2列小于第7列的行,并且要加上列的所属表,即R.B AND关系。


两个月冲刺中级软件设计师,欢迎大家一起讨论交流,同时也希望各位大佬们指出错误,我这边及时修改。

你可能感兴趣的:(软考-数据库,数据库,sql)