Mysql 语句执行顺序
2016-05-05 09:05
543 查看
原文地址:http://www.sxt.cn/u/13956/blog/9251
1.这样一个问题,作为一个开发人员需要掌握数据库的哪些东西? 在开发中涉及到数据库,基本上只用到了sql语句,如何写sql以及对其进行优化就比较重要,那些mysql的厚本书籍针对的是DBA,我们只需要学习其中的sql就可以了。
2.既然会写sql是目标,那么怎么才能写好sql.学习下面几点:
1)Mysql的执行顺序,这个是写sql的核心,之前遇到的一些错误就是因为对其不了解;
2)如何进行多表查询,优化,这个是很重要的部分;
3)sql语句的函数,sql提供的函数方便了很多操作;
3.这篇对Mysql语句执行顺序的学习做了总结:
1)Mysql语法顺序,即当sql中存在下面的关键字时,它们要保持这样的顺序:
2)Mysql执行顺序,即在执行时sql按照下面的顺序进行执行:
3)针对上面的Mysql语法顺序和执行顺序,循序渐进进行学习:
建立如下表格orders:
注:下面所有语句符合语法顺序(也不可能不符合,因为会报错^_^),只分析其执行顺序:(join和on属于多表查询,放在最后展示)
语句一:
分析一:首先是from语句找到表格,然后根据where得到符合条件的记录,最后select出需要的字段,结果如下:
语句二groupby:groupby要和聚合函数一起使用
分析二:在from,where执行后,执行group by,同时也根据group by的字段,执行sum这个聚合函数。这样的话得到的记录对group by的字段来说是不重复的,结果如下:
语句三having:
分析三:由于where是在group之前执行,那么如何对group by的结果进行筛选,就用到了having,结果如下:
语句四distinct: (为测试,先把数据库中Adams那条记录的OrderPrice改为3000)
分析四:将得到一条记录(没有distinct,将会是两条同样的记录):
语句五union:完全是对select的结果进行合并(默认去掉重复的记录):
分析五:默认去掉重复记录(想保留重复记录使用union all),结果如下:
语句六order by:
分析:升序排序,结果如下:
语句七limit:
分析七:取出结果中的前1条记录,结果如下:
语句八(上面基本讲完,下面是join 和 on):
分析八:上述语句其实join on就是多连接了一张表,而且是两张一样的表,都是Orders。 执行过程是,在执行from关键字之后根据on指定的条件,把left join指定的表格数据附在from指定的表格后面,然后再执行where字句。
注:
1)使用distinct要写在所有要查询字段的前面,后面有几个字段,就代表修饰几个字段,而不是紧随distinct的字段;
2)group by执行后(有聚合函数),group by后面的字段在结果中一定是唯一的,也就不需要针对这个字段用distinct;
下篇讲如何进行多表查询
1.这样一个问题,作为一个开发人员需要掌握数据库的哪些东西? 在开发中涉及到数据库,基本上只用到了sql语句,如何写sql以及对其进行优化就比较重要,那些mysql的厚本书籍针对的是DBA,我们只需要学习其中的sql就可以了。
2.既然会写sql是目标,那么怎么才能写好sql.学习下面几点:
1)Mysql的执行顺序,这个是写sql的核心,之前遇到的一些错误就是因为对其不了解;
2)如何进行多表查询,优化,这个是很重要的部分;
3)sql语句的函数,sql提供的函数方便了很多操作;
3.这篇对Mysql语句执行顺序的学习做了总结:
1)Mysql语法顺序,即当sql中存在下面的关键字时,它们要保持这样的顺序:
2)Mysql执行顺序,即在执行时sql按照下面的顺序进行执行:
建立如下表格orders:
注:下面所有语句符合语法顺序(也不可能不符合,因为会报错^_^),只分析其执行顺序:(join和on属于多表查询,放在最后展示)
语句一:
语句二groupby:groupby要和聚合函数一起使用
语句三having:
语句四distinct: (为测试,先把数据库中Adams那条记录的OrderPrice改为3000)
语句五union:完全是对select的结果进行合并(默认去掉重复的记录):
语句六order by:
语句七limit:
语句八(上面基本讲完,下面是join 和 on):
注:
1)使用distinct要写在所有要查询字段的前面,后面有几个字段,就代表修饰几个字段,而不是紧随distinct的字段;
2)group by执行后(有聚合函数),group by后面的字段在结果中一定是唯一的,也就不需要针对这个字段用distinct;
下篇讲如何进行多表查询
相关文章推荐
- mysql-5.7.12-winx64 MySQL服务无法启动,服务没有报告任何错误的解决办法
- Mysql 数据中文乱码问题解决
- membership 启用 roleManager 抛出异常:未能加载文件或程序集MySql.Web
- 赶集mysql军规
- MySQL的分支
- MYSQL使用正则表达式过滤数据
- MYSQL必知必会读书笔记 第一章(基础)
- mysql服务性能优化—my.cnf_my.ini配置说明详解(16G内存)
- MYSQL必知必会读书笔记第二章之版本更改
- MYSQL必知必会读书笔记第三章之显示数据库
- MYSQL必知必会读书笔记第四章之检索数据
- MySQL性能参数详解之Max_connect_errors 使用介绍
- MYSQL必知必会读书笔记第五章之排序检索数据
- MYSQL必知必会读书笔记第六章之过滤数据
- MYSQL必知必会读书笔记第七章之数据过滤
- MYSQL必知必会读书笔记第八章之使用通配符进行过滤
- MYSQL必知必会读书笔记第十和十一章之使用函数处理数据
- MySQL性能参数详解之Skip-External-Locking参数介绍
- MySQL查询优化
- MySQL_Table_Insert_Update_Delete