简单10步让你理解sql.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
简单10步让你理解sql

很多程序员认为SQL是一头难以驯服的野兽。它是为数不多的声明性语言之一,也因为这样,其展示了完全不同于其他的表现形式、命令式语言、?面向对象语言甚至函数式编程语言(虽然有些人觉得SQL?还是有些类似功能)。  我每天都写SQL,我的开源软件JOOQ中也包含SQL。因此我觉得有必要为还在为此苦苦挣扎的你呈现SQL的优美!下面的教程面向于:已经使用过但没有完全理解SQL的读者已经差不多了解SQL但从未真正考虑过它的语法的读者想要指导他人学习SQL的读者  本教程将重点介绍SELECT?语句。其他?DML?语句将在另一个教程中在做介绍。接下来就是…  1、SQL是声明性语言  首先你需要思考的是,声明性。你唯一需要做的只是声明你想获得结果的性质,而不需要考虑你的计算机怎么算出这些结果的。SELECT first_name, last_name FROM employees WHERE salary 100000  这很容易理解,你无须关心员工的身份记录从哪来,你只需要知道谁有着不错的薪水。  从中我们学到了什么呢?  那么如果它是这样的简单,会出现什么问题吗?问题就是我们大多数人会直观地认为这是命令式编程。如:“机器,做这,再做那,但在这之前,如果这和那都发生错误,那么会运行一个检测”。这包括在变量中存储临时的编写循环、迭代、调用函数,等等结果。  把那些都忘了吧,想想怎么去声明,而不是怎么告诉机器去计算。  2、SQL语法不是“有序的”  常见的混乱源于一个简单的事实,SQL语法元素并不会按照它们的执行方式排序。语法顺序如下:SELECT [DISTINCT]FROMWHEREGROUP BYHAVINGUNIONORDER BY  为简单起见,并没有列出所有SQL语句。这个语法顺序与逻辑顺序基本上不同,执行顺序如下:?FROMWHEREGROUP BYHAVINGSELECTDISTINCTUNIONORDER BY  这有三点需要注意:  1、第一句是FROM,而不是SELECT。首先是将数据从磁盘加载到内存中,以便对这些数据进行操作。  2、SELECT是在其他大多数语句后执行,最重要的是,在FROM和GROUP?BY之后。重要的是要理解当你觉得你可以从WHERE语句中引用你定义在SELECT语句当中的时候,。以下是不可行的:SELECT A.x + A.y AS zFROM AWHERE z =10-- z is not available here!  如果你想重用z,您有两种选择。要么重复表达式:?SELECT A.x + A.y AS zFROM AWHERE (A.x + A.y) =10  或者你使用派生表、公用表表达式或视图来避免代码重复。请参阅示例进一步的分析:  3、在语法和逻辑顺序里,UNION都是放在ORDER BY之前,很多人认为每个UNION子查询都可以进行排序,但根据SQL标准和大多数的SQL方言,并不是真的可行。虽然一些方言允许子查询或派生表排序,但却不能保证这种顺序能在UNION操作后保留。  需要注意的是,并不是所有的数据库都以相同的形式实现,例如规则2并不完全适用于MySQL,PostgreSQL,和SQLite上  从中我们学到了什么呢?  要时刻记住SQL语句的语法顺序和逻辑顺序来避免常见的错误。如果你能明白这其中的区别,就能明确知道为什么有些可以执行有些则不能。  如果能设计一种在语法顺序上实际又体现了逻辑顺序的语言就更好了,因为它是在微软的LINQ上实现的。  3、SQL是关于数据表引用的?  因为语法顺序和逻辑顺序的差异,大多数初学者可能会误认为SQL中列的值是第一重要的。其实并非如此,最重要的是数据表引用。  该SQL标准定义了FROM语句,如下:from clause ::=FROMlt;table referencegt; [ { lt;commagt; lt;table referencegt; }... ]  ROM语句的output是所有表引用的结合程度组合表引用。让我们慢慢地消化这些。?FROM a, b  上述产生一个a+b度的组合表引用,如果a有3列和b有5列,那么输出表将有8(3+5)列。  包含在这个组合表引用的记录是交叉乘积/笛卡儿积的axb。换句话说,每一条a记录都会与每一条b记录相对应。如果a有3个记录和b有5条记录,然后上面的组合表引用将产生15条记录(3×5)。  在WHERE语句筛选后,GROUP BY语句中output是fed/piped,它已转成新的output,我们会稍后再去处理。  如果我们从关系代数/集合论的角度来看待这些东西,一个SQL表是一个关系或一组元素组合。每个SQL语句将改变一个或几个关系,来产生新的关系。  从中我们学到了什

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档