SQL Server、Oracle、DB2数据库的区别

-------提取前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:
 长度;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后,数据不一定立即写盘(数据文件);一个事务即使不被提交,也会被写入到重做日志中。            

猜你喜欢

转载自blog.csdn.net/qq_31942585/article/details/81774154