学会这几点,你就能成为SQL高手

学会这几点,你就能成为SQL高手select * from table1,table2,table1存在a列m行,table12存在b列n行,最后形成的集合是列,行记录。

大家好,欢迎来到IT知识分享网。

文末有惊喜哦!全文比较长,大家耐心看哦~

SQL基础理论知识

掌握基础理论知识是成为SQL高手第一步,我不会照教科书式的讲课,我只会讲解我认为你最应该的掌握的3个知识点。

1、集合(Set)。我给大家一个简单的概念,sql里面一切皆集合。SQL 以关系代数为基础发展出来的一门语言,关系代数主要是“集合”。

sql语句形式:select …. from ….

集合在sql当中的表现形式:每一个select语句都是一个集合,写在from后面的每个表、子查询、视图可以算作一个集合。

学会这几点,你就能成为SQL高手

第1种情况

学会这几点,你就能成为SQL高手

第二种情况

学会这几点,你就能成为SQL高手

第三种情况

2、笛卡尔积

select * from table1,table2,table1存在a列m行,table12存在b列n行,最后形成的集合是(a+b)列,(m*n)行记录。我们学计算机你会发现一个现象,越往前追溯,都会一个简单模型,如果你把所有sql问题往前推,最后都会看到 “笛卡尔积”的身影。

我举一个简单的例子,SQL理论中会把选取字段这个操作叫作“投影(project) ”。我不知道大家有无想过这个问题,为什么叫“投影”这个概念,而不是叫其他名称,因为任何sql语句其实到最后都是回归一个“笛卡尔积”,你在选取字段操作,好似对“笛卡尔积”做了一次“投影”。

3、集合之间的关系

集合之间的关系 一对一、一对多(最频繁)、多对多(几乎不用),在数据库表中通常用FOREIGN KEY表示一对多的关系 。为什么要关注它们之间的关系,主要写sql的语句发现记录重复现象,你一定要检查是不是一对多,多对多之间的关系。但是当sql语句复杂以后了,即便你分析清楚集合之间的关系,很可能出现记录重复的现象,当与你的预期不符,我们可以distinct去重。

五、SQL中实战技巧

这次我不再分析如何去书写一个sql语句,我相信大家多多少少会写sql。我只是跟大家分享一下我掌握的技巧。

1、能少写,就不要多写(write less,do more)。为什么要这样,第一个提高效率;第二个减少出错几率。举例说明:假设我们写内连接语句。其实是有2种写法,我推荐大家使用第一种写法。

学会这几点,你就能成为SQL高手

特别注意在oracle数据库当中,左连接、右连接有一种简写的方式。

学会这几点,你就能成为SQL高手

2、为什么有时候别名需要增加双引号。当你的别名,包含特殊符号的时候,就要增加双引号,比如+、-、*、/、(、)。

学会这几点,你就能成为SQL高手

3、使用null注意事项。null指的是理论意义上的绝对的空,不指任何含义。所以空字串、空数组、空对象表示含义的空,不是null。所以null一般使用身份运算符 is,以示区分,is null或者is not null。像python是用is判断,但是java,js中用==来判断,有些编程语言对这个问题并没有严格区分。

4、union 和union all之间的区别。union将两个集合去掉重复记录合并在一起,union all只是简单合并在一起。

5、group by使用问题。有时候会发现聚合函数,感觉数值明显错误,先去掉group by 查看原始记录,看where条件是否写错。

学会这几点,你就能成为SQL高手

6、充分利用数据库提供函数,简化sql书写难度。举例说明:同时统计采购物品A、B、C、D分类的小计

学会这几点,你就能成为SQL高手

同时统计某个科室的出库给中心药房的基数、节约的小计。

学会这几点,你就能成为SQL高手

学会这几点,你就能成为SQL高手

当然我不可能穷举所有的技巧,我只是把我使用最多一些技巧分享给大家,精通sql需要大家长期实践。

案例分析

我曾经收到来自基层医疗机构的多位小伙伴的求助,他们在写sql的时候出现“卡壳”问题。其实不管使用oracle、mssql、mysql解决问题的原理思路都是一样,只不过表现形式不同。以下分享协助小伙伴处理问题2个案例。

案例一:某小伙伴遇到数据上报问题,某个药品入库与出库数据需要在同一行展示,因为“入库与出库”来源于不同的表,小伙伴用了一种最原始的方法来处理。小伙伴的解决方案,把“入库数据”统计出来放入一个中间表,把“出库数据”统计出来放入一个中间表,再将两个中间表关联查询。

学会这几点,你就能成为SQL高手

入库

学会这几点,你就能成为SQL高手

出库

小伙伴感觉这样处理比较麻烦,期望能用一条sql语句解决问题。我帮小伙伴分析是否可以用一条sql搞定的可能性,第一,对于来自于不同来源数据“入库”和“出库”,相当于不同的集合,可以使用union连起来;第二,union合并有个特点,要求两个集合是相同字段类型,相同的字段的个数,缺少的字段可以使用虚拟列来解决;第三,将union结果当作子查询(相当于得到一个新的集合),再进行group by处理,可以完成整个操作。 最终sql语句部分截图如下所示:

学会这几点,你就能成为SQL高手

入库补充虚拟列

学会这几点,你就能成为SQL高手

出库补充虚拟列

学会这几点,你就能成为SQL高手

union当作子查询再进行group by

总结

俗说“光说不练假把式”。多写sql才能掌握真技术,同时也要不停的跳出自己的“舒适区”。为什么有人干了10年,水平还是很菜,因为他只不过把有些事情重复干了10年而己,并没有真的成长。每次写sql的时候,能不能不用中间表、能不能再简单一点,每次挑战一下自己,完成同样的效果。所谓的高手,大部分都在挑战自己能力边界。最后祝大家都从文中有所收获,成为sql高手!

由于篇幅有限,如果您想要获取到免费的JAVA技术干货的话,帮小编转发一下文章啦!关注我后私信请发送“资料”给我噢!记得帮助小编点赞文章哦!

真诚分享,不要吝啬您的赞哦! 免费!免费!免费! 重要的事情说三遍!!!

学会这几点,你就能成为SQL高手

学会这几点,你就能成为SQL高手

学会这几点,你就能成为SQL高手

学会这几点,你就能成为SQL高手

学会这几点,你就能成为SQL高手

学会这几点,你就能成为SQL高手

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/53755.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信