第十一章 连接查询和分组查询

1.分组查询原理

        比如:

                 一个表中又三个学期的人数考试信息,现在我们要查询每个学期的人数,这时我们用select----from---where会产生代码冗余,也就是我们通常说的垃圾代码,这个时候我们就会用到group by 关键字。

2.单列分组查询

     语法:                                                                                 eg:

               select  列名,聚合函数 from  表名                                     select  count(*)as 人数,grade as 年级  

               where  限制条件                                                                 from  Student

               group  by  被分组的列                                                        group  by  grade

               order  by  列名

注意:

        select表中只能包含:

                                          (1)被分组的列

                                          (2)为每个分组返回一个值的表达式,如聚合函数

3.多列分组查询

       语法:                                                                                       eg:

                select  列名1,列名2,聚合函数 from  表名                            select  count(*) as 人数,grade as 年级,sex  as 性别

                where  限制条件                                                                       from  Student

                group  by 被分组的列名1,列名2                                             group  by grade,sex

                order  by  被排序的列名                                                            order  by----

      注意:

                (1)单列查询不需要 order by      多列查询尽量添加 order  by

                (2)多列查询分组排序,默认情况以后边一个进行排序

4.分组筛选(having):

             语法:                                                                eg:

                       select -----from  表名                                      select count(*) as 人数,grade as 年级

                       where ------                                                     from  Student

                       group by ------                                                 group  by  grade

                       having -------                                                    having count(*)>15

           

5.如何获得总人数超过15人的年级,地址中含有上海

        select  count(*) as 人数,grade as 年级 from  Student

        where  address  like'%上海%'

        group  by  grade

        having  count(*)>15

6.where和having的区别:

      (1)位置:

                              where可以用于select、update、delete和insert into values(select * from table where ..)语句中。
                              having只能用于select语句中
     (2)执行顺序:
                                 
                                    where的搜索条件是在执行语句进行分组之前应用
                                    having的搜索条件是在分组条件后执行的
                                    即如果where和having一起用时,where会先执行,having后执行
     (3)子句的区别:
                                       where子句中的条件表达式having都可以跟,而having子句中的有些表达式where不可以跟;
                                       having子句可以用集合函数(sum、count、avg、max和min),而where子句不可以
     
     总结:
                   1.WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。
                   2.GROUP BY 子句用来分组 WHERE 子句的输出。
                   3.HAVING 子句用来从分组的结果中筛选行

    

猜你喜欢

转载自www.cnblogs.com/unique1/p/12739302.html