几条常用的sql查询语句

  • A+
所属分类:DB 原创 开发&源码

因为支付模块重构,造成了一些偶发的BUG,从而是我们的支付记录、微信记录及第三方记录对不上,从而不得不我们一个月的对账工作,经历了不少996,但同时也掌握了一些常用sql查询及优化等...

几条常用的sql查询语句

以上是一条最简单的sql条件查询语句,那我们如果有2个type需要同时查询呢?
我们可以这样写:

如果,我们查出的结果是多个,且需要排序呢?

关键字 ORDER BY

那么,如果是3个type,4个type...甚至n个type呢,岂不是sql会非常长?

关键词 IN

我们可以稍微改下:

其实相比于or操作,IN不仅仅是让sql语句更简洁,在大数据库查询时性能上更有优势,or的效率为O(n),而in的效率为O(log2n),所有当基数越大,IN的执行效率相对于or来说越有优势。
正常有索引的时候可能感觉并不明显,但是当aid无索引时,执行效率立马就体现出来了...
不信的朋友可以试试100万以上的数据表,过滤无索引字段查询100条以上记录,or的执行时间至少是in的几十倍以上...

然后, 我们再来看看新的需求,有两张表tableA, tableB, tableA中有字段Bid,用于关联tableB表,我们需要过滤tableB的name字段包含“n”字母,进而查询出tableA表的数据...
于是sql变成这样:

EXISTS

然而,从执行效率来说,EXISTS是由于IN的,所以上面的sql,我们可以这样写:

另外,如果我们使用IN时,如果有2层以上的情况,如:

可以尝试下,哪怕每个表的id和关联id都有索引,但是,仍然是100万+数据表,这个查询会非常慢,此时,我们可以使用JOIN(其实两层的时候也建议用join,虽然写起来麻烦一些,但是效率更高啊)...

JOIN

这样就将三张表关联起来了,如果有需要,还可以4张,5张表关联...
JOIN还有INNER JOIN, LEFT JOIN, RIGHT JOIN,FULL JOIN四种用法,上面的写法JOIN其实默认就是INNER JOIN...
你一定注意到了,通过join,我们不仅可以用于替换in操作,还可以用于查询多个表的字段,如:

原文:简书ThinkinLiu 博客: IT老五

当然,对账期间还用到了SET @、GROUP BY、LIKE、NOT LIKE以及COUNT、SUM、CONTAINS等,由于时间关系,就暂不记录了。
准备准备,下班回家过年了v提前祝大家猪年快乐,猪事大吉

weinxin
我的微信公众号
我的微信公众号扫一扫
Liu, Thinkin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: