说到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

SQL中的Where,Group By,Order By和Having的更多相关文章

  1. sql中having、group by用法及常用聚合函数

    having是用在聚合函数的用法.当我们在用聚合函数的时候,一般都要用到GROUP BY 先进行分组,然后再进行聚合函数的运算.运算完后就要用到HAVING 的用法了,就是进行判断了. 注意:sele ...

  2. SQL中group by后面的having中不能使用别名

    如下图中,SQL中需要对group by的结果使用having进行过滤,不能使用select中定义的别名,需要使用查询字段的原始名.否则会报错,列明未定义. 下图未错误演示: 修改后,正确的SQL语句 ...

  3. SQL中Group By的使用

    1.概述 2.原始表 3.简单Group By 4.Group By 和 Order By 5.Group By中Select指定的字段限制 6.Group By All 7.Group By与聚合函 ...

  4. SQL中Group By 的使用

    1.概述 “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理. 2.原始表 3.简 ...

  5. 【转】SQL中Group By的使用

    1.概述 2.原始表 3.简单Group By 4.Group By 和 Order By 5.Group By中Select指定的字段限制 6.Group By All 7.Group By与聚合函 ...

  6. MYSQL:SQL中Group By的使用

    SQL中Group By的使用   1.概述 2.原始表 3.简单Group By 4.Group By 和 Order By 5.Group By中Select指定的字段限制 6.Group By ...

  7. 转载:SQL中Group By 的常见使用方法

    SQL中Group By 的常见使用方法  转载源:http://www.cnblogs.com/wang-meng/p/5373057.html 前言今天逛java吧看到了一个面试题, 于是有了今天 ...

  8. 用SQL查询方式显示GROUP BY中的TOP解决方法[转]

    用SQL查询方式显示GROUP BY中的TOP怎样用一个SQL语句来显示 分组后每个组的前几位 比如把一个学校所有学生的成绩按班级分组,再显示每个班级前五名的信息. 班级     学生   成绩 一班 ...

  9. SQL 中的group by (转载)

    概述 原始表 简单Group By Group By 和 Order By Group By中Select指定的字段限制 Group By All Group By与聚合函数 Having与Where ...

随机推荐

  1. Lucene的初步了解和学习

    Lucene的学习一,什么是全文检索 1.数据的分类 1.结构化数据 格式固定,长度固定,数据类型固定. 例如:数据库中的数据: 2.非结构化数据 word文档,pdf文档,邮件,html,txt 格 ...

  2. java 多线程小记

    /*java里面实现多线程一般有两种方式 * 1,继承Thread类,实现run方法 * 2,实现Runnable接口,实现run方法 * start方法可以新建一个线程,创建多线程必须调用此方法 * ...

  3. ZOJ4103 Traveler(2019浙江省赛)

    构造+思维~ #include<bits/stdc++.h> using namespace std; ; int N,M,T; int visit[maxn]; stack<int ...

  4. [转]Mysql连表之多对多

    转自 回到顶部 连表多对多 可以理解成一夫多妻和一妻多夫. 男人表: nid name 1 xxx 2 yyy 3 zzz 女人表: nid name 1 aaa 2 bbb 3 ccc 要让两个表建 ...

  5. 并发编程之GIL

    目录 GIL 什么是GIL锁 为什么需要加锁 带来的问题 如何解决 关于性能的讨论 计算密集型任务:进程执行更快 IO密集型:线程执行更快 自定义锁与GIL的区别 GIL 什么是GIL锁 官方解释: ...

  6. centOS+DJango+mysql_nginx部署流程记录

    安装Python3.6.2: https://www.jianshu.com/p/7a76bcc401a1 安装MySQL: https://www.cnblogs.com/luohanguo/p/9 ...

  7. STM32 RTC上的唤醒和闹钟

    RTC很简单只要给备用电,RTC就会不停,可以进行设置和读时间.同时在RTC上也涉及了闹钟(EXTI_17:RTC_FLAG_ALRAF,相当于RTC的定时器,闹钟到了之后进行异步操作)和唤醒中断(低 ...

  8. android开发如何在页面之间传参

    第一个页面跳转 传递值 Button bn1=(Button)findViewById(R.id.btn_Login); //跳转bn1.setOnClickListener(new OnClickL ...

  9. warning:Pointer is missing a nullability type specifier (__nonnull or __nullable)

    当我们定义某个属性的时候  如果当前使用的编译器版本比较高(6.3+)的话经常会遇到这样一个警告:warning:Pointer is missing a nullability type speci ...

  10. Flutter | 状态管理特别篇——Provide

    前言 今天偶然发现在谷歌爸爸的仓库下出现了一个叫做flutter-provide的状态管理框架,2月8日才第一次提交,非常新鲜.在简单上手之后感觉就是一个字--爽!所以今天就跟大家分享一下这个新的状态 ...