DBA在使用SQL语句时需要注意的问题

日期: 2011-12-05 翻译:孙瑞 来源:TechTarget中国 英文

Michael McLaughlin是Oracle 11g和MySQL 5.6开发者指南的作者,他在书中为Oracle数据库开发者提供了一些建议与帮助。书中的一章探讨了提高SQL查询效率的相关技巧,比如使用关键字以及软件开发工具等。 为此,TechTarget数据库网站对McLaughlin进行了简短的采访,让他来谈一谈Oracle查询的合理使用。   开发者进行数据库查询的时候,经常会碰到的问题有哪些?   McLaughlin:在实际的开发当中,我们发现程序员在设计方面的问题会比语法错误要严重。

SQL设计的错误将导致返回不一致、不正确或者无用的结果。导致这一现象的原因往往是连接条件无法解决……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

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

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

Michael McLaughlin是Oracle 11g和MySQL 5.6开发者指南的作者,他在书中为Oracle数据库开发者提供了一些建议与帮助。书中的一章探讨了提高SQL查询效率的相关技巧,比如使用关键字以及软件开发工具等。

为此,TechTarget数据库网站对McLaughlin进行了简短的采访,让他来谈一谈Oracle查询的合理使用。

  开发者进行数据库查询的时候,经常会碰到的问题有哪些?

  McLaughlin:在实际的开发当中,我们发现程序员在设计方面的问题会比语法错误要严重。SQL设计的错误将导致返回不一致、不正确或者无用的结果。导致这一现象的原因往往是连接条件无法解决一个关系或者WHERE语句无法正确过滤相应的行。

  无用的查询通常是因为使用不必要索引导致的无用连接,或者是相关查询的join语句匹配非唯一的列值。当然解决这一问题并不困难,使用IN、ANY或者SOME运算符,针对非唯一匹配的列值,它们返回结果的速度更快。

  在查询时使用关键字的好处是什么?

  McLaughlin:关键字在SQL中扮演了许多角色,当帮助开发者弄清数据或者SQL语句时是非常高效的。比如INNER、LEFT、RIGHT和FULL JOIN这些关键字将限定表之间的关系,它们可以帮助开发者看清楚什么表提供什么数据。举例来说,一个INNER JOIN或JOIN是表之间的交集,它需要你声明支持连接操作的列。在ANSI 92中,WHERE子句只包含过滤没有连接条件的结果集的join语句。而老一些的ANSI 89通过逗号来分割表,且join语句可以任意出现在WHERE子句中。WHERE子句就包含了连接语句和过滤语句。

  LEFT、RIGHT和FULL JOIN语句能够实现外部连接。一个LEFT JOIN可以查询所有左侧外加交集的结果,它通常比之前Oracle使用“+”符号更加清晰一些。因为LEFT和RIGHT能够让你看到那些没有交集的数据在哪里。另一方面,“+”符号可以用在交集外没有其他数据的情况下。

  请您解释一下表别名的重要性,为什么开发者要用到它?

  McLaughlin:就像表名一样,当使用查询返回数据时,表别名(Table aliases)可以消除相同名称的列。它往往可以简化长的描述性的名称。当你连接相同表的拷贝时,它是必要的,因为表别名可以在一个查询中完成表的多个拷贝。

  使用软件开发工具的优势和缺点有哪些?主要是和命令行界面相比。

  McLaughlin:我认为使用软件开发工具的优势还是更多一些。它们对于标准查询以及插入、修改、删除语句来说非常好,还可以打包并运行脚本文件。有些时候你需要隔离一个问题,命令行界面提供SQL与数据库交互的梗概情况,且它是SQL的通用语,也就是说直接使用不必再进行软件开发工具的相关培训。

  开发者应牢记的几点编程习惯是什么?

  McLaughlin:开发者应该形成一种写SQL语句的风格,能够清楚地阅读代码标点和语法规范。这往往意味着需要敲更多的代码,但是它能够降低出错的风险并节省相应的时间。举例来说,高手写代码时,会把逗号放在SELECT和ORDER BY的左侧,AND/OR关键字放在WHERE子句的左侧。

  另外一点,多使用表别名,因为用它来添加内容会更容易,还可以消除相同名称的列。

翻译

孙瑞
孙瑞

相关推荐