在SQL Server中用范围连接查找值

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

连接总能检验等式,这真是怪事。但连接的作用并不仅限于此。我们还可以根据“小于或等于”与“大于或等于”来应用连接。我甚至还能想到一个“不等于”应用连接的例子。事实上,有许多方法建立连接,范围连接只是其中的一种。

虽然我们都知道教科书中关系乘法的例子,但SQL Server开发人员一般还是应用连接来结合两个表格("http://builder.com.com/5110-6388-6070698.html">列表A)。

SELECT T1.*, T2.ColumnOfInterest

FROM T1, T2

这样你得到T1行数与T2行数的积。这在概念上很有趣,但实际上你又用过多少次呢?

我们倾向于根据等式来考虑连接(T1.ColumnName = T2.ColumnName)。但是,你的表格中可能包含这样的信息,如税率、保险费率与运价。例如,如果你的包裹没有1千克重,你支付的价格为x;如果它的重量在1至4千克之间,你支付的价格为y。由于它可以匹配较大的行数,所以我将其为范围连接。

你可以用BETWEEN关键字来表达连接。首先,假定两个表格("http://builder.com.com/5110-6388-6070699.html">列表B)。在上述数据库中,假定两个表格("http://builder.com.com/5110-6388-6070700.html">列表C)。"http://techrepublic.com.com/html/tr/tables/6070689-ListingD.htm">列表D中包含发货人的税率表。"http://techrepublic.com.com/html/tr/tables/6070689-ListingE.htm">列表E为发货表格中的值。"http://builder.com.com/5110-6388-6070703.html">列表F中包含将所有这些值结合起来的概念。"http://techrepublic.com.com/html/tr/tables/6070689-ListingG.htm">列表G中为在表格中应用概念所得到的值。

如前两列所示,我们有个问题。重量1与ShippingRates表中的两行对应,因此我们稍微精确一个数据的边界。我们错在将MinWeight和MaxWeight栏定义为整数。如果我们将它们改为浮点数,并略微调整一下MinWeight值(第二行为1.01,第三行为4.01),就可以解决问题。"http://techrepublic.com.com/html/tr/tables/6070689-ListingH.htm">列表H中为得到的新结果。

你还可以将同样的技巧应用于几乎所有包含范围的数据类型中,如征收所得税的工资、保险费率年龄、重量以及人口统计分析之中。

责任编辑:"mailto:builder@zdnet.com.cn">张琎

"http://builder.com.com/5100-6388_14-6070689.html?part=rss&tag=feed&subj=bldr">查看本文的国际来源 <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值