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 ...
随机推荐
- UVA 133“The Dole Queue”(循环报数处理技巧)
•参考资料 [1]:紫书P82 •题意(by紫书) 按照被选中的次序输出这 n 个人的编号: 如果A和B选中的是同一个人,输出一个这个人的编号: 输出格式:输出的每个编号占3个字节,不够3个字节在前面 ...
- CodeForces - 344B Simple Molecules (模拟题)
CodeForces - 344B id=46665" style="color:blue; text-decoration:none">Simple Molecu ...
- Solidworks拖动装配体的时候物资动力有什么用
Solidworks物资动力就是模拟真实的场景,你在拖动或旋转零件的时候会和周围的零件碰撞,有相互力的作用. 1 标准拖动 2 碰撞检查 3 选择物资动力(零件上面的黑白相间小圆表示物体重心) ...
- [Python] SQLBuilder 演示样例代码
用Python写一个SQLBuilder.Java版能够从 http://www.java2s.com/Code/Java/Database-SQL-JDBC/SQLBuilder.htm 看到. 附 ...
- 出现“Windows资源管理器已停止工作”错误
出现"Windows资源管理器已停止工作"错误 什么是资源管理器呢,explorer.exe进程的作用就是让我们管理计算机中的资源! 今天开电脑的时候就一直提示windows资源管 ...
- 移动端去掉按钮button默认样式
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- Oracle中group by 的扩展函数rollup、cube、grouping sets
Oracle的group by除了基本使用方法以外,还有3种扩展使用方法,各自是rollup.cube.grouping sets.分别介绍例如以下: 1.rollup 对数据库表emp.如果当中两个 ...
- Java千百问_05面向对象(006)_is-a,has-a,like-a是什么
点击进入_很多其它_Java千百问 1.is-a,has-a,like-a是什么 在面向对象设计的领域里,有若干种设计思路,主要有例如以下三种: is-a.has-a.like-a java中在类.接 ...
- java 逻辑运算符 短路(条件操作)
两个数字计算时都会先把数字转换成二进制后再进行换算,二进制就是由0和1组成的数字 http://yxwang0615.iteye.com/blog/1084288
- 36:字符串排序SortString
题目描述:编写一个程序,将输入字符串中的字符按如下规则排序. 规则1:英文字母从A到Z排列,不区分大小写. 如,输入:Type 输出:epTy 规则2:同一个英文字母的大小写同时存在时,按照输入顺序排 ...