日期:2011-05-02 15:22:00 来源:本站整理
跟我学MS SQL Server(4)[MSSQL防范]
本文“跟我学MS SQL Server(4)[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
(四)查询多个表格
在对跨多个表格的数据举行组合时,有时很难搞清楚要利用哪一个SQL句法.我将在这里对将多个表格中的查询归并至单一声明中的常用方法举行阐述.
在这篇文章中的样本查询符合SQL92 ISO尺度.不是全部的数据库生产商都遵守这项尺度,并且很多厂商采纳的晋升办法会带来一些意料不到的后果.假如你不肯定你的数据库是不是支持这些尺度,你可以参看生产厂商的有关资料.
SELECT
一个简单的SELECT声明就是查询多个表格的最基本的方法.你可以在FROM子句中调用多个表格来组合来自多个表格的后果.这里是一个它若何工作的实例:
SELECT table1.column1, table2.column2 FROM table1, table2 WHERE table1.column1 = table2.column1;
这个实例中,我利用点号(table1.column1)来指定专栏来自哪一个表格.假如所触及的专栏只在一个参考的表格中呈现,你就不需求加入完好的名称,但是加入完好名称会对可读性起到帮忙.
在FROM子句中表格之间由逗号来脱离,你可以加入所需的肆意多的表格,固然一些数据库有一个在引入正式的JOIN声明之前他们可以有效地处理的内容这方面的限制,这个将在下面谈到.
这个句法是一个简单的INNER JOIN.一些数据库将它当作与一个外部的JOIN是平等的.WHERE子句奉告数据库哪一个区域要做关联,并且它返回后果时,就像列出的表格在给定的条件下组合成一个单独的表格一样.值得注意的是,你的对比条件并不需求与你作为后果组返回的专栏相同.在上面的例子中,table1.column1和table2.column1用来组合表格,但是返回的倒是table2.column2.
你可以在WHERE子句中利用AND关键字来将这个功效扩大至多于两个的表格.你还可以利用这样的表格组合来限制你的后果而不用实际地从每个表格返回专栏.在下面的例子中,table3与table1匹配,但是我没有从table3返回任何东西来显示.我只是确保来自table1的有关专栏存在于table3之中.注意此例中table3需求在FROM子句中被引用.
SELECT table1.column1, table2.column2 FROM table1, table2, table3 WHERE table1.column1 = table2.column1 AND table1.column1 = table3.column1;
但是,要注意的是,这个查询多个表格的方法是一个暗指的JOIN.你的数据库大概对事物举行差别的处理,这取决于它所利用的优化引擎.并且,忽视对与WHERE子句的相关特点的定义将会给你带来不肯看到的后果,比方从余下的查询中返回与每一个大概的后果相关的专栏的rogue域,就像在CROSS JOIN之中一样.
假如你习惯于你的数据库处理这种范例的声明的方法,且你只对两个或是少数几个表格举行组合,一个简单的SELECT声明便可以到达目的.
JOIN
JOIN的工作方法与SELECT声明是相同的,它从差别的表格中返回一个带有专栏的后果组.在暗含的JOIN之上利用外部JOIN的上风是对你的后果组的更好的掌握,并且还大概在触及很多个表格的情形下晋升性能表现.
JOIN的范例有几种:LEFT,RIGHT,FULL OUTER,INNER和CROSS.你所利用的范例是由你想要看到的后果所决意的.比方,利用LEFT OUTER JOIN将会从列出的第一个表格中返回全部有关的行,而同时假如没有信息与第一个表格相关的话将潜在地从所列出的第二个表格中加入行.
在这里INNER JOIN和暗含的JOIN是差别的,INNER JOIN将只返回那些在两个表格中都有数据的行.
对第一个SELECT查询利用以下JOIN声明:
SELECT table1.column1, table2.column2 FROM table1 INNER JOIN table2
ON table1.column1 = table2.column1;
子查询
子查询,或叫子挑选声明,是在一个查询中将后果组作为资源利用的一个途径.他常常被用来对后果举行限制或定义,而不是运行多个查询或操作利用软件之中的数据.有了子查询,你可以参考表格来决意数据的内含,或是在一些情形下,返回一个专栏,而这个专栏是一个子挑选的后果.
下面的例子中利用了两个表格.一个表格中包含了我想要返回的数据,而另一个表格则给出一个对比点来肯定什么数据是我确切感爱好的.
SELECT column1 FROM table1 WHERE EXISTS ( SELECT column1 FROM table2 WHERE table1.column1 = table2.column1 );
子查询很重要的一个方面就是性能表现.便利性是有代价的,它取决于你所利用的表格和声明的大小,数目和复杂性,还有你大概会答应你的利用软件做处理工作.每一个查询在被主查询作为资源利用之前,都将被完好地单独处理.假如大概的话,创造性地利用JOIN声明可以以较少的滞后时间供应出相同的信息.
JOIN声明和子查询
关于JOINS的更具体的阐述和有关的理念,请参阅 掌握衔接的一些概念.关于子查询的更多内容,请参阅利用SQL子挑选来归并查询
以上是“跟我学MS SQL Server(4)[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论