• SQL中的Where,Group By,Order By和Having


    说到SQL语句,大家最开始想到的就是他的查询语句:

    select * from tableName;

    这是最简单的一种查询方式,不带有任何的条件。

    当然在我们的实际应用中,这条语句也是很常用到的,当然也是最简单的。在考虑到性能的时候,我们一般不这么写!具体怎么写,请关注后续的文章。。。

    下面我们着重的看下文章标题所提到的几个子句。

    一、Where

    在英文中翻译为:在哪里,在什么地方。

    在SQL语句中又该如何进行翻译呢?

    如下一句:

    select * from tableName where id="2012";

    就是寻找表tableName中,id=2012的记录。

    这里的where对查询的结果进行了筛选。只有满足where子句中条件的记录才会被查询出来。

    对于where子句没什么高深的东西,而且也是最常见的东西,大家都太熟了。在这里不进行过多的介绍哈!

    二、Group By

    group by子句,我们放在select子句中的列必须也要放在group by子句中,除非在select子句中不指定任何列。 这句总感觉有问题?请大牛指点。

    我们先看上面的这个表格,假如现在让你找出Apple在China,Japan,USA的平均价格,你怎么办?

    我们可以这么做:select avg(price) from tablename where fruitname="apple";

    Group By 一般是和一些聚合函数一起使用,比如上面我们用到的求平均的函数avg,还有求和sum,求个数count,求最大max,求最小min and so on.

    对于上表,求每种水果的最大的价格:select fruitname,productplace,max(price) from tablename group by fruitname

    Group By 还有一个重要的合作对象,他就是having

    三、Having

    我们用Group By 进行分组后,如何对分组后的结果进行一个筛选呢?having来帮您解决这个难题。

    1.首先看一个例子:求平均价格在3.0以上的水果

    如果我们使用这个:

    select fruitname,avg(price) from tablename where avg(price)>=3.0 group by fruitname ;

    这样能否达到我们的要求呢?

    答案是否定的,因为where子句不能使用聚合函数。为了解决这个问题,我们来用下我们的杀手锏,他就是Having;

    改写如下:select fruitname,avg(price) from tablename group by fruitname having avg(price)>=3.0;

    2.我们继续看Having的另外一个匪夷所思

    select fruitname,avg(price) from tablename group by fruitname having price<2.0;

    这个查询的结果你们觉得会是什么呢?

    没错,就是 orange 0.8 ;只有这一条记录

    为什么呢?为什么Apple没有被查到呢,因为apple的有的价格超出了2.0.

    另外运算符in也可以用在having 子句。

    select fruitname,avg(price) from tablename group by fruitname having fruitname in ("orange","apple");

    四、Order By

    Order By是对查询的结果进行一个再排序的过程,一般放在查询语句的最后,可以是单列,也可以实现多列的排序。

    分为升序asc和降序desc,默认的为升序。

    Order By单列的排序比较简单,多列的也不麻烦。

    select * from tablename group by friutname order by fruitname asc,price desc.

    转自:http://blog.csdn.net/qitian0008/article/details/7840845

  • 相关阅读:
    响应式设计的 5 个 CSS 实用技巧
    iframe的高度自适应的方法
    HDOJ1285 比赛排名(拓扑排序)
    GENIA项目GENIA语料库
    HDOJ1102 修路问题(最小生成树Prim)
    二叉树的一些操作
    GENIA项目综述论文(E99)
    GENIA项目主页
    读《统计自然语言处理》有笔记——语料库与知识词汇库
    HDOJ2535 ( Vote ) 【水题】
  • 原文地址:https://www.cnblogs.com/leihupqrst/p/3386564.html
Copyright © 2020-2023  润新知