使用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语句格式。假如你需要把一个值和多个值比较时,则使用第二种格式。