SQL四种语句类型:
1.数据定义语言 (DDL)
定义数据对象的属性。
例如. CREATE, ALTER, DROP, TRANSFER OWNERSHIP。
2.数据管理语言 (DML)
用来返回,添加,编辑和删除数据。
例如. SELECT, INSERT, UPDATE, DELETE。
3.数据控制语言 (DCL)
控制数据库和数据对象的访问。
例如. GRANT, REVOKE。
4.事务控制语言 (TCL)
将一组DML语句组合到事务中来集中地应用到一个数据库或者因为错误而处于未完成的状态。
例如. COMMIT, ROLLBACK, SAVEPOINT。
DB2与ORACLE语法对比
1.取前N条记录
Oracle:select * from tablename where rownum <= N;
DB2:select * from tablename fetch first N rows only;
2.取得系统时间
Oracle:Select sysdate from dual;
DB2:Select current timestamp from sysibm.sysdummy1;
Select current timestamp from sysibm.dual;
3.空值转换
Oracle:Select loginname, nvl(cur_rate,'0') from TableName;
DB2:Select loginname, nvl(nullif(cur_rate,’ ’),’0’) from TableName; (DB2v9.5以后已经支持)
4.隐性转换
Oracle: select 'abc' from dual where '1'=1 ;
DB2: select ‘abc’ from sysibm.dual where ‘1’=1;(DB2客户机9.5以前的不支持隐性转换)
5.数据类型转换函数
转换形式 ORACLE DB2 DB2兼容写法
整型转字符型 to_char(1) char(1) cast(1 as char)
字符串转整型 to_number('1') int(‘1’)、dec('1') cast('1' as int)
字符串转浮点型 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’);
系统时间:current timestamp带有时分秒;current date
字符串转时间戳
oracle: to_date('2007-04-26 08:08:08','YYYY-MM-DD HH24:MI:SS’)
db2:to_date('2007-04-26 08:08:08','YYYY-MM-DD HH24: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(current timestamp),month(current timestamp),day(current timestamp),hour(current timestamp),minute(current timestamp),second(current timestamp),microsecond(current timestamp);只取年月日date(current timestamp),取时分秒time(current timestamp)。字符串转换为时间timestamp(‘2012-10-20 12:00:00’),date(‘2012-10-20’),date(‘10/20/2002’),time(‘12:00:00’)。
7.快速清空大表
Oracle:truncate table tableName;
DB2:alter table tableName activate not logged initially with empty table;
8.创建类似的表
Oracle:create table a as select * from tableName;
DB2: create table a like tableName 或create table a as(select * from hh_app.a) definition only in tbs_hh;
9.插入数据(insert)
DB2:insert into a values(1,’tt’),(2,’bb’);
10.更新数据(update)
Oracle:update a set a=100,b=200;
DB2:update a set (a,b)=(100,200); update a set a=100,b=200
DB2常用视图
1.查询当前用户有N张表
select count(*) from sysibm.SYSTABLES where creator='APP_D'
2.查询当前DB2的版本
select * from sysibm.sysvERSIONS
3.查询TABLESPACE的状况
select * from sysibm.SYSTABLESPACES
4.查询DB2的数据类型
select * from sysibm.SYSDATATYPES
5.查询BUFFERPOOLS状况
select * from sysibm.SYSBUFFERPOOLS
6.查看表的约束
select * from SYSCAT.CHECKS WHERE TABNAME=‘AAA'
7.查询DB2分区
select * from syscat.DATAPARTITIONS
8.查看数据库的存储过程
select * from SYSCAT.PROCEDURES
9.查询SEQUENCE的状况
select * from sysibm.SYSSEQUENCES
1.数据定义语言 (DDL)
定义数据对象的属性。
例如. CREATE, ALTER, DROP, TRANSFER OWNERSHIP。
2.数据管理语言 (DML)
用来返回,添加,编辑和删除数据。
例如. SELECT, INSERT, UPDATE, DELETE。
3.数据控制语言 (DCL)
控制数据库和数据对象的访问。
例如. GRANT, REVOKE。
4.事务控制语言 (TCL)
将一组DML语句组合到事务中来集中地应用到一个数据库或者因为错误而处于未完成的状态。
例如. COMMIT, ROLLBACK, SAVEPOINT。
DB2与ORACLE语法对比
1.取前N条记录
Oracle:select * from tablename where rownum <= N;
DB2:select * from tablename fetch first N rows only;
2.取得系统时间
Oracle:Select sysdate from dual;
DB2:Select current timestamp from sysibm.sysdummy1;
Select current timestamp from sysibm.dual;
3.空值转换
Oracle:Select loginname, nvl(cur_rate,'0') from TableName;
DB2:Select loginname, nvl(nullif(cur_rate,’ ’),’0’) from TableName; (DB2v9.5以后已经支持)
4.隐性转换
Oracle: select 'abc' from dual where '1'=1 ;
DB2: select ‘abc’ from sysibm.dual where ‘1’=1;(DB2客户机9.5以前的不支持隐性转换)
5.数据类型转换函数
转换形式 ORACLE DB2 DB2兼容写法
整型转字符型 to_char(1) char(1) cast(1 as char)
字符串转整型 to_number('1') int(‘1’)、dec('1') cast('1' as int)
字符串转浮点型 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’);
系统时间:current timestamp带有时分秒;current date
字符串转时间戳
oracle: to_date('2007-04-26 08:08:08','YYYY-MM-DD HH24:MI:SS’)
db2:to_date('2007-04-26 08:08:08','YYYY-MM-DD HH24: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(current timestamp),month(current timestamp),day(current timestamp),hour(current timestamp),minute(current timestamp),second(current timestamp),microsecond(current timestamp);只取年月日date(current timestamp),取时分秒time(current timestamp)。字符串转换为时间timestamp(‘2012-10-20 12:00:00’),date(‘2012-10-20’),date(‘10/20/2002’),time(‘12:00:00’)。
7.快速清空大表
Oracle:truncate table tableName;
DB2:alter table tableName activate not logged initially with empty table;
8.创建类似的表
Oracle:create table a as select * from tableName;
DB2: create table a like tableName 或create table a as(select * from hh_app.a) definition only in tbs_hh;
9.插入数据(insert)
DB2:insert into a values(1,’tt’),(2,’bb’);
10.更新数据(update)
Oracle:update a set a=100,b=200;
DB2:update a set (a,b)=(100,200); update a set a=100,b=200
DB2常用视图
1.查询当前用户有N张表
select count(*) from sysibm.SYSTABLES where creator='APP_D'
2.查询当前DB2的版本
select * from sysibm.sysvERSIONS
3.查询TABLESPACE的状况
select * from sysibm.SYSTABLESPACES
4.查询DB2的数据类型
select * from sysibm.SYSDATATYPES
5.查询BUFFERPOOLS状况
select * from sysibm.SYSBUFFERPOOLS
6.查看表的约束
select * from SYSCAT.CHECKS WHERE TABNAME=‘AAA'
7.查询DB2分区
select * from syscat.DATAPARTITIONS
8.查看数据库的存储过程
select * from SYSCAT.PROCEDURES
9.查询SEQUENCE的状况
select * from sysibm.SYSSEQUENCES