加载中...
加载中...
SQL的书写顺序和执行顺序

SQL的书写顺序和执行顺序 原创

数据库/SQL

Sql 的书写顺序  

SELECT
DISTINCT <select_list>
FROM <left_table>
<join_type> JOIN <right_table>
ON <join_condition>
WHERE <where_condition>
GROUP BY <group_by_list>
HAVING <having_condition>
ORDER BY <order_by_condition>
LIMIT <limit_number>

Sql 的执行顺序

from-->join-->on-->where-->group by-->having-->select-->order by-->limit  

做了什么?

from===确定操作的表
join on===多表连接
where===条件筛选
group by===分组
having===分组筛选(sum、count等聚合函数)
select===查询返回字段(distinct,sum、max等函数)
order by===排序(DESC、ASC)
limit===限制返回数据

GROUP BY 用法 

GROUP BY,即以其中一个字段的值来分组

select 的字段只能是分组的字段类别以及使l聚合函数如,max(),min(),count()的字段。

where在前,group by在后的原因:要先用where过滤掉不进行分组的数据,然后在对剩下满足条件的数据进行分组。

having是在分好组后找出特定的分组,通常是以筛选聚合函数的结果,如sum(a) > 10等,且having必须在group by 后面,

使用了having必须使用group by,但是使用group by 不一定使用having。不允许使用双重聚合函数,所以在对分组进行筛选的时候,可以用order by 排序,然后用limit也可以找到极值。

having和where

having只能用在group by之后,对分组后的结果进行筛选
where在group by 之前,也在having之前。
where后的条件表达式里不允许使用聚合函数having可以。

因为聚合函数是做统计用的,所有的聚合方式使用都是对这一个字段进行聚合.但在mysql内部运行机制中,where后面还没有结果,只有select后面才有结果集。所以聚合函数是不能放在where后面,却可以放在select后面。

为什么聚合函数却可以放在having后面呢?

having是分组后的过滤,也就意味着having是对分组的结果进行过滤.所以having之前一定是分组,一定是有结果的,也就意味着having后面的聚合函数可以统计到结果.所以聚合函数却可以放在having后面. 

当分组筛选的时候 用having,其它情况用where

只要条件里面的字段, 不是表里面原先有的字段就需要用having. SQL在查询表的时候先把查询的字段放到了内存里,而where查询的时候是从表里面查的,其余需要用having。

count用法

使用count(列名)当某列出现null值的时候,count(*)仍然会计算,但是count(列名)不会。

MySQL聚合函数

函数名作用
MAX(column)返回某列的最低值(有则不会返回NULL,没有则返回NULL)
MIN(column)返回某列的最高值(没有则返回NULL)
COUNT(column)返回某列的行数(不包括 NULL 值)
COUNT(*)返回被选列行数(包括NULL)
SUM(column)求和
AVG(column)求平均值



数据库中“hql和sql”的区别1、sql面向数据库表查询。2、hql面向对象查询。3、hql:from后面跟的类名+类对象where后用对象的属性做条件。4、sql:from后面跟的是表名&nbsp;&nbsp;
没有更多推荐了 [去首页]
image
文章
376
原创
293
转载
83
翻译
0
访问量
183397
喜欢
73
粉丝
5
码龄
7年
资源
3

文章目录

加载中...
3
2