01 SQL逻辑
刚学SQL的同学肯定和我一样有过这样的疑问:为什么要先写select,再写from,再写where,再写……
对于这个问题我没法从工程师的角度去回答你,但我有一个技巧可以帮你绕开这个疑问,在写SQL的时候心理不那么别扭。
牢记SQL语句的执行顺序。
MySQL的执行顺序如下,当然各种类SQL语言的执行顺序可能会有一两点差异,比如Hive SQL、Teradata SQL等等。
不管你写哪种SQL,首先搞清楚执行顺序,接下来你就可以按照这个执行顺序来写了。
1、FORM and JOIN
首先我们进行查询的时候,肯定是先获得一份数据集的,From语句和JOIN被先执行的,就是为了获得数据集的。
2、WHERE
一旦数据集给拿到了,WHERE限制条件会被用到某些行上,并把不满足的行给抛弃掉。并且,这能够用到各种数据类型中
3、GROUP BY
WHERE条件限定之后,接下来就是GROUP BY语句了,这一语句会根据某一字段进行分组,并对各个组进行求聚合。
想想看,我们先进行的是FROM,紧接着是WHERE,然后才是GROUP BY。所以上面的语句就是错在了WHERE 语句在执行的时候,GROUP BY语句还没有开始,那时聚合值sum()还是未知的。
4、HAVING
having语句在SQL中的主要作用与Where语句作用是相同的,但是having是过滤聚合值,其实上面的正确写法是这样的
5、SELECT
在经过上面的执行之后,终于到了select语句,但是别慌,下面还有呢。
6、DISTINCT
对于剩下的行,Distinct用来去除重复行,只保留唯一的。
7、ORDER BY
此语句用来对select后的结果,进行排序,升序或者是降序。
8、LIMIT
用来限定返回的行数
按照这个逻辑,把每一个子句写出来,最后再按照SQL的书写顺序排个序,一条逻辑清晰、完整的SQL语句就写好啦!
# SQL书写顺序
SELECT DISTINCT<Select_list>
FROM <left_table> <left/inner/right> JOIN <right_table>
ON<join_condition>
WHERE<where_condition>
GROUP BY<group_by_list>
WITH {CUBE|ROLLUP}
HAVING<having_condtion>
ORDER BY<order_by_list>
LIMIT<limit_number>
牢记SQL执行顺序还有助于理解SQL的语法规定。
比如,“别名”只能在order by中使用,而不能在其他地方使用;在Teradata SQL里,“别名”只可以在order by中使用的。02
有必要的规范习惯
‘1’
‘12’
‘123’
‘2’
‘23’
‘3’
03
常用函数
1、算术函数:
2、字符串函数:
注意,SQL是从1开始计数,和一般编程语言不同,它们都是从0开始计数
3、日期函数:
4、转换函数:
COALESCE是一个在实际工作环境中非常常用的函数,可以用来将NULL转换为其他值,也可以用来构造新的字段。
04
谓词
1、LIKE
2、BETWEEN …… AND
3、IS NULL、IS NOT NULL
4、IN
05
学习小建议
1.保持专注
时间有限,不要把时间花费在网上盲目检索资料、群里聊天、互相吐槽上。
2.要适当投入资源
如花钱买一些课程、项目数据、书籍等。
3.要学会自己解决问题的能力