以此纪念在深圳做测试的日子…… 每天进步一点点,相信成长不言而喻

SQL学习笔记之四:表达式与函数

上一篇 / 下一篇  2010-01-23 11:05:43 / 个人分类:数据库

1.算术表达式:可在select后即where、Order by子句中使用
例1:查询各课程的学时数
      select cname,course_time=ctime*16
      from course

2.聚集函数:COUNT\SUM\AVG\MAX\MIN
  除COUNT(*)外均表示在某个表的某一列的属性值上操作,产生一个单个值作为结果
  COUNT:求该列统计值的总数目
  SUM:求该列统计值的和
  AVG、MAX、MIN:求该列统计值的平均值、最大值、最小值
注:
1.SUM和AVG相应的列必须为数值型
2.操作变量前加distinct表示函数运行前先把冗余的重复值去掉。但对max,min而言distinct不起作用;对count而言必须说明distinct;对count(*)则不允许加distinct,因为其功能是在不消除冗余的情况下统计全部行。
例1:求出学生的最小年龄
     select min(age) from student
例2:统计年龄大于20岁的学生数
     select count(*)
     from student
     where age>20
例3:找出每门课的平均成绩和被选次数
     select cno,avg(score),courses=count(*)
     from enroll
     group by cno

3.纯量函数:如SQRT(求平方根),三角函数SIN、COS,取整INTEGER等
  这些函数都是在某个列操作,且产生的结果是一个新的数据列
例1:求每个学生年龄的平方根
     select sqrt(age)
     from student
由于纯量函数是水平方向计算的,多产生的结果是一个列;聚集函数是垂直方向的,产生的结果是一个单值,因此下列查询命令是错误的:
select sno,min(age) from student

注:
1.函数可以产生与其参数的数据类型不同的值
2.聚集函数的参数的列名可以是纯量函数产生的结果,如MIN(SQRT(age))
3.函数min\max\count\distinct可以对非数字型列进行操作
4.聚集函数不允许进行复合运算,如max(avg(age))是不允许的

4.GROUP BY和HAVING
GROUP BY:分组查询,把一个表按某一指定列上的值相等的原则分组,然后再对每组数据进行规定的操作。在使用聚集函数时,group by控制聚集函数运算的水平和范围
HAVING:分组条件,用于计算出聚集后对行的查询进行控制,只有满足条件的组才被选出来
例如:找出各课程的平均成绩,按课程号分组,并只选学生数超过3人的课程成绩
      select cno,avg(score),student=count(*)
      from enroll
      group by cno
      having count(*)>=3
注:having与where的区别:
where所设置的查询条件是检索的每个记录必须满足的,而having设置的查询条件是针对成组记录行的。即where用在聚集函数之前对行进行查询,而having用在聚集函数之后对行进行查询。如:where avg(score)>80是不正确的。

 


TAG:

 

评分:0

我来说两句

Open Toolbar