加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

10个简朴步调,完全领略SQL

发布时间:2019-06-04 00:50:34 所属栏目:编程 来源:IT技术圈
导读:多年前保藏在条记中的一篇文章,本日偶尔翻出,重读了一遍,依然大有收成。分享出来,各人一路切磋。 以本文是为了以下读者而专程编写的: 1、 在事变中会用到 SQL 可是对它并不完全相识的人。 2、 可以或许纯熟行使 SQL 可是并不相识其语法逻辑的人。 3、 想

上面语句的功效就是发生出了一个包括三个字段的新的表的引用。我们来细心领略一下这句话:当你应用 GROUP BY 的时辰, SELECT 后没有行使聚合函数的列,都要呈此刻 GROUP BY 后头。(译者注:原文大意为“当你是用 GROUP BY 的时辰,你可以或许对其举办下一级逻辑操纵的列会镌汰,包罗在 SELECT 中的列”)。 必要留意的是:其他字段可以或许行使聚合函数:

  1. SELECT A.x, A.y, SUM(A.z) 
  2. FROM A 
  3. GROUP BY A.x, A.y 

尚有一点值得寄望的是: MySQL 并过错峙这个尺度,这简直是令人很狐疑的处所。(译者注:这并不是说 MySQL 没有 GROUP BY 的成果)可是不要被 MySQL 所疑惑。 GROUP BY 改变了对表引用的方法。你可以像这样既在 SELECT 中引用某一字段,也在 GROUP BY 中对其举办分组。

我们学到了什么?

GROUP BY,再次夸大一次,是在表的引用长举办了操纵,将其转换为一种新的引用方法。

9、 SQL 语句中的 SELECT 实质上是对相关的映射

我小我私人较量喜好“映射”这个词,尤其是把它用在相关代数上。(译者注:原文用词为 projection ,该词有两层寄义,第一种寄义是猜测、筹划、计划,第二种意思是投射、映射,颠末重复推敲,我认为这里用映射可以或许更直观的表达出 SELECT 的浸染)。一旦你成立起来了表的引用,颠末修改、变形,你可以或许一步一步的将其映射到另一个模子中。

SELECT 语句就像一个“投影仪”,我们可以将其领略成一个将源表中的数据凭证必然的逻辑转换成方针表数据的函数。

通过 SELECT语句,你能对每一个字段举办操纵,通过伟大的表达式天生所必要的数据。

SELECT 语句有许多非凡的法则,至少你应该认识以下几条:

  1. 你仅可以或许行使那些能通过表引用而得来的字段;
  2. 假如你有 GROUP BY 语句,你只可以或许行使 GROUP BY 语句后头的字段可能聚合函数;
  3. 当你的语句中没有 GROUP BY 的时辰,可以行使开窗函数取代聚合函数;
  4. 当你的语句中没有 GROUP BY 的时辰,你不能同时行使聚合函数和其余函数;
  5. 有一些要领可以将平凡函数封装在聚合函数中;
  6. ……

一些更伟大的法则多到足够写出另一篇文章了。好比:为何你不能在一个没有 GROUP BY 的 SELECT 语句中同时行使平凡函数和聚合函数?(上面的第 4 条)

缘故起因如下:

凭直觉,这种做法从逻辑上就讲不通。 假如直觉不可以或许说服你,那么语法必定能。 SQL : 1999 尺度引入了 GROUPING SETS,SQL: 2003 尺度引入了 group sets : GROUP BY() 。无论什么时辰,只要你的语句中呈现了聚合函数,并且并没有明晰的 GROUP BY 语句,这时一个不明晰的、空的 GROUPING SET 就会被应用到这段 SQL 中。因此,原始的逻辑次序的法则就被冲破了,映射(即 SELECT )相关起首会影响到逻辑相关,其次就是语法相关。(译者注:这段话原文就较量晦涩,可以简朴领略如下:在既有聚合函数又有平凡函数的 SQL 语句中,假如没有 GROUP BY 举办分组,SQL 语句默认视整张表为一个分组,当聚合函数对某一字段举办聚合统计的时辰,引用的表中的每一条 record 就失去了意义,所有的数据都聚合为一个统计值,你此时对每一条 record 行使其余函数是没故意义的)。 糊涂了?是的,我也是。我们再回过甚来看点浅近的对象吧。

我们学到了什么?

SELECT 语句也许是 SQL 语句中最难的部门了,尽量他看上去很简朴。其他语句的浸染着实就是对表的差异情势的引用。而 SELECT 语句则把这些引用整合在了一路,通过逻辑法则将源表映射到方针表,并且这个进程是可逆的,我们可以清晰的知道方针表的数据是怎么来的。

想要进修睦 SQL 说话,就要在行使 SELECT 语句之前弄懂其他的语句,固然 SELECT 是语法布局中的第一个要害词,但它应该是我们最后一个把握的。

10、 SQL 语句中的几个简朴的要害词: DISTINCT , UNION , ORDER BY 和 OFFSET

在进修完伟大的 SELECT 之后,我们再来看点简朴的对象:

荟萃运算( set operation): 荟萃运算首要操纵在于荟萃上,究竟上指的就是对表的一种操纵。从观念上来说,他们很好领略:

  • DISTINCT 在映射之后对数据举办去重
  • UNION 将两个子查询拼接起来并去重
  • UNION ALL 将两个子查询拼接起来但不去重
  • EXCEPT 将第二个字查询中的功效从第一个子查询中去掉
  • INTERSECT 保存两个子查询中都有的功效并去重

排序运算( ordering operation):

排序运算跟逻辑相关无关。这是一个 SQL 特有的成果。排序运算不只在 SQL 语句的最后,并且在 SQL 语句运行的进程中也是最后执行的。行使 ORDER BY 和 OFFSET…FETCH 是担保数据可以或许凭证次序分列的最有用的方法。其他全部的排序方法都有必然随机性,尽量它们获得的排序功效是可重现的。 OFFSET…SET是一个没有同一确定语法的语句,差异的数据库有差异的表达方法,如 MySQL 和 PostgreSQL 的 LIMIT…OFFSET、SQL Server 和 Sybase 的 TOP…START AT 等。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读