文档库 最新最全的文档下载
当前位置:文档库 › db2学习记录

db2学习记录

1、select USER_ID,USER_NAME,VARCHAR_FORMAT( current TIMESTAMP,'yyyymmdd') from FUSER_INFO
2、SELECT current date FROM cnaps2_message
3、case
when XXX is not null
then to_char(xxx,'yyyymmdd')
end
4、reorg table CNAPS2_TRL; --重构索引等信息
如果在数据表里已经有数据,然后修改完字段后需要reorg一下 ,否则报-668 错误
如果删除字段
alter table CS.TG drop column LINE2_TYPE;
直接删除会报错SQLSTATE=55019
需要db2 reorg table CS.TG一下再执行上述语句。

--最好每条ALTER TABLE对应一个REORG(包括建索引)

5、FETCH FIRST 1 ROW ONLY

6、sql 执行顺序
SQL语句执行的顺序
1. FROM
2. JOIN ON
3. WHERE
4. GROUP BY
5. HAVING
6. SELECT
7. ORDER BY
8. FETCH FIRST


7--实例
DB2 实例是执行 DB2 命令和函数所处的逻辑上下文。可以把实例看作管理对数据库文件的访问权的服务或守护进程。一台服务器机器上可定义多个实例。每个实例相互独立,即所有实例都可单独管理、操作和调优。 换句话说,实例可以理解为数据库的容器,同时它管理着属于它的数据库。

8--列出db2表空间的详细信息
db2 list tablespaces show detail
根据类型分表空间氛围系统管理表空间(即操作系统管理)和数据库管理表空间(即数据库自己管理)
系统管理表空间不允许常规表空间,索引表空间,大数据表空间分开存储;
数据管理表空间可以为常规表,索引,大数据 分开存储
数据管理表空间要比系统管理表空间 存储的上限要大,i/o 也好


9--查看表结构
db2 describe table xxx
10 --db2下截断表
db2 truncate table xxx immediate;
删除数据的同时也会删除索引

11-锁表(锁等待超时) 不同于死锁,锁表的处理需要特殊处理
db2-911错(有死锁,当前工作单元已经回滚)

12-子查询什么时候 先外部查询,拿外部查询的值带入内部查询,
子查询什么时候先内部查询,拿内部查询的值带入外部查询
使用exits函数时先执行外部查询,再执行内部子查询
使用in函数时先执行内部子查询,再执行外部查询,
使用 = 子查询为单个值时,先执行内部查询再执行外部查询,
内部和外部的查询结果集的大小,对于选用什么样的函数很重要

13 union all 使用必须是2个结果集,不能是2个表连接直接union all,可以,使用虚表包裹表连接数据

14 -locate 函数 返回第一个参数在第二个参数中的位置
select * from sys_units where locate('906009999',unitseq) >0

15-distinct
加一个字段的时候表示 该字段除去重复的值,如果像distinct a,b这种写法 不会报语法错误,但是
却失去了出去重复值的效果

16-inner join ,left join
显示的使用连接命令时一定要注意 on 后面除了可以跟关联条件,可以跟次表的过滤条



left join 如果左表和右表关联 按关联条件有数据的则都2个表数据都显示
如果按关联条件右表无数据的,则左表也显示

例如:该结果
select * from (
( values (1,'a'),(2,'b'),(3,'c') ) as emp(name,dept)
left join
( values ('a','市场部'),('b','销售部'),('c','研发部') ) as dept(deptno,deptname)
on emp.dept = dept.deptno and deptname ='ss'
)

---full join 2个关联的表都是主表
select * from (
( values (1,'a'),(2,'b'),(3,'c') ) as emp(name,dept)
full join
( values ('a','市场部'),('d','销售部'),('c','研发部') ) as dept(deptno,deptname)
on emp.dept = dept.deptno
)


17-db2 编目是 记录 db2数据库对象信息数据结构的表。

18-定义游标 (db2 应用开发教程里面有详细说明)
DECLARE CURSOR 为游标指定一个名字和SELECT 语句,语法如下:
EXEC SQL
DECLARE cursor-name CURSOR FOR
SELECT column-name-list
FROM table-name
WHERE search-condition
FOR UPDATE OF column-name
END-EXEC.
上面给出的只是十分简单的 SELECT 语句,实际你可以使用各种复杂的SELECT 语句定
义游标。如果你想读取的同时更新某些记录,就要使用FOR UPDATE OF 子句,把需要更
新的列名列出来,这样在打开游标时,DB2 会在符合条件的记录上加更新锁,防止其他程
序同时对这些记录进行更新造成数据错乱

19 --db2 rank() over (partition by xx over by xx)
注意使用rank 进行排序 如果 指定排序的列 相同 则排序后的序号是一样的,直到下一个不一样的情况
例如:
1,1,1,4,4,6

20 -- alter table ACRM_F_INDIV_BONDSMAN alter column BONDSMAN_ID set data type varchar(200);


21- -db2 截断
trunc(to_date('20140626','yyyymmdd'),'Q')
取当前季的第一天
trunc(to_date('20140626','yyyymmdd'),'Q') -1 days 取上个季的最后一天

22--添加表分区
alter table ACRM_M_INDIV_CONTRB add partition part0531 STARTING '2014-05-31' INCLUSIVE ENDING '2014-05-31' inclusive

23--使用虚表显示时间
select current date from (values(''));

24--查看错误码对应的错误信息--举例
db2 ? sql433

25--函数COALESCE 与 NVL的区别
COALESCE返回第一个非空值...
NVL把空值转换成指定的值...

26--db2 新建表时注意表明和模式名最好是大写,不要带有双引号,如果数据库的表空间很多,还要指定对应的表空间。

27 ---case 多种使用方式
case xxx when '01' then 'A '
when '02' then 'B'
end as xx
case when 表达式xx then xx else xx end
case when 表达式 then xx
when 表达式 then xx
end as xx
28 --查看数据表索引
db2 "select TABNAME, COLNAMES from syscat.indexes WHERE TABNAME='xx'"

29--使用date()函数
select date('2014-01-01') from (values(''))
注:需要加短线,否则报错

相关文档