SQL中的Where,Group By,Order By和Having
2012-08-07 22:37
323 查看
数据库,每个程序或多或少都会有所接触。
说到SQL语句,大家最开始想到的就是他的查询语句:
select * from tableName;
这是最简单的一种查询方式,不带有任何的条件。
当然在我们的实际应用中,这条语句也是很常用到的,当然也是最简单的。在考虑到性能的时候,我们一般不这么写!具体怎么写,请关注后续的文章。。。
下面我们着重的看下文章标题所提到的几个子句。
在SQL语句中又该如何进行翻译呢?
如下一句:
select * from tableName where id="2012";
就是寻找表tableName中,id=2012的记录。
这里的where对查询的结果进行了筛选。只有满足where子句中条件的记录才会被查询出来。
对于where子句没什么高深的东西,而且也是最常见的东西,大家都太熟了。在这里不进行过多的介绍哈!
我们先看上面的这个表格,假如现在让你找出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
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");
By是对查询的结果进行一个再排序的过程,一般放在查询语句的最后,可以是单列,也可以实现多列的排序。
分为升序asc和降序desc,默认的为升序。
Order By单列的排序比较简单,多列的也不麻烦。
select * from tablename group by friutname order by fruitname asc,price desc.
这四个都是我们在写SQL语句中比较常见的,在此做个小小的总结!希望对大家有些帮助,女子乒乓球团体决赛开始了,看比赛去咯!
希望我们也像中国的乒乓球一样,天下无敌!加油努力吧!
说到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
OrderBy是对查询的结果进行一个再排序的过程,一般放在查询语句的最后,可以是单列,也可以实现多列的排序。
分为升序asc和降序desc,默认的为升序。
Order By单列的排序比较简单,多列的也不麻烦。
select * from tablename group by friutname order by fruitname asc,price desc.
这四个都是我们在写SQL语句中比较常见的,在此做个小小的总结!希望对大家有些帮助,女子乒乓球团体决赛开始了,看比赛去咯!
希望我们也像中国的乒乓球一样,天下无敌!加油努力吧!
相关文章推荐
- SQL中 where, group by,having,order by 的重点
- SQL中的Where,Group By,Order By和Having的用法/区别
- SQL中Group By, Having, Where, Order by几个语句的执行顺序
- SQL语句之order by 、group by、having、where
- SQL中的Where,Group By,Order By和Having
- 【sql之区分Order by、group by、where、having】
- SQL中的Where,Group By,Order By和Having
- 当一个SQL语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序
- sql语句中where、group by、having、order by 是否可以使用别名
- sql语句中order by、group by和having的区别
- 6.组函数(avg(),sum(),max(),min(),count())、多行函数,分组数据(group by,求各部门的平均工资),分组过滤(having和where),sql优化
- Group by,order by,having 和where的顺序
- 关于sql的UNION ,order by 、group by 、having等的用法
- SQL语句where,Group By,having order by 的详细使用方法
- Group By 和 Having, Where ,Order by语句的执行顺序(转载)
- mysql的group by、order by和having、where比较
- WHERE 、GROUP BY,HAVING、ORDER BY、LIME
- 当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序
- SQL中order by 、group by 、having的用法区别
- Oracle数据库-where, group by, having, order by语句的执行顺序