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的区别
WHERE在分组之前对数据进行筛选,而HAVING在分组之后对数据进行筛选。
WHERE不能直接与聚合函数一起使用,而HAVING通常与聚合函数一起使用。
1.3 例题1:
查询各种零件的平均单价、最高单价与最低单价之间差距的SQL语句为: SELECT 零件号,( ) FROM P ( );
答案:SELECT 零件号,零件名称,AVG(单价),MAX(单价)-MIN(单价) FROM P GROUP BY 零件号;
例题2:
查询人数大于2的部门和部门员工应发工资的平均工资的SQL语句为:
补充: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例题:
第一空: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 <S.G
第二空即where之后:这类题型填的都是重复列二者必须相等,即R与S中重复的列为B、C,所以R.B=S.B AND R.C=S.C;然后看选择部分:2<7,即选择自然连接之后的第2列小于第7列的行,并且要加上列的所属表,即R.B <S.G。一定要注意三者之间为AND关系。
两个月冲刺中级软件设计师,欢迎大家一起讨论交流,同时也希望各位大佬们指出错误,我这边及时修改。