一文搞懂SQL执行顺序

哎,这个SQL执行顺序真是混乱啊。
我会向你解释它,并确保它简单明了。

先说FROM和JOIN。
这两个人必须先跑。
例如,您正在检查两个表:table1 和 table2 您在 FROM 中写入 table1 JOIN table2 ON table1 .id=table2 .id。
这意味着table1 和table2 根据它们的ID进行编号并连接在一起。
这称为连接操作。
如果没有这一步,仅仅查表肯定会导致数据不完整。
刚学SQL的时候总是忘记加JOIN,查了好久才检查数据是否有错。
2 02 3 年我还在公司培训的时候,老板就教我们先FROM,再JOIN。
连接表是第一步。

第二步是哪里。
获得连接的数据集后,WHERE 就开始发挥作用了。
它有什么作用? 筛选。
例如,WHERE 工资>5 000。
这意味着,加入表格后,只有工资大于 5 ,000 的人才会被保留。
工资低于5 000的,直接被踢出去。
举个例子,假设你查看2 02 3 年1 月的销售数据,WHERE sale_date>'2 02 3 -01 -01 ',这样就只能看1 月。

第三步是GROUP BY。
这一步还是蛮有趣的。
假设您已完成 WHERE 过滤并希望按部门分组。
按部门 ID 分组。
这意味着什么? 这意味着将同一部门的员工放在一起。
例如,财务部门的人员被分配到一组,技术部门的人员被分配到另一组。
请注意,这种分组不会过滤,它只是将人们分成一堆。
当时我花了一段时间才弄清楚这一步,而且我不明白为什么分组后我必须再次HAVING。

第四步是拥有。
这一步和WHERE类似,但是使用场景完全不同。
WHERE用于分组前过滤,HAVING用于分组后。
例如,在 GROUP BY Department_id 之后,您希望查看员工人数超过 5 人的部门。
计数()>5 这意味着每组的人数必须大于5 ,你才能给我你们组的数据。
我尝试了不加HAVING,但是也出现了一堆小部门,挺烦人的。

第 5 步选择。
这一步是选择字段。
只要写下你想检查的内容即可。
例如,SELECT Department_id, COUNT() 作为员工计数。
这里COUNT()是一个聚合函数,统计每个组的人数,并将这个统计结果命名为employee_count。
如果没有这一步,仅仅进行分组统计就会导致结果难以理解。

第 6 步与众不同。
减轻重量。
有时,您使用 SELECT 选择多个字段,并且部门 ID 重复。
您可以使用 DISTINCT 来删除重复项。
例如SELECT DISTINCT Department_id,这样查到的部门ID一定不能重复。

第 7 步 订购依据。
种类。
例如,ORDER BY 工资 DESC 按工资降序排序。
默认为升序。
如果要降序排列,则必须添加 DESC。
我经常使用这个步骤。
例如,要检查前 1 0 个销售订单,我必须使用 ORDER BY sale_amount DESC,然后使用 LIMIT 1 0
第 8 步 LIMIT。
限制物品数量。
例如LIMIT 1 0表示只给我1 0条数据。
这通常与 ORDER BY 一起使用,以检查排序后的前 N ​​项。
我写SQL的时候总是忘记最后加LIMIT。
结果,找到了数百个条目,并且计算机死机。

看,一步步做就可以了。
首先连接表,然后过滤,然后分组,然后过滤和分组,然后选择字段,去重,排序,最后限制条目数。
顺序不能乱。
我从事这个行业十年了,见识了很多SQL写的顺序错误,导致所有数据都是错误的。
因此,只有理解了这个顺序,你才能游刃有余地编写SQL。

sql语句中case,when,then的用法

CASE、WHEN、THEN直接使用条件进行判断。

CASE分为简单型和研究型两种。

简单的CASE按顺序确定。

使用 WHEN 多个条件搜索 HOUSES。

THEN 跟随要返回的值。

不要忘记默认的 ELSE。

例如,检查工资和奖金:
选择工资、级别,
CASE
WHEN 工资 > 5 0000 AND 级别 = '经理' THEN '高奖金'
WHEN 工资 > 3 0000 THEN '中奖金'
ORWARD '低奖金'
END AS 奖金
根据工资和级别确定奖金。

使用哪种CASE取决于具体情况。