- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SQL语句的良好编写方法【DOC精选】
SQL语句的良好编写方法
Author: Inthirties
Date: 2008-11-21
1.涉及到多个表的JOIN语句的写法
很多开发人员对于涉及到多个表的JOIN语句,不知道如何下手,以及好何写出一个效率好的JOIN语句来,在这里,我根据我的一些经验,给出一些建议供大家参考:
了解一个SELECT 语句的结构
通常,一个SELECT语句的结构是这样的:
SELECT select_column_list--------- step_4
FROM table_list---------step_1
WHERE join_condition---------step_2
AND predicates--------- step_3
ORDER BY orderby_clause--------- step_5
SELECT语句的书写顺序
通常情况下,SELECT语句的结构都是如我上面所描述的那样,大家在写SQL语句时,不妨先写好框架,如:先写SELECT语句的一些关键字:
SELECT *
FROM
WHERE
ORDER BY
框架写好后,我们再逐步加精. 书写的顺序按上图我标的顺序:
第一步,先写查询所要涉及到的表,不管有多少个表,我们先把表名列上去,为了后面语句的简洁,可以给表加上别名,如果有同一个表要使用几次,则要使用不同的别名来标识,或者容易产生岐义:
SELECT *
FROM pm_user a, pm_company b…pm_user c
WHERE
ORDER BY
写好table_list后,我们开始来定义JOIN的连接条件,注意,对于涉及到多个表的连接,我们一定要避免不定义连接条件的情况,因为这会产生迪卡尔连接(Cartesian Joins)
SELECT *
FROM pm_user a, pm_company b…pm_user c….表列表
WHERE pid=pid……连接条件
ORDER BY
当所有的连接条件都定义好了以后,我们要再检查一下,看是否有其中的两个表完全没有定义连接条件的,这在JOIN的表很多的情况下,大家很容易犯的错误。一个好的检测方法是:书写好SQL后,在pl/sql developer中按F5键查看执行计划,当SQL的执行计划中有出现关键字为Cartesian的操作时,就表示我们不小心产生了一个迪卡尔连接,要回去再REVIEW一下我们定义的连接条件
写好连接条件后,接下来,我们就可以在WHERE子句中接着写过滤条件(我们把它称之为predicates),即有具体值,能过滤掉一部分记录的WHERE条件。通常,良好的编写习惯是将过滤条件写在WHERE子句的最下部,这样,SQL引擎在对表进行连接操作时,会先过滤掉参与连接的表的一部分记录,这样,参与连接的数据集就会少一点,从而连接操作的成本也小一点:
SELECT *
FROM pm_user a, pm_company b…pm_user c….表列表
WHERE pid=pid……连接条件
And a.userid=123456 and …….过滤条件
ORDER BY
写好过滤条件后,基本上WHERE子句就写完了,接着我们就可以来定义查询字段列表了(select_column_list),即查询执行完后我们想要看到的字段。如果有同名的字段,可以定义字段别名(如下例中的和)
SELECT a.userid, as username, as company_name…查询字段列表
FROM pm_user a, pm_company b…pm_user c….表列表
WHERE pid=pid……连接条件
And a.userid=123456 and …….过滤条件
ORDER BY
定义ORDER BY 子句。ORDER BY即排序字段。因为排序操作通常是一个SELECT语句的最后一步操作,所以,通常,ORDER BY 子句也可以放到最后来写,如果查询字段列表中有定义别名,排序字段中也可以使用表名(如下例中的username):
SELECT a.userid, as username, as company_name…查询字段列表
FROM pm_user a, pm_company b…pm_user c….表列表
WHERE pid=pid……连接条件
And a.userid=123456 and …….过滤条件
ORDER BY a.userid,username….排序字段
经过上面这些步骤,基本上,一个SELECT语句就完成了。
良好性能JOIN语句的写法
下面介绍一下如何写一个执行性能良好的JOIN语句
尽量写平级的连接,不要写
文档评论(0)