SQL查询语句(where、jion、limit、group by、having等等)执行先后顺序

有一次,我记得在公司数据库中查找一个季度的销售数据,看看哪些产品卖得最好。
我写了一个 SQL 查询。
首先,我连接 Products 表和 Sales 表中的数据;然后按产品分组,筛选出超过1 0万的卖家,只获取前1 0条记录,并按照销售额降序排列。
看完之后,顺序是FROM、JOIN、WHERE、GROUP BY、HAVING、SELECT、ORDER BY、LIMIT。
我尝试调整方案,发现结果完全不同。
例如,如果我将 WHERE 放在 GROUP BY 前面;分组甚至是不可能的,因为过滤条件包含分组数据。

这些经验表明,SQL查询语句的执行顺序确实很重要。
这决定了我们的最终数据是什么样的。
就像做饭一样。
首先添加什么香料?最后添加了什么成分?如果点错了,味道就会大不相同。
等等还有一个。
如果在GROUP BY之后添加HAVING。
突然就没有其他过滤条件了。
每个段落都有其作用,不能随意添加。

SELECT* FROM where语句是正确的吗?

说实话,刚开始学SQL的时候,我经常搞不清楚“SELECTFROMwhere”是怎么写的。
有趣的是,这个问题特别容易修复,因为如果“WHERE”后面没有条件,数据库实际上可能会返回一堆你不希望看到的数据。

让我举个例子。
当时我正在帮助公司做用户报表,写了一个“SELECTFROM WHERE年龄用户表”。
原来,因为没有给出条件,所以年龄是空白的,显示出来的。
这让我意识到“WHERE”子句就像一个筛子。
如果你不符合条件,数据库会为你过滤所有内容,不管条件如何。
例如“SELECTFROM order table WHERE order amount > 1 00”,此时数据库只会选择金额超过1 00的订单,并过滤掉其他订单。

对于语法结构,我通常记得是这样的:先说要搜索什么(SELECT),然后告诉数据库要搜索哪张表(FROM order table),最后用“WHERE”添加过滤条件(订单金额> 1 00)。
如果你经常使用这个序列,你自然会形成肌肉记忆。
比如我最近用SQL处理销售数据时,“SELECTFROM销售记录WHERE销售日期=‘2 02 3 -1 0’”,这种写法几乎成了下意识的反应。

归根结底,写“SELECTFROMwhere”的错误在于它把“WHERE”当作一个独立的命令而忘记了它必须与条件一起使用。
在分析数据库时,如果看到“FROM”后面没有表名,你一定会感到困惑。
所以写SQL的时候总是要检查“表名SELECTFROM”两部分是否都写正确,然后看看“WHERE”后面是否有条件值。
现在我帮助培训团队时,新员工也需要这种检查习惯。

当sql语句中where,order by,group by同时使用查询sql语句中三者的顺序

WHERE 首先过滤,GROUPBY 然后分组,ORDERBY 最后。
如果顺序不正确,查询就会白费。