MySQL (九)数据库的查询

继续上一篇中的问题

【常用的Select选择语句】


五、【 Select 语句之 having 子句的使用 】

 

使用HAVING子句的目的与WHERE子句类似,不同的是WHERE子句是用来在FROM子句之后选择行,而HAVING子句用来在GROUP BY子句后选择行。例如,查找XSCJ数据库中平均成绩在85分以上的学生,就是在XS_KC表上按学号分组后筛选出符合平均成绩大于等于85的学生。

语法格式:

HAVING where_definition

其中,where_definition是选择条件,条件的定义和WHERE子句中的条件类似,不过HAVING子句中的条件可以包含聚合函数,而WHERE子句中则不可以。

SQL标准要求HAVING必须引用GROUP BY子句中的列或用于聚合函数中的列。不过,MySQL支持对此工作性质的扩展,并允许HAVING引用SELECT清单中的列和外部子查询中的列。

如: 查找XSCJ数据库中平均成绩在85分以上的学生的学号和平均成绩。

SELECT 学号, AVG(成绩) AS '平均成绩'

    FROM XS_KC

   GROUP BY 学号

       HAVING AVG(成绩) >=85;

如:查找选修课程超过2门且成绩都在80分以上的学生的学号。

SELECT 学号

    FROM XS_KC

    WHERE 成绩 >= 80

    GROUP BY 学号

       HAVING COUNT(*) > 2;

如:查找通信工程专业平均成绩在85分以上的学生的学号和平均成绩。

SELECT 学号,AVG(成绩) AS '平均成绩'

   FROM XS_KC

   WHERE 学号 IN

         (  SELECT 学号

               FROM XS

               WHERE 专业名 = '通信工程'

         )

   GROUP BY 学号

   HAVING AVG(成绩) >=85;

 

posted @ 2015-01-04 21:16  RoperLee  阅读(743)  评论(0)    收藏  举报