-------提取前n条记录
--sql server:
select top n * from tbnm
--oracle:
select * from tbnm where rownum <= n
--db2:
select * from tbnm fetch first n rows only
-------取当前日期
--sql server:
select getdate()
--oracle:
select sysdate from dual
--db2:
select current timestamp from sysibm.sysdummy1
-------连接字符串
--sql server:
select hello+toone
--oracle:
select hello||toone from dual
--db2:
select hello||toone from sysimb.sysdummy1
-------空值转换
--sql server:
select userid,username,isnull(email,0) from auth_user
--oracle:
select userid,username,nvl(email,0) from auth_user
--db2:
select userid,username,value(email,0) from auth_user
-------类型转换
--sel server:
select convert(varchar,getdate(),20)
--数据类型改变参数:int varchar
--oracle:
select to_char(sysdate,yyyy-mm-dd hh24:mi:ss) from dual
--数据类型改变函数:to_char(),to_date(),to_number()
--db2:
select varchar(current timeestamp) from sysibm.sysdummy1
--current timeestamp ; current date ; current time
--数据类型改变函数:varchar(),int(),date(),time()
--------取值判断
--sql server:
select case convert = case when g.master_type = system then 管理员 when g.master_type = roletype then 特殊角色 else 普通用户 end from global_code g
--oracle:
select case g.master_type when system then 管理员 when roletype then 特殊角色 else 普通用户 end as caseConvert from global_code g
--db2:
select case g.master_type when system then 管理员 when roletype then 特殊角色 else 普通用户 end as caseConvert from global_code g
--------位置sql
--sql server:
select charindex(E,ABCDEF) select patindex(%E%,ABCDEF)
--oracle:
select instr(ABCDEF,E) from dual
--db2:
select locate(E,ABCDEF) from sysibm.sysdummy1
---------字符串截取函数
--sql server:
--left(), right(), substring(), substring_index()
--从左截取
left(str,length)
--从右截取
right(str,length)
--任意位置截取
substring(str,startindex,length) --startindex可以位负数表示倒数 length参数不存在时表示直到结束
--根据某字符截取
substring_index(str,aimchar,count) --截取字符串中第count个aimchar字符后的部分,count位负数表示倒数,aimchar在字符串中不存在则返回整个字符串
--oracle
substr(col,startindex,endindex) --startindex,endindex可以为负数,endindex不存在时表示直到结束
--db2
--从左截取
left(str,length)
--从右截取
right(str,length)
--任意位置截取
substr(col,startindex,endindex) --startindex,endindex可以为负数,endindex不存在时表示直到结束
--------其他函数
--sql server:
长度;len()
取子串:substring()
--oracle:
长度:length()
取子串:substr()
--db2:
长度:length()
取子串:substr()
--oracle查看当前用户下有什么对象(表、视图、同义词、快照)
select * from tab
------------查看表结构
describe tbname
--sql server
sp_help tbname
------------自增
--sql server 有个自动递增 identity 属性
create table tabname(id int identity(1,1) not null)
--oracle 通过序列实现自增 序列+触发器
--创建序列
create sequence sqname
increment by 1
start with 1
maxvalue 999999
nocycle;
--插入数据
insert into tabname values(sqname.nexval,col1val1,colval2,..)
--可在表中创建触发器触发序列实现自增
create or replace trigger trigname
before insert on tabname
for each row
declare
nextid number;
begin
if :new.colid is null or :new.colid=0
select sqname.nextval
into nextid
from dyd.dual;
:new.colid:=nextid;
end if;
end trigname;
---oracle查询当前用户下所有表的主键信息
SELECT
cu.*
FROM
user_cons_columns cu,
user_constraints au
WHERE
cu.constraint_name = au.constraint_name
AND au.constraint_type = 'P'
AND au.table_name IN
(
SELECT
tb.table_name
FROM
user_tab_comments tb
WHERE
tb.table_name LIKE 'T_%');
---------db2数据库常用命令
--服务器上创建数据库
db2 create db dbname
--服务器上删除数据库
db2 drop db dbname
--创建表空间
db2 "create user temporary tablespace userspace1 managed by system using(userspace1)"
--启动数据库
su -db2inst1
db2start
--关闭数据库
su -dbb2inst1
db2stop [force]
--创建远程管理节点进入db2命令窗口
db2 catalog tcpip node asnode remote 10.1.22.176 server 50000
db2 catalog db oadb2 at node asnode
--链接数据库
db2 connect to oadb2 user db2inst1 usering ibmdb2
--关闭数据库链接
db2 terminate
--执行脚本
db2 -td! -vf ioa2.db2 -z info.log
--导出脚本
db2look -d oadb2 -i db2inst1 -w ibmdb2 -e -o putsql.db2 -t auth_user
db2look -d oadb2 -i db2inst1 -w ibmdb2 -e -o putsq.db2
--查看正在使用的端口
netstat -a
--查询系统表
select count(*) from syscat.tables where tabschema='db2inst1' select count(*) from syscat.procedures where procschema='db2inst1'
-------数据库存储结构的区别
数据库由许多数据文件组成,在逻辑上则时有许多表空间组成。一个表空间则可以对应多个数据文件。在表空间内的数据库,根据用户不同,分为许多不同的模式,每个模式内包含有表,索引等对象。每个对象对应到一个段,段由许多个不移定连续的数据块组成。要控制数据库的大小,可以通过数据文件和表空间的大小来控制,要控制表的大小,可以通过表空间可用区域的数量和大小,可以设置将表创建在那个表空间如同sql中设置表存在哪个文件组来对表存在的位置的控制。要处理I/O频繁的文件查询速变慢等问题,则通过数据块和pcttree处理。
sql server中,没有表空间的概念,但是与表空间对应的概念是文件组。sql server也没有段的概念,sql server的页大概可以与oracle中的块对应。sql server也有区,他是分配磁盘空间的单元。因为,每一个区至少包含一个表或索引的内容,单它的区的大小时固定的64kb,页也是固定的8kb.而oracle中的区的大小不是固定的,而且每个块的大小,依据操作系统的不同而不同。
oracle的操作包含两大部分,第一个是数据库,第二个是实例。所谓oracle实例可以看成sql server的mssqlserver服务,只要sql server的服务启动,那么所有的数据库就可以使用,而实例只要被启动,则特定的数据库就可以运用。每个数据库都有自己的实例。
oracle的是存储结构:
一个表控件只能属于一个数据库;每个数据库至少有一个控制文件;每个数据库最少有一个表空间(system表空间);每个数据库最少有两个联机日志组,每组最少一个联机日志文件;一个数据文件只能属于一个表空间;一个数据文件一旦被加入到一个表空间中,就不能再从这个表空间中移走,也不能再入到其他的表空间中;建立新的表空间需要建立新的数据文件;一个段segment只能属于一个表空间,但可以属于多个数据文件;一个区extent只能属于一个数据文件,即区间不能跨越数据文件;commit后,数据不一定立即写盘(数据文件);一个事务即使不被提交,也会被写入到重做日志中。