首页 数据库 mysql教程 Mysql语句-执行顺序_MySQL

Mysql语句-执行顺序_MySQL

May 27, 2016 pm 01:45 PM
mysql语句 执行顺序

1.这样一个问题,作为一个开发人员需要掌握数据库的哪些东西? 在开发中涉及到数据库,基本上只用到了sql语句,如何写sql以及对其进行优化就比较重要,那些mysql的厚本书籍针对的是DBA,我们只需要学习其中的sql就可以了。

2.既然会写sql是目标,那么怎么才能写好sql.学习下面几点:

1)Mysql的执行顺序,这个是写sql的核心,之前遇到的一些错误就是因为对其不了解;

2)如何进行多表查询,优化,这个是很重要的部分;

3)sql语句的函数,sql提供的函数方便了很多操作;

3.这篇对Mysql语句执行顺序的学习做了总结:

1)Mysql语法顺序,即当sql中存在下面的关键字时,它们要保持这样的顺序:

 

select[distinct]
from
join(如left join)
on
where
group by
having
union
order by
limit
登录后复制

<br/>
登录后复制

2)Mysql执行顺序,即在执行时sql按照下面的顺序进行执行:

from
on
join
where
group by
having
select
distinct
union
order by
登录后复制

3)针对上面的Mysql语法顺序和执行顺序,循序渐进进行学习:

建立如下表格orders:

\

注:下面所有语句符合语法顺序(也不可能不符合,因为会报错^_^),只分析其执行顺序:(join和on属于多表查询,放在最后展示)

语句一:

select a.Customer
from orders a
where a.Customer=&#39;Bush&#39; or a.Customer = &#39;Adams&#39;
登录后复制

分析一:首先是from语句找到表格,然后根据where得到符合条件的记录,最后select出需要的字段,结果如下:

\<br/>语句二groupby:groupby要和聚合函数一起使用

select a.Customer,sum(a.OrderPrice)
from orders a
where a.Customer=&#39;Bush&#39; or a.Customer = &#39;Adams&#39;
group by a.Customer
登录后复制

分析二:在from,where执行后,执行group by,同时也根据group by的字段,执行sum这个聚合函数。这样的话得到的记录对group by的字段来说是不重复的,结果如下:<br/>\<br/>

语句三having:

select a.Customer,sum(a.OrderPrice)
from orders a
where a.Customer=&#39;Bush&#39; or a.Customer = &#39;Adams&#39;
group by a.Customer
having sum(a.OrderPrice) > 2000
登录后复制

分析三:由于where是在group之前执行,那么如何对group by的结果进行筛选,就用到了having,结果如下:

\

语句四distinct: (为测试,先把数据库中Adams那条记录的OrderPrice改为3000)

select distinct sum(a.OrderPrice)
from orders a
where a.Customer=&#39;Bush&#39; or a.Customer = &#39;Adams&#39; or a.Customer = &#39;Carter&#39;
group by a.Customer
having sum(a.OrderPrice) > 1700
登录后复制

分析四:将得到一条记录(没有distinct,将会是两条同样的记录):

\

语句五union:完全是对select的结果进行合并(默认去掉重复的记录):

select distinct sum(a.OrderPrice) As Order1
from orders a
where a.Customer=&#39;Bush&#39; or a.Customer = &#39;Adams&#39; or a.Customer = &#39;Carter&#39;
group by a.Customer
having sum(a.OrderPrice) > 1500
union
select distinct sum(a.OrderPrice) As Order1
from orders a
where a.Customer=&#39;Bush&#39; or a.Customer = &#39;Adams&#39; or a.Customer = &#39;Carter&#39;
group by a.Customer
having sum(a.OrderPrice) > 2000
登录后复制

分析五:默认去掉重复记录(想保留重复记录使用union all),结果如下:

\

语句六order by:

select distinct sum(a.OrderPrice) As order1
from orders a
where a.Customer=&#39;Bush&#39; or a.Customer = &#39;Adams&#39; or a.Customer = &#39;Carter&#39;
group by a.Customer
having sum(a.OrderPrice) > 1500
union
select distinct sum(a.OrderPrice) As order1
from orders a
where a.Customer=&#39;Bush&#39; or a.Customer = &#39;Adams&#39; or a.Customer = &#39;Carter&#39;
group by a.Customer
having sum(a.OrderPrice) > 2000
order by order1
登录后复制

分析:升序排序,结果如下:

\

语句七limit:

select distinct sum(a.OrderPrice) As order1
from orders a
where a.Customer=&#39;Bush&#39; or a.Customer = &#39;Adams&#39; or a.Customer = &#39;Carter&#39;
group by a.Customer
having sum(a.OrderPrice) > 1500
union
select distinct sum(a.OrderPrice) As order1
from orders a
where a.Customer=&#39;Bush&#39; or a.Customer = &#39;Adams&#39; or a.Customer = &#39;Carter&#39;
group by a.Customer
having sum(a.OrderPrice) > 2000
order by order1
limit 1
登录后复制

分析七:取出结果中的前1条记录,结果如下:

\<br/>语句八(上面基本讲完,下面是join 和 on):

select distinct sum(a.OrderPrice) As order1,sum(d.OrderPrice) As order2
from orders a
left join (select c.* from Orders c) d 
on a.O_Id = d.O_Id
where a.Customer=&#39;Bush&#39; or a.Customer = &#39;Adams&#39; or a.Customer = &#39;Carter&#39;
group by a.Customer
having sum(a.OrderPrice) > 1500
union
select distinct sum(a.OrderPrice) As order1,sum(e.OrderPrice) As order2
from orders a
left join (select c.* from Orders c) e 
on a.O_Id = e.O_Id
where a.Customer=&#39;Bush&#39; or a.Customer = &#39;Adams&#39; or a.Customer = &#39;Carter&#39;
group by a.Customer
having sum(a.OrderPrice) > 2000
order by order1
limit 1
登录后复制

分析八:上述语句其实join on就是多连接了一张表,而且是两张一样的表,都是Orders。 执行过程是,在执行from关键字之后根据on指定的条件,把left join指定的表格数据附在from指定的表格后面,然后再执行where字句。

 

注:

1)使用distinct要写在所有要查询字段的前面,后面有几个字段,就代表修饰几个字段,而不是紧随distinct的字段;

2)group by执行后(有聚合函数),group by后面的字段在结果中一定是唯一的,也就不需要针对这个字段用distinct;

 

以上就是Mysql语句-执行顺序_MySQL的内容,更多相关内容请关注PHP中文网(www.php.cn)!


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

减少在Docker中使用MySQL内存的使用 减少在Docker中使用MySQL内存的使用 Mar 04, 2025 pm 03:52 PM

本文探讨了Docker中的优化MySQL内存使用量。 它讨论了监视技术(Docker统计,性能架构,外部工具)和配置策略。 其中包括Docker内存限制,交换和cgroups

mysql无法打开共享库怎么解决 mysql无法打开共享库怎么解决 Mar 04, 2025 pm 04:01 PM

本文介绍了MySQL的“无法打开共享库”错误。 该问题源于MySQL无法找到必要的共享库(.SO/.DLL文件)。解决方案涉及通过系统软件包M验证库安装

如何使用Alter Table语句在MySQL中更改表? 如何使用Alter Table语句在MySQL中更改表? Mar 19, 2025 pm 03:51 PM

本文讨论了使用MySQL的Alter Table语句修改表,包括添加/删除列,重命名表/列以及更改列数据类型。

在 Linux 中运行 MySQl(有/没有带有 phpmyadmin 的 podman 容器) 在 Linux 中运行 MySQl(有/没有带有 phpmyadmin 的 podman 容器) Mar 04, 2025 pm 03:54 PM

本文比较使用/不使用PhpMyAdmin的Podman容器直接在Linux上安装MySQL。 它详细介绍了每种方法的安装步骤,强调了Podman在孤立,可移植性和可重复性方面的优势,还

什么是 SQLite?全面概述 什么是 SQLite?全面概述 Mar 04, 2025 pm 03:55 PM

本文提供了SQLite的全面概述,SQLite是一个独立的,无服务器的关系数据库。 它详细介绍了SQLite的优势(简单,可移植性,易用性)和缺点(并发限制,可伸缩性挑战)。 c

在MacOS上运行多个MySQL版本:逐步指南 在MacOS上运行多个MySQL版本:逐步指南 Mar 04, 2025 pm 03:49 PM

本指南展示了使用自制在MacOS上安装和管理多个MySQL版本。 它强调使用自制装置隔离安装,以防止冲突。 本文详细详细介绍了安装,起始/停止服务和最佳PRA

如何为MySQL连接配置SSL/TLS加密? 如何为MySQL连接配置SSL/TLS加密? Mar 18, 2025 pm 12:01 PM

文章讨论了为MySQL配置SSL/TLS加密,包括证书生成和验证。主要问题是使用自签名证书的安全含义。[角色计数:159]

哪些流行的MySQL GUI工具(例如MySQL Workbench,PhpMyAdmin)是什么? 哪些流行的MySQL GUI工具(例如MySQL Workbench,PhpMyAdmin)是什么? Mar 21, 2025 pm 06:28 PM

文章讨论了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比较了它们对初学者和高级用户的功能和适合性。[159个字符]

See all articles