如何用SQL Server JOIN加快范围查找

ZDNet软件频道 时间:2006-11-24 作者:Builder.com.cn |  我要评论()
本文关键词:SQLServer 关系数据库 数据库 ArthurFuller JOIN
对Sql server开发者而言,JION是一个基本的组件,然而了解它们的真正作用的开发者却相对较少。

对SQL开发者而言,JION是一个基本的组件,然而了解它们的真正作用的开发者却相对较少。许多开发者了解相等连接(equi-JOIN),它将表T1中的一个值与表T2中的一个值进行比较,就像这样:

SELECT * FROM T1 INNER JOIN T2 ON T1

这种SQL Sever开发只是JOIN应用的开始。首先你要意识到你可以用其它运算符来代替上面的等号。在多情况下,这没有多大用处,但你可以用<>替代等号(=),将T1中的一行与并不与T1中的值匹配的T2中的所有行连接起来。

范围查找是JOIN的一个更加有趣且实用的用法。在数千种业务流程,如税表、运输价格、学生成绩和保险费率中,范围查找都是最基本的应用。

不可能在查找表中发现任何给定的值,是这些情况下的根本理念。相反,查找表包含两栏:一栏中范围的最小基数(Floor),一栏是范围的最大基数(Ceiling)。列表A包含建立样本表的一个脚本。12中是样本行。

表1

RangeID

Floor

Ceiling

Rate

1

0.00

1.99

5.0000

2

2.0

3.99

8.5000

3

4.0

6.99

11.0000

4

7.0

9.99

13.0000

NULL

NULL

NULL`

NULL

表2

ShipmentID

Weight

1

1.30

2

2.70

3

3.00

4

1.90

5

2.40

6

3.30

7

4.70

NULL

NULL

SQL要求对列表B中的数据执行查询,于是得到如图3所见的结果集。查询得到了你希望的结果。如上所述,这是一个直接SELECT查询,但你可以根据自己的需要,轻易地把它变成一个存储过程或一个参数化UDF。

ShipmentID

Weight

Floor

Ceiling

Rate

1

1.30

0.00

1.99

5.00

4

1.90

0.00

1.99

5.00

2

2.70

2.00

3.99

8.50

3

3.00

2.00

3.99

8.50

5

2.40

2.00

3.99

8.50

6

3.30

2.00

3.99

8.50

7

4.70

4.00

6.99

11.00

这种方法有无数的应用,而且它比用WHERE谓语编写相应的SQL代码要容易得多。另外,在一个计算所得税范围的大型查找表中,你可以对最小基数(Floor)和最大基数(Ceiling)栏编写索引并提高性能,因为优化器能够利用这些索引,从而迅速找到相应的行。

责任编辑:张琎

查看本文的国际来源

SQLServer

关系数据库

数据库

ArthurFuller

JOIN


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134