MySQL 中 sql 的执行顺序
sql 的执行顺序是怎样的?
看个这篇文章 <<从零开始学习SQL查询语句执行顺序>>感觉这样的执行顺序是对的。
文章中提到 sql 的执行顺序
- from 语句
- on 语句
- left join、right join 的外部行
- where
- group by
- having
- select 列表
- distinct 去重
- order by
- limit
是按照这样的顺序执行的,但是有一个问题,我的sql语句
set @i:=0;select (@i:=@i+1) as pm,s.* from stuscore as s where s.subject='数学' order by score desc limit 1,1;
这样查询出来的 pm 依然是 1。我怀疑过这个执行顺序是不正确的,如果要解释这个现象, select 列表 必须放在最后,但是我们日常的操作都是根据字段排序在 limit 进行分页的。
是因为涉及到变量会让变量部分的查询不按照这个规则来吗?
测试发现,6、7 顺序应该反过来。由此针对的测试
mysql 数据:
-- ----------------------------
-- Table structure for test
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` ( `name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`sex` tinyint(1) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES ('张三', '12', '1');
INSERT INTO `test` VALUES ('张三', '12', '1');
INSERT INTO `test` VALUES ('张三', '10', '0');
INSERT INTO `test` VALUES ('张三', '11', '1');
INSERT INTO `test` VALUES ('张三', '14', '0');
INSERT INTO `test` VALUES ('王五', '10', '1');
INSERT INTO `test` VALUES ('李四', '12', '0');
INSERT INTO `test` VALUES ('李四', '12', '1');
INSERT INTO `test` VALUES ('李四', '11', '0');
INSERT INTO `test` VALUES ('王五', '12', '0');
INSERT INTO `test` VALUES ('李四', '10', '1');
INSERT INTO `test` VALUES ('王五', '13', '1');
INSERT INTO `test` VALUES ('王五', '14', '0');
sql 语句:
SELECT `name` as title,COUNT(`name`) as namenum FROM `test` GROUP BY `name` HAVING namenum >= 4 and title = '李四';
该语句可以正常查询到值