步步深入:MySQL架构总览-gt;查询执行流程-gt;SQL解析顺序
转载自 https://www.cnblogs.com/annsshadow/p/5037667.html
SELECT DISTINCT< select_list > FROM< left_table > < join_type > JOIN < right_table > ON < join_condition > WHERE< where_condition > GROUP BY< group_by_list > HAVING< having_condition > ORDER BY< order_by_condition > LIMIT < limit_number >
1 FROM <left_table> 2 ON <join_condition> 3 <join_type> JOIN <right_table> 4 WHERE <where_condition> 5 GROUP BY <group_by_list> 6 HAVING <having_condition> 7 SELECT 8 DISTINCT <select_list> 9 ORDER BY <order_by_condition> 10 LIMIT <limit_number>
create database testQuery
CREATE TABLE table1 (uid VARCHAR(10) NOT NULL,name VARCHAR(10) NOT NULL,PRIMARY KEY(uid) )ENGINE=INNODB DEFAULT CHARSET=UTF8;CREATE TABLE table2 (oid INT NOT NULL auto_increment,uid VARCHAR(10),PRIMARY KEY(oid) )ENGINE=INNODB DEFAULT CHARSET=UTF8;
INSERT INTO table1(uid,name) VALUES('aaa','mike'),('bbb','jack'),('ccc','mike'),('ddd','mike');INSERT INTO table2(uid) VALUES('aaa'),('aaa'),('bbb'),('bbb'),('bbb'),('ccc'),(NULL);
SELECTa.uid,count(b.oid) AS total FROMtable1 AS a LEFT JOIN table2 AS b ON a.uid = b.uid WHEREa. NAME = 'mike' GROUP BYa.uid HAVINGcount(b.oid) < 2 ORDER BYtotal DESC LIMIT 1;
mysql> select * from table1,table2; +-----+------+-----+------+ | uid | name | oid | uid | +-----+------+-----+------+ | aaa | mike | 1 | aaa | | bbb | jack | 1 | aaa | | ccc | mike | 1 | aaa | | ddd | mike | 1 | aaa | | aaa | mike | 2 | aaa | | bbb | jack | 2 | aaa | | ccc | mike | 2 | aaa | | ddd | mike | 2 | aaa | | aaa | mike | 3 | bbb | | bbb | jack | 3 | bbb | | ccc | mike | 3 | bbb | | ddd | mike | 3 | bbb | | aaa | mike | 4 | bbb | | bbb | jack | 4 | bbb | | ccc | mike | 4 | bbb | | ddd | mike | 4 | bbb | | aaa | mike | 5 | bbb | | bbb | jack | 5 | bbb | | ccc | mike | 5 | bbb | | ddd | mike | 5 | bbb | | aaa | mike | 6 | ccc | | bbb | jack | 6 | ccc | | ccc | mike | 6 | ccc | | ddd | mike | 6 | ccc | | aaa | mike | 7 | NULL | | bbb | jack | 7 | NULL | | ccc | mike | 7 | NULL | | ddd | mike | 7 | NULL | +-----+------+-----+------+ 28 rows in set (0.00 sec)
mysql> SELECT-> *-> FROM-> table1,-> table2-> WHERE-> table1.uid = table2.uid-> ; +-----+------+-----+------+ | uid | name | oid | uid | +-----+------+-----+------+ | aaa | mike | 1 | aaa | | aaa | mike | 2 | aaa | | bbb | jack | 3 | bbb | | bbb | jack | 4 | bbb | | bbb | jack | 5 | bbb | | ccc | mike | 6 | ccc | +-----+------+-----+------+ 6 rows in set (0.00 sec)
mysql> SELECT-> *-> FROM-> table1 AS a-> LEFT OUTER JOIN table2 AS b ON a.uid = b.uid; +-----+------+------+------+ | uid | name | oid | uid | +-----+------+------+------+ | aaa | mike | 1 | aaa | | aaa | mike | 2 | aaa | | bbb | jack | 3 | bbb | | bbb | jack | 4 | bbb | | bbb | jack | 5 | bbb | | ccc | mike | 6 | ccc | | ddd | mike | NULL | NULL | +-----+------+------+------+ 7 rows in set (0.00 sec)
mysql> SELECT-> *-> FROM-> table1 AS a-> LEFT OUTER JOIN table2 AS b ON a.uid = b.uid-> WHERE-> a. NAME = 'mike'; +-----+------+------+------+ | uid | name | oid | uid | +-----+------+------+------+ | aaa | mike | 1 | aaa | | aaa | mike | 2 | aaa | | ccc | mike | 6 | ccc | | ddd | mike | NULL | NULL | +-----+------+------+------+ 4 rows in set (0.00 sec)
mysql> SELECT-> *-> FROM-> table1 AS a-> LEFT OUTER JOIN table2 AS b ON a.uid = b.uid-> WHERE-> a. NAME = 'mike'-> GROUP BY-> a.uid; +-----+------+------+------+ | uid | name | oid | uid | +-----+------+------+------+ | aaa | mike | 1 | aaa | | ccc | mike | 6 | ccc | | ddd | mike | NULL | NULL | +-----+------+------+------+ 3 rows in set (0.00 sec)
mysql> SELECT-> *-> FROM-> table1 AS a-> LEFT OUTER JOIN table2 AS b ON a.uid = b.uid-> WHERE-> a. NAME = 'mike'-> GROUP BY-> a.uid-> HAVING-> count(b.oid) < 2; +-----+------+------+------+ | uid | name | oid | uid | +-----+------+------+------+ | ccc | mike | 6 | ccc | | ddd | mike | NULL | NULL | +-----+------+------+------+ 2 rows in set (0.00 sec)
mysql> SELECT-> a.uid,-> count(b.oid) AS total-> FROM-> table1 AS a-> LEFT OUTER JOIN table2 AS b ON a.uid = b.uid-> WHERE-> a. NAME = 'mike'-> GROUP BY-> a.uid-> HAVING-> count(b.oid) < 2; +-----+-------+ | uid | total | +-----+-------+ | ccc | 1 | | ddd | 0 | +-----+-------+ 2 rows in set (0.00 sec)
mysql> SELECT-> a.uid,-> count(b.oid) AS total-> FROM-> table1 AS a-> LEFT OUTER JOIN table2 AS b ON a.uid = b.uid-> WHERE-> a. NAME = 'mike'-> GROUP BY-> a.uid-> HAVING-> count(b.oid) < 2-> ORDER BY-> total DESC; +-----+-------+ | uid | total | +-----+-------+ | ccc | 1 | | ddd | 0 | +-----+-------+ 2 rows in set (0.00 sec)
mysql> SELECT-> a.uid,-> count(b.oid) AS total-> FROM-> table1 AS a-> LEFT JOIN table2 AS b ON a.uid = b.uid-> WHERE-> a. NAME = 'mike'-> GROUP BY-> a.uid-> HAVING-> count(b.oid) < 2-> ORDER BY-> total DESC-> LIMIT 1; +-----+-------+ | uid | total | +-----+-------+ | ccc | 1 | +-----+-------+ 1 row in set (0.00 sec)
步步深入:MySQL架构总览-gt;查询执行流程-gt;SQL解析顺序相关推荐
- bs架构与cs架构的区别_Oracle vs Mysql--架构、sql查询执行流程及SQL解析顺序区别说明...
概述 之前分享的主要是Oracle上的一些内容,那么mysql又有哪些地方不一样呢?下面从MySQL总体架构.sql查询执行流程和语句执行顺序来看一下.. 01 架构总览 下面看一下mysql的架构图 ...
- oracle和mysql文件怎么打开_Oracle vs Mysql--架构、sql查询执行流程及SQL解析顺序区别说明-sql文件怎么打开...
概述 之前分享的主要是Oracle上的一些内容,那么mysql又有哪些地方不一样呢?下面从MySQL总体架构.sql查询执行流程和语句执行顺序来看一下.. 01 架构总览 下面看一下mysql的架构图 ...
- 步步深入MySQL:架构-gt;查询执行流程-gt;SQL解析顺序!
一.前言 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来探讨一下其中的知识. 二.MySQL架构总览 架构最好看图,再配上必要的说明文字. 下图根据参考书籍中一图为原 ...
- 步步深入MySQL:架构-查询执行流程-SQL解析顺序
一.前言 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序 ...
- MySQL 架构总览-查询执行流程-SQL 解析顺序
点击关注公众号,回复"1024"获取2TB学习资源! 前言 一直是想知道一条 SQL 语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文 ...
- mysql数据库总览_MySQL架构总览-查询执行流程-SQL解析顺序
从上图中我们可以看到,整个架构分为两层,上层是MySQLD的被称为的'SQL Layer',下层是各种各样对上提供接口的存储引擎,被称为'Storage Engine Layer'.其它各个模块和组件 ...
- MySql 学习笔记-Mysql架构介绍与查询sql执行流程
最近花了99元大洋在极客时间 买了 MySQL 实战45讲.学习的同时留下点笔记.该内容仅仅是个人总结笔记,如有涉及版权还请告知. MySql 的简介 MySQL是一个关系型数据库管理系统,由瑞典My ...
- MySQL 查询执行流程
MySQL 架构与SQL查询语句执行流程 一:一条查询语句的执行流程 **注意, mysql8.0没有查询缓存了 1.1.连接 跟数据库建立连接,MySQL服务监听的端口默认是3306,客户端连接服务 ...
- oracle查看执行过的语句,oracle 查询执行过的SQL语句
MySQL开启日志记录查询/执行过的SQL语句 作为后端开发者,遇到数据库问题的时候应该通过分析SQL语句来跟进问题所在,该方法可以记录所有的查询/执行的SQL语句到日志文件. 方法有几种,但是个人觉 ...
最新文章
- 兄弟俩都是院士!哥哥在南大,弟弟在复旦
- 破拆机器人_中国首台车载式遥控折叠装卸机器人横空出世
- tomcat请求数据的编码设置
- 标准STUN判断NAT类型的过程及改进
- hadoop中如何控制map的数量
- 【Linux】编译C语言文件(-o -lpthread)
- 【转】人工智能教程-前言
- arm平台下linux c语言编程,简单分析针对ARM平台的C语言程序的编译问题
- 《软件工程》总结——第一章
- 中国首枚芯片邮票问世;苹果开源 Swift System | 极客头条
- SpringCloud的Ribbon自定义负载均衡算法
- [Django]我的第一个网页,报错啦~(自己实现过程中遇到问题以及解决办法)
- 课程设计哈夫曼编/译码系统
- vue实用组件——表格
- oracle创建用户和表空间,授权,oracle用imp导入dmp文件
- SQL 比较全的银行列表、带名称缩写、带银行logo
- 基于Dijkstra算法和KM算法的网约车订单分配问题
- 易语言编程入门教程学习
- inline-block元素高度为0,父级仍被撑起,问题元凶—strut
- 戴尔Win10笔记本连接wifi后显示“无internet,安全”但可正常上网