sql用到现在,也算是基本入门了。
本来想去借《sql必知必会》,杭图只有2本,而且永远在出借中。
就只好借了O'REILLY的青蛙书instead。
拖了一个月都没看几页,因为染头发,用一个下午翻完了。
算是对sql做到了查漏补缺。
其实主要也就看了查询部分,操作部分反正也没有权限,索性都跳过了。
读完这本,sql学习就暂时告一段落啦~
下面罗列3个还蛮实用的查询小技巧。
书里给出的写法是
之前慎M也给过一段代码,写法更加简便,实测等效。
该语句可用于提取整月数据,比“arrive_time大于等于1号,小于等于31号”的写法简便。
工作中经常遇到分马甲提数的情况,多马甲的话肯定是首选group by。
但是上级还是会需要看到总数如何,仅仅group by不能解决问题,还得excel之后sum一次,太过麻烦。
with rollup就能很好地解决这个问题。
在group by后面加上“with rollup”,最后一行就是合计数。
不过with rollup在单一维度上聚合用处不算明显,在多个维度上聚合才能显现出优势。
03拼表的最优方法把主from的表缩到足够小,留好主key,保证key的唯一性。
后续的表全都left join挂到主key上。
例如在做员工工作情况监督表时,把主from表缩成员工表,但凡是活跃员工,统统保留且唯一,把员工ID作为主key。
其他员工工作情况表全部以group by员工ID,然后left join挂到主key上。
目前不太能用到的其他知识点Other Points01关联子查询读完这本书才看懂了慎M的这段代码,where里就是用到了关联子查询。
作用是为了取到某个订单最小的分配时间。
在这段语句中,每取一个order_id,就会遍历一次该订单的所有分配记录,直到找到最小的那个,再取下一个order_id。
目前我的工作中还没有需要用到关联子查询这么复杂语句的地方,不过可以先积累起来。
PS:EXISTS函数是配合关联子查询使用的。
在select前加explain,就不是按语句查询,而是会显示该段语句需要检索多少行数据。
需要检索的数据越少,代码运行越快。
这也是为什么最好把经常用于条件查询的字段做成索引。
(虽然我还不明白索引到底和普通字段到底有啥区别,反正记住更快就行了)
所以explain可以用于优化代码运行速度,只是目前我还不太需要用到。
在From前加“INTO OUTFILe + 路径”可以直接导出文件,例如:
原本想用这个语句直接导出每天做表的源数据的,奈何账户权限不够,只好作罢。
下个阶段要去恶补一下数据透视表啦~~