select的5中子句where,group by, havaing, order by, limit的使用顺序及实例

-- 语法:

SELECT select_list   
FROM table_name  
[ WHERE search_condition ]  
[ GROUP BY group_by_expression ]  
[ HAVING search_condition ]  
[ ORDER BY order_expression [ ASC | DESC ] ]
[limit m,n]

  

 

-- 示例:

-- limit 0,10是从第一条开始,取10条数据

select classNo  from table_name
group by classNo
having(avg(成绩)>70)
order by classNo
limit 0,10

  

说明:

1.where

where后跟条件用来筛选我们所需的行。它后面可以跟的操作符有=、!=、<、>、<=、>=、 in、 like(可以和通配符%结合一起用,效果将会更好) 、between....and........ AND、OR 、NOT

如:select id,name,score form student where score in (每组里面的最高分组合);

2.group by(GROUP BY 语句用于结合合计函数(也叫聚合函数sum count avg max min),根据一个或多个列对结果集进行分组。否则没有多大的意义)

group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面
如:我们对文字的分类id进行分组,查询每组分类的文章数 select articlecategory_id,count(*) from article group by articlecategory_id;
再次提示:
如果你使用了group by,而没有相应的使用聚合函数那么结果就没有意义了,按照实际情况来思考的话就变成了一对多了(也就是一个分组对应多个对象(也就是多行),那么一个分组对应多行数据的显示就变成了分组和第一行数据进行显示了,所以此时我们应该使用聚合函数(聚合函数就是把多个变成一),也就是对多行数据进行筛选,得到我们想要的数据,如:可以使用count计算论坛小组总帖子数,可以使用sum来计算
论坛小组帖子总回复数,可以使用max来计算论坛小组最多回复的帖子,可以使用min来计算论坛小组最少回复数(没有多大意义,商城最便宜的商品就意义了),可以使用avg来计算论坛每周的平均访问量(商城所有商品的平均价格)等。

3.having 这个是针对查询的结果进行作用,只能对结果拥有的列进行操作,与where不同的是where是针对原表(就是from后面的那张表的字段)发挥作用。其中having里面可以使用聚合函数。为group by子句设置条件,类似于where为select语句设置条件的方法。having的查找条件可以包括集合函数表达式。除此之外,它的查找条件与where查找条件相同。

select articlecategory_id,count(*) from article group by articlecategory_id having count(*)<5;

4.order by 排序 (可以对多个字段进行排序)

可以针对字段进行排序,order by 字段1 [asc] 升序,[desc] 降序

5.limit 获取条目的限定

语法 limit offset,N

limit 5 《====》 limit 0,5;

总结:where是针对from后面跟的表进行处理,而group by having order by limit则是针对select后面的字段进行处理。从它们的结构角度来看则:先整体后部分。

时间: 2024-10-18 15:42:20

select的5中子句where,group by, havaing, order by, limit的使用顺序及实例的相关文章

分组统计:count,group by,having, order by

--统计男女生的总人数select COUNT(*) from Student where Sex='男'select COUNT(*) from Student where Sex='女'--统计每一个班级的总人数select COUNT(*) from Student where ClassId=1--分组统计:需要按班级分组,每一个组得到一个统计结果--select 字段列表 from 表列表 where 数据源筛选 group by 分组字段列表 order by 排序字段列表selec

MySql学习(二) —— where / having / group by / order by / limit 简单查询

这篇博客主要记录sql的五种子句查询语法! 一个重要的概念:将字段当做变量看,无论是条件,还是函数,或者查出来的字段. select五种子句 where 条件查询 group by 分组 having 筛选 order by 排序 limit 限制结果条数 为了练习上面5种子句,先建立一张goods表,主要用于查询操作,表结构如下: 1.基础查询 —— where where常用运算符: 1.1 查出主键为20的商品 :mysql> SELECT goods_id,cat_id,goods_sn

操作数据表中的记录——SELECT (where表达式、GROUP BY、HAVING、LIMIT)

原文链接:http://www.ifyao.com/2015/01/26/%E6%93%8D%E4%BD%9C%E6%95%B0%E6%8D%AE%E8%A1%A8%E4%B8%AD%E7%9A%84%E8%AE%B0%E5%BD%95-select-where%E8%A1%A8%E8%BE%BE%E5%BC%8F%E3%80%81group-by%E3%80%81having%E3%80%81limit/ 操作数据表中的记录——SELECT一.查找记录1.语法: SELECT select_e

查询语句中select from where group by having order by的执行顺序

查询语句中select from where group by having order by的执行顺序 1.查询中用到的关键词主要包含六个,并且他们的顺序依次为 select--from--where--group by--having--order by 其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序 与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行 from--where--group by--having--select--order by,

mysql中group by和order by混用 结果不是理想结果

在使用mysql排序的时候会想到按照降序分组来获得一组数据,而使用order by往往得到的不是理想中的结果,那么怎么才能使用group by 和order by得到理想中的数据结果呢? 例如 有一个 帖子的回复表,posts( id , tid , subject , message ,  dateline ) , id为 自动增长字段, tid为该回复的主题帖子的id(外键关联),  subject 为回复标题, message 为回复内容, dateline 为回复时间,用UNIX 时间戳

11 SQL中的GroupBy (Group by in sql server)

GroupBy 语句用来对选择的结果进行分组,GroupBy通常和聚合函数一起使用.比如有下面的一张表: 如果我们要将其按照City分组,并且计算出每个City的工资总和的话,可以使用下面的语句: SELECT [City],SUM([Salary]) AS TotalSalary FROM [Sample].[dbo].[tblEmployee] GROUP BY [City] 下面是执行结果: 这里有一点要注意的是:如果我们不写Group By 语句,那么上面的代码会报错.原因很简单既然我们

MySQL查询子句(group by,limit,union,order by等)

Order by 按照字段值进行排序,默认升序(asc).校对规则决定排序关系. order by 字段 升序|降序(asc|desc), Order by允许多字段排序. 指的是,先按第一个字段排序,如果不能区分,才使用第二个字段,以此类推. create table test( id int primary key not null auto_increment, name varchar(10), group_id int ); insert into test values(null,'

sql中having与group by的用法

-------------自己测试--------------- select sname,sum(smon) from student group by sname having sum(smon)>7 ---------------自己测试----------------- 下面是正文 当同时含有where子句.group by 子句 .having子句及聚集函数时,执行顺序如下: 执行where子句查找符合条件的数据: 使用group by 子句对数据进行分组: 对group by 子句形

mysql “group by ”与&quot;order by&quot;的研究--分类中最新的内容

这两天让一个数据查询难了.主要是对group by 理解的不够深入.才出现这样的情况这种需求,我想很多人都遇到过.下面是我模拟我的内容表我现在需要取出每个分类中最新的内容 select * from test group by category_id order by `date` 结果如下明显.这不是我想要的数据,原因是msyql已经的执行顺序是 引用 写的顺序:select ... from... where.... group by... having... order by..执行顺序: