网友俱乐部 » » Mysql教程 » 详细说明一下SQL中CASE语句强大功能

2007-11-25 20:45 ljjk5
详细说明一下SQL中CASE语句强大功能

[b][color=#ff0000]概述:[/color][/b][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
SQL语句中的CASE语句与高级语言中的switch语句,是标准SQL的语法,适用与一个条件判断有多种值的情况下分别执行不同的操作。灵活应用CASE语句可以使SQL语句变得简洁易读,下面在DB2环境下通过一个简单的查询来展示SQL CASE语句的强大功能。[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[b][color=#ff0000]环境:[/color][/b][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
Windows XP Professional[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
DB2 V9.1[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[b][color=#ff0000]问题:[/color][/b][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
有一个行业代码表,建表SQL和数据如下,要求查出代码别名、代码名、行业名、代码长度。代码别名为数字序号与大写英文字母的序号的映射值,比如代码 '01'的别名就是'A','02'的别名就是'B',依次类推。[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
建表SQL和初始化数据SQL[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
-------------------------------------[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
drop table DM_HYML;[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
create table DM_HYML[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
([url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
  HYML_DM CHAR(2) not null,[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
  HYML_MC VARCHAR(100) not null,[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
  XYBZ    CHAR(1) not null[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
);[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
alter table DM_HYML[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
  add primary key (HYML_DM);[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
comment on table DM_HYML is[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
    '行业门类代码表';[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
comment on column DM_HYML.HYML_DM is[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
    '行业门类代码';[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
comment on column DM_HYML.HYML_MC is[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
    '行业门类名称';[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
comment on column DM_HYML.XYBZ is[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
    '选用标志';[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
delete from DM_HYML;[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
values ('01', '农、林、牧、渔业', 'Y');[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
values ('03', '制造业', 'Y');[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
values ('02', '采矿业', 'Y');[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
values ('04', '电力、燃气及水的生产和供应业', 'Y');[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
values ('05', '建筑业', 'Y');[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
values ('06', '交通运输、仓储和邮政业', 'Y');[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
values ('07', '信息传输、计算机服务和软件业', 'Y');[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
values ('08', '批发和零售业', 'Y');[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
values ('09', '住宿和餐饮业', 'Y');[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
values ('10', '金融业', 'Y');[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
values ('11', '房地产业', 'Y');[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
values ('12', '租赁和商务服务业', 'Y');[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
values ('13', '科学研究、技术服务和地质勘查业', 'Y');[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
values ('14', '水利、环境和公共设施管理业', 'Y');[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
values ('15', '居民服务和其他服务业', 'Y');[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
values ('16', '教育', 'Y');[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
values ('17', '卫生、社会保障和社会福利业', 'Y');[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
values ('18', '文化、体育和娱乐业', 'Y');[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
values ('19', '公共管理和社会组织', 'Y');[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
values ('20', '国际组织', 'Y');[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
commit;[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[b][color=#ff0000]实现:[/color][/b][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]select (case t.hyml_dm[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '01' then 'A'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '02' then 'B'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '03' then 'C'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '04' then 'D'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '05' then 'E'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '06' then 'F'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '07' then 'G'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '08' then 'H'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '09' then 'I'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '10' then 'J'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '11' then 'K'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '12' then 'L'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '13' then 'M'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '14' then 'N'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '15' then 'O'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '16' then 'P'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '17' then 'Q'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '18' then 'R'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '19' then 'S'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '20' then 'T'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '21' then 'U'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '22' then 'V'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '23' then 'W'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '24' then 'X'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '25' then 'Y'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]         when '26' then 'Z'[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]       end) as hydmbm,[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]       t.hyml_dm,[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]       t.hyml_mc,[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]       length(t.hyml_dm) as sublenth,[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]       '00' as zb[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff]  from dm_hyml t[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
  将此sql代码保存为C:\test.sql文件,在DOS下进入DB2安装目录的bin目录下,链接数据库并执行(命令)此SQL,并重定向输出查询结果和信息到C:\test.txt。[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
C:\IBM\SQLLIB\BIN>db2  -tvf C:\test.sql > C:\test.txt[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[b][color=#ff0000]执行结果:[/color][/b][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
打开C:\test.txt文件查看结果:[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
select (case t.hyml_dm when '01' then 'A' when '02' then 'B' when '03' then 'C' when '04' then 'D' when '05' then 'E' when '06' then 'F' when '07' then 'G' when '08' then 'H' when '09' then 'I' when '10' then 'J' when '11' then 'K' when '12' then 'L' when '13' then 'M' when '14' then 'N' when '15' then 'O' when '16' then 'P' when '17' then 'Q' when '18' then 'R' when '19' then 'S' when '20' then 'T' when '21' then 'U' when '22' then 'V' when '23' then 'W' when '24' then 'X' when '25' then 'Y' when '26' then 'Z' end) as hydmbm, t.hyml_dm, t.hyml_mc, length(t.hyml_dm) as sublenth, '00' as zb from dm_hyml t[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
HYDMBM HYML_DM HYML_MC                                                                                                                                                                                                  SUBLENTH    ZB[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
------ ------- ---------------------------------- ----- --[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
A      01      农、林、牧、渔业                       2 00[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
C      03      制造业                                 2 00[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
B      02      采矿业                                 2 00[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
D      04      电力、燃气及水的生产和供应业           2 00[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
E      05      建筑业                                 2 00[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
F      06      交通运输、仓储和邮政业                 2 00[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
G      07      信息传输、计算机服务和软件业           2 00[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
H      08      批发和零售业                           2 00[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
I      09      住宿和餐饮业                           2 00[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
J      10      金融业                                 2 00[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
K      11      房地产业                               2 00[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
L      12      租赁和商务服务业                       2 00[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
M      13      科学研究、技术服务和地质勘查业         2 00[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
N      14      水利、环境和公共设施管理业             2 00[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
O      15      居民服务和其他服务业                   2 00[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
P      16      教育                                   2 00[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
Q      17      卫生、社会保障和社会福利业             2 00[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
R      18      文化、体育和娱乐业                     2 00[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
S      19      公共管理和社会组织                     2 00[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
T      20      国际组织                               2 00[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
  20 条记录已选择。[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
呵呵,CASE语句方便吧。[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
注意:DB2命令行下执行sql语句只能是一行,如果要执行多行,可以将sql保存为文件执行,执行的方法是:[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
1、执行SQL语句[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
db2  -tvf [filename].sql[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
2、执行存储过程[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
db2 -td@ -vf [filename].sql[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
当然这些命令的选项根据需要有所不同,可以直接从命令行查看这些选项:db2 ? OPTIONS[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
选项    描述                                      缺省设置[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
------  ----------------------------------------  ---------------[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
   -a    显示 SQLCA                                OFF[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
   -c    自动落实                                  ON[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
   -d    检索并显示 XML 声明                       OFF[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
   -e    显示 SQLCODE/SQLSTATE                     OFF[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
   -f    读取输入文件                              OFF[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
   -i    显示 XML 数据并带有缩进                   OFF[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
   -l    将命令记录到历史记录文件中                OFF[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
   -n    除去换行字符                              OFF[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
   -o    显示输出                                  ON[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
   -p    显示 db2 交互式提示符                     ON[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
   -q    保留空格和换行符                          OFF[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
   -r    将输出报告保存到文件                      OFF[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
   -s    在命令出错时停止执行                      OFF[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
   -t    设置语句终止字符                          OFF[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
   -v    回传当前命令                              OFF[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
   -w    显示 FETCH/SELECT 警告消息                ON[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
   -x    不打印列标题                              OFF[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
   -z    将所有输出保存到输出文件                  OFF[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#ff0000][b]注意:[/b][/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
使用 DB2OPTIONS 环境变量定制选项缺省值。[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
紧跟选项字母后的减号(-)使该选项关闭。[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
若将减号(-)更改为加号(+),则选项[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
文件输入方式)。[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[b][color=#ff0000]CASE和IF的区别:[/color][/b][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
在高级语言中,CASE的可以用IF来替代,但是在SQL中不行。[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
CASE是SQL标准定义的,IF是数据库系统的扩展。[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
CASE可以用于SQL语句和SQL存储过程、触发器,IF只能用于存储过程和触发器。[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
在SQL过程和触发器中,用IF替代CASE代价都相当的高,相当的麻烦,难以实现。[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#ff0000][b]CASE语句应用对比:[/b][/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
下面做两组查询,每组用两种方法来实现,一种是用case,一种是不用case,谁快谁获胜,测试环境依然DB2 V9.1、windows server 2003。[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#0000ff][b]第一组:查询dj_zt表状态为'07'或'11'、qylx_dm = '03'的所有记录数。
[/b][/color][color=#008000]A:用CASE语句[/color]
select count(case a.zt when '07' then a.bs end)+
    count(case a.zt when '11' then a.bs end)
  from dj_zt a
where a.qylx_dm = '03'
----------------
11829[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#008000]B:不用CASE语句[/color]
select count(*)
  from dj_zt a
where a.qylx_dm = '03'
   and a.zt in ('07', '11')
----------------
11829[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#ff1493]结果:A、B两组耗费的代价一样的,相比B的写法简洁,平局。[/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]

[color=#0000ff][b]第二组:分别查询dj_zt表状态为'07'和'11'且qylx_dm = '03'的所有记录数。[/b][/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#008000]A:用CASE语句[/color]
select count(case a.zt when '07' then a.bs end),
    count(case a.zt when '11' then a.bs end)
  from dj_zt a
where a.qylx_dm = '03
----------------
4565 7264[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#008000]B:不用CASE语句(写了两条语句,扫描表两遍,效率明显低下)[/color]
select count(*)
  from dj_zt a
where a.qylx_dm = '03'
   and a.zt='07'
----------------
4565 [url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
select count(*)
  from dj_zt a
where a.qylx_dm = '03'
   and a.zt='11'
----------------
7264 [url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#ff1493]结果:B组代价明显高出A组很多,并且麻烦,A胜![/color][url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[url=http://lavasoft.blog.51cto.com/][color=#000000]leizhimin 51cto技术博客[/color][/url]
[color=#ff0000][b]总结:通过上面两组实例可以看出,灵活应用CASE语句可以让SQL变得简洁高效,而且,CASE的使用一般不会引起性能(相比没有用CASE的语句)低下。[/b][/color]

页: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.