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

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

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

多年前保藏在条记中的一篇文章,本日偶尔翻出,重读了一遍,依然大有收成。分享出来,各人一路切磋。

以本文是为了以下读者而专程编写的:

  • 1、 在事变中会用到 SQL 可是对它并不完全相识的人。
  • 2、 可以或许纯熟行使 SQL 可是并不相识其语法逻辑的人。
  • 3、 想要教别人 SQL 的人。

本文着重先容 SELECT 句式。 10个简朴步调,完全领略SQL

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

1、 SQL 是一种声明式说话

起主要把这个观念记在脑中:“声明”。 SQL 说话是为计较机声明白一个你想从原始数据中得到什么样的功效的一个典型,而不是汇报计较机怎样可以或许获得功效。sql的执行引擎会按照你声明的数据功效去获取对应的数据。

  1. SELECT first_name, last_name FROM employees WHERE salary > 100000 

上面的例子很轻易领略,我们不体谅这些雇员记录从那边来,我们所必要的只是人为大于10W的员工。

我们从哪儿进修到这些?

假如 SQL 说话这么简朴,那么是什么让人们“闻 SQL 色变”?

首要的缘故起因是:我们潜意识中的是凭证呼吁式编程的思想方法思索题目的。就仿佛这样:“电脑,先执行这一步,再执行那一步,可是在那之前先搜查一下是否满意前提 A 和前提 B ”。譬喻,用变量传参、行使轮回语句、迭代、挪用函数等等,都是这种呼吁式编程的思想惯式。

2、 SQL 的语法并不凭证语法次序执行

SQL 语句有一个让大部门人都感想狐疑的特征,就是:SQL 语句的执行次序跟其语句的语法次序并纷歧致。SQL 语句的语法次序是:

  1. SELECT[DISTINCT] 
  2. FROM 
  3. WHERE 
  4. GROUP BY 
  5. HAVING 
  6. UNION 
  7. ORDER BY 

为了利便领略,上面并没有把全部的 SQL 语法布局都列出来,可是已经足以声名 SQL 语句的语法次序和其执行次序完全纷歧样,就以上述语句为例,其执行次序为:

  1. FROM 
  2. WHERE 
  3. GROUP BY 
  4. HAVING 
  5. SELECT 
  6. DISTINCT 
  7. UNION 
  8. ORDER BY 

关于 SQL 语句的执行次序,有三个值得我们留意的处所:

  • 1、FROM 才是 SQL 语句执行的第一步,并非 SELECT 。数据库在执行 SQL 语句的第一步是将数据从硬盘加载到数据缓冲区中,以便对这些数据举办操纵。
  • 2、SELECT 是在大部门语句执行了之后才执行的,严酷的说是在 FROM 和 GROUP BY 之后执行的。领略这一点长短常重要的,这就是你不能在 WHERE 中行使在 SELECT 中设定别名的字段作为判定前提的缘故起因。
  1. SELECT A.x + A.y AS z FROM A WHERE z = 10  
  2. -- z 在此处不行用,由于SELECT是最后执行的语句! 

假如你想重用别名z,你有两个选择。要么就从头写一遍 z 所代表的表达式:

  1. SELECT A.x + A.y AS z FROM A WHERE (A.x + A.y) = 10 

可能告急于衍生表、通用数据表达式可能视图,以停止别名重用。

  • 3、 无论在语法上照旧在执行次序上, UNION 老是排在在 ORDER BY 之前。许多人以为每个 UNION 段都能行使 ORDER BY 排序,可是按照 SQL 说话尺度和各个数据库 SQL的执行差别来看,这并不是真的。
  • 尽量某些数据库应承 SQL 语句对子查询(subqueries)可能派生表(derived tables)举办排序,可是这并不声名这个排序在 UNION 操纵事后仍保持排序后的次序。 留意:并非全部的数据库对 SQL 语句行使沟通的理会方法。如 MySQL、PostgreSQL和 SQLite 中就不会凭证上面第二点中所说的方法执行。

我们学到了什么?

既然并不是全部的数据库都凭证上述方法执行 SQL,那我们的收成是什么?

我们的收成是永久要记得: SQL 语句的语法次序和其执行次序并纷歧致,这样我们就能停止一样平常性的错误。假如你能记着 SQL 语句语法次序和执行次序的差别,你就能很轻易的领略一些很常见的 SQL 题目。

虽然,假如一种说话被计划成语法次序直接回响其语句的执行次序,那么这种说话对措施员黑白常友爱的,这种编程说话层面的计划理念已经被微软应用到了 LINQ 说话中。

3、 SQL 说话的焦点是对表的引用(table references)

因为 SQL 语句语法次序和执行次序的差异,许多同窗会以为SELECT 中的字段信息是 SQL 语句的焦点。其拭魅真正的焦点在于对表的引用。

按照 SQL 尺度,FROM 语句被界说为:

  1. <from clause> ::= FROM <table reference> [ { <comma> <table reference> }... ] 

FROM 语句的“输出”是一张连系表,来自于全部引用的表在某一维度上的连系。我们们逐步来说明:

  1. FROM a, b 

上面这句 FROM 语句的输出是一张连系表,连系了表 a 和表 b 。假如 a 表有三个字段, b 表有 5 个字段,那么这个“输出表”就有 8 ( =5+3)个字段。

这个连系内外的数据是 a*b,即 a 和 b 的笛卡尔积。换句话说,也就是 a 表中的每一条数据都要跟 b 表中的每一条数据配对。假如 a 表有3 条数据, b 表有 5 条数据,那么连系表就会有 15 ( =5*3)条数据。

FROM 输出的功效被 WHERE 语句筛选后要颠末 GROUP BY 语句处理赏罚,从而形成新的输出功效。

假如我们从荟萃论(相关代数)的角度来看,一张数据库的表就是一组数据元的相关,而每个 SQL 语句会改变一种或数种相关,从而发生出新的数据元的相关(即发生新的表)。

我们学到了什么?

思索题目的时辰从表的角度来思索题目提,这样很轻易领略数据如安在 SQL 语句的“流水线”长举办了什么样的变换。

4、 机动引用表能使 SQL 语句变得更强盛

机动引用表能使 SQL 语句变得更强盛。一个简朴的例子就是 JOIN 的行使。

严酷的说 JOIN 语句并非是 SELECT 中的一部门,而是一种非凡的表引用语句。

(编辑:湖南网)

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

热点阅读