那些常用的能够极大提升工作效率的SQL

最近做的项目与数据库关系密切,自然少不了很多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那些事」,做全栈开发工程师

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180309B07UMS00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券