首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何写好 5000 SQL 代码

上千 SQL 代码常见,且永不过时!...我们几个 SQL 老玩家经常自吹, SQL 是半衰期最长编程语言。玩会它不用担心失业。 如何去阅读和拆解一个上千 SQL 存储过程,有四大步骤 :理解代码,分拆代码,改写代码和保存代码。...拆过无数代码,从上千缩减到 2 成,也组装过无数代码,从上百塞成了上千,业务所需。见过最长 SQL 代码超 5000 ,已简无所简,那就实事求是了。人有分分合合,有生命力代码也一样。...所以,等你费尽心思写完很长代码,一定要通过复盘记录下来,放到你 blog, github, 等你以后碰到类似情况,却想不出来如何解,你可以随时拿出来用上。 写好SQL代码,素质当然远不止这些!...分享一个最近做脑图,掌握了这些才可以说 SQL 编码入门了 摸着你良心,看看这个图,有则改良,无则加勉 以上脑图是我阅读了《SQL Programming Style》后,加上平时编码总结而成

56330

5000 SQL代码,怎么读?

“怎么,今天热焦玛少了点劲儿嘛,感觉?”我走近了小 C。 “L, 面对着满屏 SQL,谁都会提不起精神啊。何况这近 5000 代码,怎么看得过来嘛!...“哟,恭喜你,遇到这么极品 sp 啊。在我印象里面,经历了两次重构之后,上千代码,就那么几个,今天被你遇到了。...“你这一一个字段,是你自己设置吧,其实不需要那么格式化,反而更简单。你看啊,一个 Insert 被几十个字段隔成了两屏,容易造成思维停顿。两搞定事情,做复杂了。还显得代码量大,失去耐心。”...首先告诉自己,一遍读完就能通晓5000代码细节,是不可能事情。读代码前,耐心先行。接着就是开始第一遍阅读。...且,书优点在于,作者就像是代码评论家一样,告诉你为什么 SQL或者代码这么写,不如那样写来高效,其中原理是什么。这些都是你在分析具体代码时,可以学到真正有用东西。

92220
您找到你想要的搜索结果了吗?
是的
没有找到

如何写好 5000 SQL 代码

上千 SQL 代码常见,且永不过时!...我之前写过如何去阅读和拆解一个上千 SQL 存储过程,详情可见以下两篇文章: 如何提高阅读 SQL代码快感 如何写好上千 SQL 存储过程(附代码规范) 这两文中提到了四大步骤:理解代码,...拆过无数代码,从上千缩减到 2 成,也组装过无数代码,从上百塞成了上千,业务所需。见过最长 SQL 代码超 5000 ,已简无所简,那就实事求是了。人有分分合合,有生命力代码也一样。...如要参考这5000实战SQL代码,可以关注我微信公众号【有关SQL】,回复【5000】便可下载。 但装和拆并不是一个逆反过程!...我复盘过很多这样代码例子,关注微信公众号【有关SQL】,回复【5000】,就可以看到这些真实代码。 写好SQL代码,素质当然远不止这些!

1K11

如何写好 5000 SQL 代码

上千 SQL 代码常见,且永不过时!...我之前写过如何去阅读和拆解一个上千 SQL 存储过程,详情可见以下两篇文章: 如何提高阅读 SQL代码快感 如何写好上千 SQL 存储过程(附代码规范) 这两文中提到了四大步骤:理解代码,...拆过无数代码,从上千缩减到 2 成,也组装过无数代码,从上百塞成了上千,业务所需。见过最长 SQL 代码超 5000 ,已简无所简,那就实事求是了。人有分分合合,有生命力代码也一样。...如要参考这5000实战SQL代码,可以关注我微信公众号【有关SQL】,回复【5000】便可下载。 但装和拆并不是一个逆反过程!...我复盘过很多这样代码例子,关注微信公众号【有关SQL】,回复【5000】,就可以看到这些真实代码。 写好SQL代码,素质当然远不止这些!

60110

如何编写不存在即插入 SQL

如果我们想根据非主键或非唯一索引字段做重复插入判断:不存在就插入新记录,存在则忽略。如果不用事务,这个需求有没有办法实现呢? 有的! 下面就为大伙端上这道菜,请慢用。...MySQL 支持一些不需要查表 SQL 语句,比如 SELECT 1、SELECT NOW() 语句。因此我们可以把输入数据当成 select 子句字段。...当需要用到 where 子句时就必须得有一个表,我们生成只有一条记录衍生表。 解决方案已经呼之欲出,上面的 SQL 片段拼接起来SQL 看起来是这样。...SQL,lucky 表没有新增记录,说明该 SQL 已实现了避免插入重复数据功能。...上面的 SQL 也可以改成左连接形式: INSERT INTO lucky (address) SELECT 'abc' FROM (SELECT 1) t LEFT JOIN lucky

1.7K20

SQL代码中隐藏数据库书单

但几次之后,发现精通数据库高手,并不是靠师傅培养就能出来。 举个例子:下面这段不到 3 SQL 代码,跑了 30 秒都没有出来结果,你怎么解决? ?...在这段不到 3 SQL 中,至少能反应出一个人看过哪些书,是真正看进去,弄明白那种看书。...基础部分 如果不知道 SQL Server 还有 INTERSECT 命令,那只能说明,基础语法书,都没有完整看过了。...因此即使这段经我手优化 SQL 执行了 1 秒,也比原先 SQL 快了 30 倍。 ? image 你看,就 319 行数据,用了 30 秒都没出来。...我推荐《Inside SQL Server Performance Tunning》.当然凡是带有 SQL Performance Tuning书,都不要放过,至少看看目录。

1.6K10

table转列sql详解

table转列sql详解 tabele转列资料,网上搜一下很多。大家照着网上copy就可以实现自己想要功能。但是大家在实现功能后是否想过转列为什么要这样写?...5    math    93.0 6    chinese    67.0 7    math    83.0 8    chinese    77.0 8    math    84.0 3 转列后结果...73.0 4    82.0    0.0 5    66.0    93.0 6    67.0    0.0 7    0.0    83.0 8    77.0    84.0 二 、分析 1 转列...可以根据subject值去动态sql语句 看下面的一段代码 declare @sql varchar(2000) set @sql='' select @sql =@sql+ ',case subject...then 1 else 0 end  as math 6 最后我们就需要将前面步骤综合起来,得到最终sql declare @sql varchar(2000) set @sql='select

71020

InnoDB锁,如何锁住一条不存在记录?

发布后,不少同学留言希望讲讲MySQLInnoDB锁机制。要细聊MySQL锁,难以避免要从事务四种隔离级别说起。 四种隔离级别,又脱不开聊读脏,不可重复读,读幻象等问题。...事务隔离级别,锁机制等都比较垂直,应用开发中大部分同学都用不到,不确定是否大部分朋友都感兴趣。 今天,先抛出一个问题,如果大家确定对这类话题感兴趣的话,后续我花时间细聊这一系列问题。...Case 2 事务A先执行,并且处于未提交状态: delete from t where id=40; 事务A想要删除一条不存在记录。...事务B后执行: insert into t values(40, ‘c’); 事务B想要插入一条主键不冲突记录。 问题1:事务B是否阻塞? 问题2:如果事务B阻塞,锁如何加在一条不存在记录上呢?...是不是很有意思一个问题? 猜猜InnoDB锁是怎么做到

1.1K30

InnoDB锁,如何锁住一条不存在记录?

InnoDB锁,如何锁住一条不存在记录?...发布后,不少同学留言希望讲讲MySQLInnoDB锁机制。要细聊MySQL锁,难以避免要从事务四种隔离级别说起。 四种隔离级别,又脱不开聊读脏,不可重复读,读幻象等问题。...Case 2 事务A先执行,并且处于未提交状态: delete from t where id=40; 事务A想要删除一条不存在记录。...事务B后执行: insert into t values(40, ‘c’); 事务B想要插入一条主键不冲突记录。 问题1:事务B是否阻塞? 问题2:如果事务B阻塞,锁如何加在一条不存在记录上呢?...是不是很有意思一个问题? 猜猜InnoDB锁是怎么做到? 相关文章: 《InnoDB,5项最佳实践,知其所以然?》 当前文章到此就结束了,感谢您阅读。

66130

SQL面试题003-比较

ORDER BY expr [ASC|DESC],... ) 其参数介绍如下: expression LAG() 函数返回 expression 当前行之前值,其值为 offset 其分区或结果集中行数...default_value 如果没有前一,则 LAG() 函数返回 default_value 。例如,如果 offset 为2,则第一返回值为 default_value 。...PARTITION BY 子句 PARTITION BY 子句将结果集中划分 LAG() 为应用函数分区。如果省略 PARTITION BY 子句,LAG() 函数会将整个结果集视为单个分区。...ORDER BY 子句 ORDER BY 子句指定在 LAG() 应用函数之前每个分区中顺序。LAG() 函数可用于计算当前行和上一之间差异。...score 和上学期成绩 former_score 相比,得到一些判断标志位,在计算标志位过程中,要注意将最苛刻条件放到第一个 CASE WHEN 中,否则会得到意外结果。

6910

30原生python代码(无依赖)实现对mysqlSQL监控

背景之前有对mysql审计需求, 最开始是使用中间件方式来实现, 但太繁琐了,还影响性能.之后使用 旁挂方式来做升级, 但依赖 scapy抓包功能.最近 有需要查看mysql流量需求, 就又要抓包了..., 但老使用第三方软件, 总感觉差了点啥, 都是python代码....并打印出来.具体实现都在代码里面, 都有相关注释, 代码也非常少优雅, 方便阅读....不过业务连接数据库 通常不会使用SSL测试把脚本放到数据库服务器上, 直接启动脚本即可, 不需要啥参数, 都是代码里面写好了. 主要是为了简单, 没有解析mysql返回流量....可以自己加if条件取过滤掉不需要流量总结pythonsocket模块还是太强大了.

53232

SQL 转列+窗口函数实例

今天继续和大家分享 HackerRank 上 SQL 编程挑战解题思路,这一次题目叫做“Occupations”,属于中等难度级别,答案提交成功率在 90% 左右。...要求: 将数据按照 Doctor、Professor、Singer 、Actor 顺序分成四列输出; 每一列数据从上到下按姓名字母顺序升序排序; 人员不足职位列上用 NULL 填充。...”这种需求,我们首先想到就应该是转列,我之前写过一篇介绍SQL 转列通用实现文章,感兴趣朋友点进来看看。...做转列时分组依据是什么呢?即依据哪个字段分组。答案是依据每个职位中姓名排序序号作为分组条件,而每个职位里面姓名出现序号可通过窗口函数求得。...Jennifer Actor 3 Ketty Actor 4 Samantha Doctor 1 Aamina Doctor 2 Julia Doctor 3 Priya 最后,我们把窗口函数和转列结合起来

2K10

SQL转列和列转行

导读 SQL是IT行业很多岗位都要求具备一项能力,对于数据岗位而言更是如此,甚至说扎实SQL基础也往往是入职这些岗位必备技能。...而在SQL面试中,一道出镜频率很高题目就是转列和列转行问题,可以说这也是一道经典SQL题目,本文就这一问题做以介绍分享。 ? 给定如下模拟数据集,这也是SQL领域经典学生成绩表问题。...02 列转行:union 列转行是上述过程逆过程,所以其思路也比较直观: 记录由一变为多行,列字段由多列变为单列; 一变多行需要复制,列字段由多列变单列相当于是堆积过程,其实也可以看做是复制;...一变多行,那么复制最直观实现当然是使用union,即分别针对每门课程提取一张衍生表,最后将所有课程衍生表union到一起即可,其中需要注意字段对齐 按照这一思路,给出SQL实现如下: SELECT...10条,其中两条记录成绩字段为空 最后,本例中用union关键字实现了多表纵向拼接,实际上用union all更为合理,二者区别是union会完成记录去重;而union all则简单拼接,在确定不存在重复或无需去重情况下其效率更高

7K30

SQL转列和列转行

转列,列转行是我们在开发过程中经常碰到问题。转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 运算符PIVOT来实现。用传统方法,比较好理解。...但是PIVOT 、UNPIVOT提供语法比一系列复杂SELECT…CASE 语句中所指定语法更简单、更具可读性。下面我们通过几个简单例子来介绍一下列转行、转列问题。...这也是一个典型转列例子。...上面两个列子基本上就是转列类型了。但是有个问题来了,上面是我为了说明弄一个简单列子。...这个是因为:对升级到 SQL Server 2005 或更高版本数据库使用 PIVOT 和 UNPIVOT 时,必须将数据库兼容级别设置为 90 或更高。

5.4K20

定位Oops具体代码

看,gdb直接就告诉你在哪个文件、哪一了。            ...: TIPS            如果在lkml或bugzilla上看到一个Oops,而自己不能重现,那就只能反汇编以"Code:"开始。...这样可以尝试定位到            源代码中。            注意,Oops中Code:,会把导致Oops第一条指令,也就是EIP第一个字节, 用尖括号括起来。...补充: 为了使汇编代码和C代码更好对应起来, Linux内核Kbuild子系统提供了这样一个功能: 任何一个C文件都可以单独编译成汇编文件,例如: make path/to/the/sourcefile.s...另外, 内核源代码目录./scripts/decodecode文件是用来解码Oops: ./scripts/decodecode < Oops.txt (我没用过,就只提一下。)

1K20

SQL 找出分组中具有极值

你可能也遇到过这种需求:找出每个部门入职最早员工信息;获取每个科目最高分学生信息;获取用户最近一次完整登录信息。...这些需求有两个共同点:一是需要做分组,有按部门分组、有按科目、也有按用户分组;二是在分组里面找到存在极值,是整行数据,而不只是极值。...窗口函数 如果你在用 MySQL 5.8+,窗口函数可能是你最先想到办法,因为它足够简洁、简单。 先按部门分组,再对组内按照薪资降序排序,取排序序号为 1 即为部门最高薪资员工信息。...WHERE b.sal IS NULL ORDER BY a.deptno 我们知道,在SELECT * FROM a left join b on 关联条件 语句中 ,不论在 b 表中是否有数据可以和...当 a.sal 是分组最大值时,a.sal < b.sal 条件不成立,关联出来结果中 b 表数据为 NULL。

1.7K30
领券