mysql 的sql 执行顺序_MySQL 中 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 = '李四';

该语句可以正常查询到值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值