【MySQL】记录一次SQL呆瓜操作之SQL执行顺序
先看我的呆瓜的瓜,再看执行顺序吧。少年,加油!
sql执行顺序
书写顺序 select – distinct – from – on – join – where – group by – having – order by – limit
执行顺序
- from :从哪个表检索
- on: 根据条件过滤掉不符合的内容
- join: 执行join的表,添加符合条件的行列
- where: 过滤条件
- group by:进行分组
- having:对分组后结果进行过滤
- select:对符合结果进行打印
- distinct:打印时顺带去重后输出
- order by:对分组过滤之后的结果排序
- limit:选择想要打印输出的记录数。
顺序详解:
-
(7) select (8) distinct <select_list> (1) from <left_table> (3) <join_type> join <right_table> (2) on <join_condition> (4) where <where_condition> (5) group by <group_by_list> (6) having <having_condition> (9) order by <order_by_condition> (10) limit <limit_number> 第一步 执行 from 知道先从<left_table>这个表开始的 第二步 执行 on 过滤 根据 <join_condition> 这里的条件过滤掉不符合内容的数据 第三步 执行 join 添加外部行-------- inner join 找两张表共同的部分--------- left join 以左表为准,找出左表所有的信息,包括右表没有的--------- right join 以右表为准,找出左表所有的信息,包括左表没有的--------- #注意:mysql不支持全外连接 full JOIN 可以用union 第四步 执行 where 条件 where后加需要满足的条件,然后就会得到满足条件的数据 第五步 执行 group by 分组 当我们得到满足where条件后的数据时候,group by 可以对其进行分组操作 第六步 执行 having 过滤 having 和 group by 通常配合使用,可以对 满足where条件内容进行过滤 第七步 执行 select 打印操作 当以上内容都满足之后,才会执行得到select列表 第八步 执行 distinct 去重 得到select列表之后,如果指定有 distinct ,执行select后会执行 distinct去重操作 第九步 执行 order by 排序 以上得到select列表 也经过去重 基本上就已经得到想要的所有内容了 然后就会执行 order by 排序asc desc 第十步 执行 limit 限制打印行数,我们可以用limit 来打印出我们想要显示多少行。
我的呆瓜操作
我想要各类活动的女生人数〈想想该怎么书写sql〉:
我的做法是
group by 活动类型 having 性别=女
-
结果显示的活动类型只有几个!????
这是怎么回事呢?活动类型很明显有28个,但是我查询之后就是6个。。。。
原因足以让自己佩服自己:
-
原来group by ,分组之后,每组结果只为一个,即使你某个活动有多条记录,它也只查第一条 然后having过滤性别为女,比如28个活动,分组之后28条记录,再过滤女生,结果为6条记录,那就说明分组后的28条记录中,性别为女的只有6条,所以查询结果只有6条。
结语
犯了这么基础的一个错误,实在那什么漏网之鱼……
往后还是得先想明白再动手吧!
下一篇:
MySQL 8.0.32版本安装教程