MySQL——sql语句的执行顺序
#核心知识点:
书写顺序:where——》group by——》having——》order by——》limit
许多时候在书写一些复杂的sql语句的时候,尤其是在渐进式推导的时候,经常想要添加一些条件,但是却不知道往哪里加,也许进过许多次尝试之后成功了,但是下次又不知道了,因此总结就显得非常重要了。
首先给出sql语句的查询(或书写)顺序:
- (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> #分页
上面从上到下是sql语句的书写顺序,前面括号代表它的执行顺序。
只有弄清楚书写顺序,我们写好的查询语句才不会出现语法错误,
只有弄清楚执行顺序,才能得到想要得到的结果。
关于书写我们要记住关键字:where——》group by——》having——》order by——》limit
下面给出一个例子,帮助理解:
有表table1和table2,需要查询来自杭州,且订单数小于2的客户。
表一:
- mysql> select * from table1;
- +-------------+----------+
- | customer_id | city |
- +-------------+----------+
- | 163 | hangzhou |
- | 9you | shanghai |
- | baidu | hangzhou |
- | tx | hangzhou |
- +-------------+----------+
- 4 rows in set (0.00 sec)
表二:
- mysql> select * from table2;
- +----------+-------------+
- | order_id | customer_id |
- +----------+-------------+
- | 1 | 163 |
- | 2 | 163 |
- | 3 | 9you |
- | 4 | 9you |
- | 5 | 9you |
- | 6 | tx |
- | 7 | NULL |
- +----------+-------------+
- 7 rows in set (0.00 sec)
使用两种方法来解答:
第一种,使用子查询
- #来自杭州
- SELECT * FROM table1 WHERE city = 'hangzhou';
- +-------------+----------+
- | customer_id | city |
- +-------------+----------+
- | 163 | hangzhou |
- | baidu | hangzhou |
- | tx | hangzhou |
- +-------------+----------+
- #订单小于2
- SELECT * FROM table2
- GROUP BY customer_id HAVING COUNT(customer_id)< 2;
- +----------+-------------+
- | order_id | customer_id |
- +----------+-------------+
- | 7 | NULL |
- | 6 | tx |
- +----------+-------------+
- #再过滤掉其中不符合的就行
- #联合在一起
- SELECT * FROM table2
- WHERE customer_id in (SELECT customer_id FROM table1 WHERE city = 'hangzhou')
- GROUP BY customer_id HAVING COUNT(customer_id)< 2;
- #结果:
- +----------+-------------+
- | order_id | customer_id |
- +----------+-------------+
- | 6 | tx |
- +----------+-------------+
这种方法逻辑性比较鲜明。
2.第二种,使用内链接查询
(1)内链接
- mysql> SELECT order_id,a.customer_id city FROM table2 a INNER JOIN table1 b
- -> on a.customer_id = b.customer_id;
- +----------+------+
- | order_id | city |
- +----------+------+
- | 1 | 163 |
- | 2 | 163 |
- | 3 | 9you |
- | 4 | 9you |
- | 5 | 9you |
- | 6 | tx |
- +----------+------+
(2)地点是杭州
- mysql> SELECT order_id,a.customer_id city FROM table2 a INNER JOIN table1 b
- -> on a.customer_id = b.customer_id
- -> WHERE city = 'hangzhou';
- +----------+------+
- | order_id | city |
- +----------+------+
- | 1 | 163 |
- | 2 | 163 |
- | 6 | tx |
- +----------+------+
(3)小于两件
- mysql> SELECT order_id,a.customer_id city FROM table2 a INNER JOIN table1 b
- -> on a.customer_id = b.customer_id
- -> WHERE city = 'hangzhou'
- -> GROUP BY a.customer_id
- -> HAVING COUNT(1) < 2;
- +----------+------+
- | order_id | city |
- +----------+------+
- | 6 | tx |
- +----------+------+
使用内链接查询的效率会比子查询来的高,但是对个人的要求比较高。
MySQL——sql语句的执行顺序的更多相关文章
- mysql 中sql语句的执行顺序
今天突然想起来,之前面试一个很牛逼的公司(soho)的时候,一个美眉面试官,面试的时候问到了很多之前都没有意识到的问题,回想起来那美眉看着年纪不大,技术那是真666啊.好了说一下人家问的这个有关mys ...
- SQL语句的执行顺序
一.sql语句的执行顺序 (8)SELECT (9) DISTINCT (11) <TOP_specification> <select_list> (1) FROM < ...
- SQL SERVER 一个SQL语句的执行顺序
一个SQL 语句的执行顺序 1.From (告诉程序 来自哪张表 如果是表表达式 依旧是如此顺序) 2.Where(条件筛选 谓词筛选 ) 3.Group by(分组) 4.Having(分组 ...
- SQL语句的执行顺序和效率
今天上午在开发的过程中,突然遇到一个问题,需要了解SQL语句的执行顺序才能继续,上网上查了一下相关的资料,现整理如下:一.sql语句的执行步骤: 1)语法分析,分析语句的语法是否符合规范,衡量语句中各 ...
- day57-mysql-五种约束和sql语句逻辑执行顺序
二.sql语句逻辑执行顺序 () SELECT () DISTINCT <select_list> 去重复 () FROM <left_table> () <join_t ...
- MySQL笔记-语句的执行顺序
在一次查询线上问题时发现有以下两条同样的SQL,执行后数据的顺序不一样: SELECT * FROM nns_assists_item AS asset WHERE asset.nns_assist_ ...
- mysql查询语句的执行顺序(重点)
一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...
- MySQL Select语句的执行顺序
源文章:How is a query executed in MySQL? 当执行SQL的Select查询语句时,SQL指令的执行顺序如下: FROM 子句 WHERE 子句 GROUP BY 子句 ...
- mysql 查询语句的执行顺序(重重点)
一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...
随机推荐
- 缠中说禅股票交易系统图解 z
缠中说禅股票交易系统图解 2010-03-23 10:51 (王纯阳)缠论祖师的经典语录 1. 就在买点买,卖点卖:当然,买点并不一定是一个点,一个价位,级别越大的,可以容忍的区间越大. 2. 你要经 ...
- dedecms调用文章发布日期
<span>[field:pubdate function="MyDate('m-d',@me)"/]</span>
- Mac Pro 系统自带python路径
/usr/local/Frameworks/Python.framework/Versions/2.7/bin
- HDU 1041 Computer Transformation 数学DP题解
本题假设编程是使用DP思想直接打表就能够了. 假设是找规律就须要数学思维了. 规律就是看这些连续的0是从哪里来的. 我找到的规律是:1经过两次裂变之后就会产生一个00: 00经过两次裂变之后也会产生新 ...
- 负样本采样及bias校准、ctr平滑
参考:https://zhuanlan.zhihu.com/p/31529643 在CTR预估中,负样本采样是一种常见的特征工程方法.一般CTR预估的原始正负样本比可能达到1:1000~1:10000 ...
- ubuntu更改mysql的编码配置
1.Ctrl+t打开终端 2.输入mysql -u root -p 命令,进入MySQL 输入 SHOW VARIABLES LIKE 'char%'; 查看MySQL编码,有两个不是utf8 3.在 ...
- Android 百度地图开发(二)
这一篇文章主要解说的是百度地图的定位功能,然后还有MyLocationOverlay和PopupOverlay两个地图覆盖物的使用.Overlay是"图层"或"覆盖物&q ...
- apue学习笔记(第十四章 高级I/O)
本章涵盖了从多概念和函数:非阻塞I/O.记录锁.I/O多路转换.异步I/O.readv和writev函数以及存储映射I/O 非阻塞I/O 非阻塞I/O使我们可以发出open.read和write这样的 ...
- openssl生成https证书
openssl生成https证书 分类: 其它2009-09-03 16:20 452人阅读 评论(0) 收藏 举报 includemoduleaccessapachessl服务器 openssl生成 ...
- URL Handle in Swift (一) -- URL 分解
更新时间: 2018-6-6 在程序开发过程之中, 我们总是希望模块化处理某一类相似的事情. 在 ezbuy 开发中, 我接触到了对于 URL 处理的优秀的代码, 学习.改进.记录下来.希望对你有所帮 ...