最近做的项目与数据库关系密切,自然少不了很多SQL。下面总结一下最近使用的能够较大提升工作效率的SQL。
1、根据表2的某个字段来更新表1的某个字段
这是一个坑,错误的写法是
这种写法的错误之处在于,对于T1.id = t2.id,会从表2中的字段取出column_name_2来更新表1中的column_name_1的,而对于表1中的id不在表2中的,则会被设置为null。这样的风险是很高的。那么,如何避免这种情形呢?正确的写法是什么呢?
增加了一句话, where exists (select 1 from table_name_2 T2 where T1.id = T2.id), 这样的结果就是,当T1中的id存在在T2中时,则进行更新,否则,不会进行更新。
2、Oracle中的列转行
在表的设计中,通常会遇到这样的场景:某一行代表一个权限,比如用户A拥有权限A,B,C总共用三行数据。在统计的过程中,我们想查看用户A究竟总共有哪些权限呢?这就用到了Oracle中的列转行。
用法如下:
可以通过如下例子来理解:
原先表:
新表:
3、 WITH AS 用法
有的时候,我们需要涉及到多表关联查询,然后将查询的结果进行汇总。那么,这种场景下,with as语法就非常有用。
这样写最大的好处是逻辑特别清晰,要查的数据不会因为多表关联或者join使得逻辑不清晰出现BUG。另外一大好处就是一次查询,多次使用。将查询结果放在临时表里面,后续可以对此表多次分析使用。
4、左连接LEFT JOIN
LEFT JOIN 关键字会从左表 (table_name_1) 那里返回所有的行,即使在右表 (table_name_2) 中没有匹配的行。此种场景下,如果采用多表关联查询,可能会丢失没有匹配的数据,所以,这种情况要采用左连接。
具体语法如下:
你有没有遇到一些能够提升效率的SQL语句呢?欢迎留言分享哦。
(完)
看完本文有收获?请转发分享给更多人
关注「Python那些事」,做全栈开发工程师
领取专属 10元无门槛券
私享最新 技术干货