wofangfan 2013-06-03
SQL四种语句类型:
1.数据定义语言(DDL)
定义数据对象的属性。
例如.CREATE,ALTER,DROP,TRANSFEROWNERSHIP。
2.数据管理语言(DML)
用来返回,添加,编辑和删除数据。
例如.SELECT,INSERT,UPDATE,DELETE。
3.数据控制语言(DCL)
控制数据库和数据对象的访问。
例如.GRANT,REVOKE。
4.事务控制语言(TCL)
将一组DML语句组合到事务中来集中地应用到一个数据库或者因为错误而处于未完成的状态。
例如.COMMIT,ROLLBACK,SAVEPOINT。
DB2与ORACLE语法对比
1.取前N条记录
Oracle:select*fromtablenamewhererownum<=N;
DB2:select*fromtablenamefetchfirstNrowsonly;
2.取得系统时间
Oracle:Selectsysdatefromdual;
DB2:Selectcurrenttimestampfromsysibm.sysdummy1;
Selectcurrenttimestampfromsysibm.dual;
3.空值转换
Oracle:Selectloginname,nvl(cur_rate,'0')fromTableName;
DB2:Selectloginname,nvl(nullif(cur_rate,’’),’0’)fromTableName;(DB2v9.5以后已经支持)
4.隐性转换
Oracle:select'abc'fromdualwhere'1'=1;
DB2:select‘abc’fromsysibm.dualwhere‘1’=1;(DB2客户机9.5以前的不支持隐性转换)
5.数据类型转换函数
转换形式ORACLEDB2DB2兼容写法
整型转字符型to_char(1)char(1)cast(1aschar)
字符串转整型to_number('1')int(‘1’)、dec('1')cast('1'asint)
字符串转浮点型to_number('1.1')Double(‘1.1’)
浮点型转字符串to_char(1.1)char(1.1)
字符串转日期
oracle:to_date('2007-04-26','yyyy-mm-dd')
db2:date(‘2007-04-26’)、to_date('2007-04-26','yyyy-mm-dd')
日期转字符串
oracle:to_char(to_date(‘2007-04-29’,‘yyyy-mm-dd’),‘yyyy-mm-dd’),系统时间:sysdate
db2:char(date('2007-04-29'));
char(to_date(‘2007-04-26’,‘yyyy-mm-dd’))他会产生时分;to_char(to_date(‘2007-04-26’,‘yyyy-mm-dd’),‘yyyy-mm-dd’);
系统时间:currenttimestamp带有时分秒;currentdate
字符串转时间戳
oracle:to_date('2007-04-2608:08:08','YYYY-MM-DDHH24:MI:SS’)
db2:to_date('2007-04-2608:08:08','YYYY-MM-DDHH24:MI:SS')
6.取日期类型函数
Oracle:取年、月、日用:to_char(sysdate,’YYYY’),to_char(sysdate,’MM’),to_char(sysdate,’DD’)取得;只取年月日trunc(sysdate);取时分秒to_char(sysdate,’HH24:MI:SS’)。
DB2:取年、月、日用:year(currenttimestamp),month(currenttimestamp),day(currenttimestamp),hour(currenttimestamp),minute(currenttimestamp),second(currenttimestamp),microsecond(currenttimestamp);只取年月日date(currenttimestamp),取时分秒time(currenttimestamp)。字符串转换为时间timestamp(‘2012-10-2012:00:00’),date(‘2012-10-20’),date(‘10/20/2002’),time(‘12:00:00’)。
7.快速清空大表
Oracle:truncatetabletableName;
DB2:altertabletableNameactivatenotloggedinitiallywithemptytable;
8.创建类似的表
Oracle:createtableaasselect*fromtableName;
DB2:createtablealiketableName或createtableaas(select*fromhh_app.a)definitiononlyintbs_hh;
9.插入数据(insert)
DB2:insertintoavalues(1,’tt’),(2,’bb’);
10.更新数据(update)
Oracle:updateaseta=100,b=200;
DB2:updateaset(a,b)=(100,200);updateaseta=100,b=200
DB2常用视图
1.查询当前用户有N张表
selectcount(*)fromsysibm.SYSTABLESwherecreator='APP_D'
2.查询当前DB2的版本
select*fromsysibm.sysvERSIONS
3.查询TABLESPACE的状况
select*fromsysibm.SYSTABLESPACES
4.查询DB2的数据类型
select*fromsysibm.SYSDATATYPES
5.查询BUFFERPOOLS状况
select*fromsysibm.SYSBUFFERPOOLS
6.查看表的约束
select*fromSYSCAT.CHECKSWHERETABNAME=‘AAA'
7.查询DB2分区
select*fromsyscat.DATAPARTITIONS
8.查看数据库的存储过程
select*fromSYSCAT.PROCEDURES
9.查询SEQUENCE的状况
select*fromsysibm.SYSSEQUENCES