Mysql 无法排序和查询SQL数据库表

Mysql 无法排序和查询SQL数据库表,mysql,sql,Mysql,Sql,我试图了解mysql的动态,但我无法理解以下错误陈述: 查询:- SELECT employee_id, First_name, Salary AS Pay FROM employee ORDER BY Salary DESC WHERE Salary > 70000 LIMIT 3; 我想从employee表中检索数据,然后对其进行排序&只取出大于7000的数据。但是我得到了这个错误 ER_PARSE_ERROR:您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解第1行

我试图了解mysql的动态,但我无法理解以下错误陈述:

查询:-

SELECT employee_id, First_name, Salary AS Pay FROM employee
ORDER BY Salary DESC
WHERE Salary > 70000
LIMIT 3;
我想从
employee
表中检索数据,然后对其进行排序&只取出
大于7000的数据。但是我得到了这个错误

ER_PARSE_ERROR:您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解第1行“WHERE Salary>70000 LIMIT 3”附近使用的正确语法

但是,如果代码是这样写的

SELECT employee_id, First_name, Salary AS Pay FROM employee
WHERE Salary > 70000
ORDER BY Salary DESC
LIMIT 3;
它运行得很好。但这个查询有着完全不同的含义

我希望你能理解我的意思, 为什么我们不能在对表排序后进行查询?

SQL是一种描述性语言,而不是过程性语言

SQL查询描述结果集。无论您删除
salary>7000的行,然后对其进行排序,还是对其进行排序,然后将其删除,您实际上都会得到相同的答案


您不需要指定操作顺序;这是SQL编译器和优化器的工作。

您可以在选择之前通过子选择的技巧进行排序,即:

SELECT * FROM (SELECT employee_id, First_name, Salary AS Pay FROM employee
ORDER BY Salary DESC) a
WHERE Pay > 70000
LIMIT 3;

Mysql将首先创建一个包含有序内容的临时内存表,然后您的where将被应用到该表中,并设置限制。

where
ORDER BY
之前。请看,这是最好的解决方案,正是我想要的,但只是一个小小的补充:在第3行中,它必须是where Pay>70000