结果计算
Select-From-Where语句中,Select子句后面不仅可是列名,而且可是一些计算表达式或聚集函数,表明在投影的同时直接进行一些运算
xxxxxxxxxxSelect 列名 | expr | agfunc(列名字)From 表名1, 表名2Where 检索条件;求有差额(差额>0)的任意两位教师的薪水差额
xxxxxxxxxxSelect T1.Tname, T2.Tname, T1.salary - T2.SalaryFrom Teacher T1, Teacher T2 Where T1.salary > T2.salary根据学生年龄求出学生的入学年份:当前是2015
xxxxxxxxxxSelect Student.Snum, Student.Sname, 2015-S.Sage + 1聚集函数
count:求个数 sum:求和 avg:求平均 max:求最大 min:求最小
eg.求教师的工资总额
xxxxxxxxxxSelect sum(Salary) From Teachereg.求数据库课程的平均成绩
xxxxxxxxxxSelect avg(Score) From Course, SCWhere Course = '数据库' and Course.Cnum = Sc.Cnum;分组查询与分组过滤
分组:SQL可以将检索到的元组按照某一条件进行分类,具有相同条件值的元组划到一个组或一个集合中,同时处理多个组或集合的聚集运算。
Where 后面多一个Group by
分组条件可以是:列名1,列名2
eg.求每一个学生的平均成绩
xxxxxxxxxxSelect Snum, AVG(Score) From SCGroup by Snum;求每一门课程的平均成绩
xxxxxxxxxxSelect Cnum, AVG(Score) From SCGroup by Cnum;聚集函数是不允许用于Where子句中的:Where子句是对每一元组进行条件过滤,而不是对集合进行条件过滤;
分组过滤:若要对集合(即分组)进行条件过滤,即满足条件的集合/分组留下,不满足条件的集合/分组剔除。
Having子句,又称分组过滤子句。需要有Groupby子句支持,换句话说,没有Groupby子句,便不能有Having子句
eg.A求不及格课程超过两门的同学的学号
xxxxxxxxxxSelect Snum From SCWhere Score < 60Group by Snum Having count(*) > 2;eg.求有十人以上不及格的课程号
xxxxxxxxxxSelect Cnum From SCWhere Score < 60;Group by Cnum Having count(*) > 10;eg.求有两门以上不及格课程同学的学号及其平均成绩
xxxxxxxxxxSelect Snum, AVG(Score) From SCWhere Snum in ( Select Snum From SC Where Score < 60; Group by Snum Having count(*) > 2; )Group by Snum;





Comments NOTHING