使用CASE控制语句执行

假设你想在网页上显示你喜欢站点的名称,URL,和关于它的简单描述。更进一步,你想在列出这些站点时在站点的名称旁边指明每一个网站的类型。比如,在政府机关网站的旁边,你会显示单词Government;在商业网站的旁边,显示单词Commercial。为了做到这一点,你可能会创建一个具有4列的表。前三列和原先的一样,分别是名称列,URL列,简单描述列。另外你可能会添加一个新列,该列为每一个网站的类型。

但在实际上,你不需要这样做…有一种能获得同样的结果但是更好的方法。

按照上面的做法,你的数据表中就会包含多余的信息。因为在URL列中已经包含了每一个网站类型的信息。通过查看每一个URL最后的三个字母,你就能确定某个网站是商业的,政府的和教育的等等。所以你不需要在数据表中添加新列重复同样的信息。但是当你在读取数据表中的记录时你是如何在URL列中获取该信息的呢?你可以使用CASE表达式来做到这一点。如下面的例子所示:

SELECT

CASE

WHEN site_url LIKE %edu THEN Educational

WHEN site_url LIKE %gov THEN Government

WHEN site_url LIKE %com THEN Commercial

ELSE Other

END

) TYPE,

site_name Name,

site_URL URL,

site_desc Description

FROM site_directory

 

注意

字母.edu,.gov,和.com都是顶级域名的例子,目前还有许多的顶级域名在使用,比如,假如某个网站的域名以字母.cn结尾,这就指明该网站建在中国大陆。

当上面的SELECT语句执行时,你就会接收到正确的结果。为了返回正确的值,我们使用CASE表达式对site_url列进行了检测。比如,当site_url列的值以三个字母edu结尾时,就会返回值Educational。下面就是从该查询返回结果的一个例子:

Type

Name

URL

Description

……………..

………………

厖厖厖

厖厖厖

Commercial

Microsoft

www.microsoft.com

The Creators of Active Server Pages

Commercial

Yahoo

www.yahoo.com

One of the best Internet Directories

Commercial

Collegescape

www.collegescape.com

Apply to over 50 colleges online

Educational

MIT

www.mit.edu

The Massachusetts Institute of Technology

Government

The whitehouse

www.whitehouse.gov

The residence of the Prisedent

使用CASE语句,你可以测试不同的条件,并且基于不同的结果返回不同的值。对于每一个测试,都有对应的WHEN短句。在该例子中,当在WHEN短句后面的语句为真时,返回在相应的THEN短句后面的值。如果没有一个WHEN短句后面的语句为真,则返回在ELSE短句后面的值。

所有的多个WHEN短句和可以选择的单个ELSE短句都必须包含在表达式CASE和END之间。关键字CASE指明CASE语句的开始。而关键字END指明CASE语句的结束。

CASE语句具有另外一种稍微不同的格式。考察在下面的例子内是如何使用CASE语句的:

SELECT

(CASE

site_name

WHEN Yahoo THEN Internet Directory

WHEN Microsoft THEN Software Giant

ELSE Other

END

)Type,

site_name Name,

site_URL URL,

site_desc Description

FROM site_directory

该例子同样显示网站列表的类型,名称,URL和简要描述。所不同的是,在该例子中,每个网站的类型是由网站的名称决定的,而不是URL。下面就是该批处理的结果:

Type

Name

URL

Description

Software Giant

Microsoft

www.microsift.com

The Creators of Active Server Pages

Internet Directory

Yahoo

www.yahoo.com

One of the best Internet Directories

Other

Collegescape

www.collegescape.com

Apply to over 50 college online

Other

MIT

www.mit.edu

The Massachusetts Institute of Technology

Other

The whitehouse

www.whitehouse.gov

The residence of the President

(5 row(s) affected)

请注意在该例子中,CASE例子是如何书写的。在该CASE语句中,在WHEN短语后面并没有跟一个语句,而是要与site_name列的值相比较的值。

当你具有多个条件且每一个条件都是可真或可假时,你必须使用第一种CASE语句格式。假如你需要把一个值和多个值比较时,则使用第二种格式。