思维
1. 顺序
(个人理解,可能术语并不正确。)
- 从里到外:从条件开始
- 从外到内:从结果开始
例子:
(我现在的习惯)
先SELECT
出所有所求的结果,再JOIN
所需的条件
SELECT st.s_name
FROM Student st
JOIN
(
SELECT xxx
)
复杂时,也可反过来先写出子查询,用辅助表辅助做题。
而这一切很简单的一个本质就是,拿到题先看最后的表格是什么样,然后跟原表进行对比,然后再思具体思路。
2. 链条思维
各种条件是存在顺序关系的,需要理顺它们,然后采取从里往外或者从外往内的方式去解题。
这也是自己在做项目的时候发现的,就是在考虑当前条件a
时,还必须考虑条件a的前提条件b
,包括需要排除的条件。
3. 行转列思维
SQL中的数据通通都是通过SELECT
在列中取的的,所以如果发现需求的字段并非原表中的列,则果断考虑使用条件语句进行行转列。
4. 思考特殊情况
- NULL值处理(是转换还是过滤掉)
- 除法遇到分母为零的情况(可能会报错)
- 两个int值相除,可能还是一个int(根据不同的DBMS)
易错点
- 窗口函数作为条件必须放在外层查询中,而不是当前查询的WHERE语句中