现在的位置: 首页 > 综合 > 正文

Db2数据库的基本操作命令

2013年10月03日 ⁄ 综合 ⁄ 共 4081字 ⁄ 字号 评论关闭

DB2基本问题总结

By Litz 2005-2-6

²        连接数据库

db2 => connect to bidb_dev user UID using PASSWORD

C:/ db2 connect to bidb_dev user UID using PASSWORD

要隐藏密码,就:

C:/ db2 connect to bidb_dev user UID  回车

密码  回车

²        数据查询:

1select * from tableName;

2、表关连:

内连接,外连接

外连接有3种,左关联,右关联,完全连接

左关联,

Select T1.*

FROM CORINFO.RV_ISTRSSTS T1

LEFT OUTER JOIN SESSION.TAB_CUTCOD T2 ON T1.CUT_COD = T2.CUT_COD      LEFT OUTER JOIN CORDIM.CM_CRYRAT T3 ON T1.CR_CCY = T3.CRY_NUM                                                              AND T1.EYDT = T3.EYDT

LEFT OUTER JOIN SESSION.TAB_BRNCOD T4 ON T1.BRN_NBR = T4.DEP_NBR

完全连接:

Select T1.*

FROM CORINFO.RV_ISTRSSTS T1

FULL OUTER JOIN SESSION.TAB_CUTCOD T2 ON T1.CUT_COD = T2.CUT_COD    

3、把表内关连放进where语句,和条件是一样的

3、在列里的条件选择:

select  (CASE WHEN T1.EYDT >= v_BeginLastYear

                              AND T1.EYDT <= v_NowLastYear

                              AND T1.CR_CCY <> '21' 

                           AND T1.CR_CCY <> '32'                 

                     THEN T1.CR_AMT*T3.CON_USD ELSE 0 END) from Tab_Nname ;

Case when  可以嵌套,相当于Oracle 里的Decode, SqlServer里也有 Case When用法一样;他是在数据被查询出来后,进行计算;

4、只查询几行:

有时候需要,只返回一行,或者只需要 返回10行,这样做:

select * from TabName FETCH FIRST 12 ROWS ONLY ;  这样就会只返回前12

5、排名:

   查询类似排名,得问题:

SELECT ROW_NUMBER() OVER() AS "排名"  from TAB_NAME;

6、为空字段的处理:

为空的字段是不能比较的, 下面的写法是错误的:

Select * from Tab_name where c1  =  NULL;

要用 Select * from Tab_name where c1  is  NULL;

如果,要为空 则等于 一个默认值的话,可以这样:

Select  case when Cl is NULL then 250 end from TAB_name;

有一个现成的函数供使用:

COALESCE(T1.MOD_NBR,0)   他的含义是,如果T1.MOD_NBR,不为空,则结果是T1.MOD_NBR,否则为0;这对于 Sum()函数求和是非常有用的;否则会因为有一条数据为空,只是返回的结果,都为空; 因为任何数 + ,都是空;

还可以写成Value(T1.MOD_NBR,0) , 也就是说 COALESCE(T1.MOD_NBR,0) = Value(T1.MOD_NBR,0)

但据我个人经验,这种处理,效率很低,尽量不要用;

²        数据增删改:

    UPDATE TAB_CUTCOD

        SET CAL_FLG = 'Y'

    WHERE CUT_COD = ‘0’;

 

INSERT INTO TAB_PRDSGM VALUES('000',-1,0), ('001',20,1), ('002',-3,2);

 

    Delete from TAB_CUTCOD where condition

好像这样也行:  

Delete TAB_CUTCOD where condition

²        表的相关操作:

建表语句:

drop table AdBaseInfo;

Create table AdBaseInfo

(

    ADID            CHAR(16) NOT NULL,

    ACT_SQNO        CHAR(5)  NOT NULL,

    Rctime          timestamp default currenttime,   

    primary key (ADID)

)

IN INDADV

    INDEX IN IDX_INDADV

PARTITIONING KEY(ADID);   -- 什么是PARTITION 在讲效率问题时讲;

 

comment on table  AdBaseInfo               is '基本信息表';

comment on column AdBaseInfo.ADID          is '标识';

 

其他选项:

NOT LOGGED 不记录日志,也不能会滚;

 

删除表:

Drop Table TableName;

 

清空表:

DB2,没有像Oracle等数据库的Trancat 语句,但可以用C语言写一个函数,新建一个文件,用空文件,覆盖掉原有文件,就起到了同样的效果;

 

查找存储过程的源码:

describe table sysibm.sysPROCEDUREs

 select * from sysibm.sysPROCEDUREs where PROCSCHEMA = 'RB_CRM'

 

 

²        其他傻瓜问题FAQ

1、执行文件命令:

例如建表语句,批处理等命令,写进一个文件,写好了后,统一执行

db2  –td@  -f   rb_query.db2

说明:rb_query.db2是命令文件,  -f 表示是命令文件, -td; 表示文件每个命令之间用分号分开,也可以是db2  –td@  -f   rb_query.db2 ,这样rb_query.db2 美革命的结束标志就是:@

2、错误编码的查询:

数据经常会报错,但错误,之多,你也搞不清楚是什么错,这个时候就会用到错误码,

DB2的错误码有2种表达方式:SQLSTATE 和 SQLCODE,他们编码不同,他们是一一对应的,查询具体错误码的含义:

例如:SQLSTATE,是 12345 ,SQLCODE是 987

SQLSTATE :  C:/> DB2 ?  23505

SQLCODE = -803,    C:/> Db2 ?  SQL0803  -- 注意前边加上 SQL,并且补0

3、查当前用户所有的表

SELECT * FROM SYSIBM.SYSTABLES  WHERE CREATOR='PBLTZ'

有时候上边这句不好用,就用下边这句:

list tables for schema pbltz

4、查当前用户所有的View

select * from sysibm.sysviews WHEREC CREATOR='PBLTZ'

5、查当前的表结构

describe table table_name

describe select * from table_name

6DB2的数据类型

select * from sysibm.SYSDATATYPES

7、如何知道表的字段的状况?

select * from sysibm.SYSCOLUMNS WHERE TBNAME='TAB_BBK'

8、日期常量

'01-02-2002'  ('01-02-2002'),to_date('01-02-2002'),date('01-02-2002')

9.取当前时间?
  SELECT  CURRENTTIMESTAMP  FROM  SYSIBM.SYSDUMMY1

select * from  SCHEMA

10、默认的空表,类似于Oracle Dual

select sysdate from Dual;

Db2就是: Select current timestamp from sysibm.sysdummy1;

11、连接2个字符字段:

Select emp_no||emp_nam from db2admin.bsempms;
select emp_no concat emp_nam from db2admin.bsempms;

 

12、只取前10 select * from tbl fetch first 10 rows only;

13truancate 表:alter table table_name active not logged initially with empty table

14、查看表空间的使用状况: list tablespace containers for 你的表空间号 show detail

 

list tablespace containers for 1 show detail

list tablespaces show detail 全部

15、增加表空间:ALTER TABLESPACE RISK_DATA_1 ADD(FILE '/db2inst1/risk/data3.dat' 25000) –是以4K为单位的,实际上是增加了1G

 

16、列举机器的数据源:db2 list user ODBC data sources

17、连接远程数据库:

db2 catalog TCPIP NODE runnode remote 99.1.57.23 server 50000

db2   catalog  db calldb as calldb2 at node runnode

connect to calldb2 user .. using ..

18、本地已经连接的节点  list node directory

19、  RUNSTATS ON TABLE <table-name>

      ON ALL COLUMNS WITH DISTRIBUTION AND

      DETAILED INDEXES ALL

      ALLOW READ ACCESS

 

抱歉!评论已关闭.