SQLServer,Oracle,DB2数据库SQL语句比较

合集下载

关系型数据库管理系统SQL Server和DB2之比较

关系型数据库管理系统SQL Server和DB2之比较

理或混合在 线分析处理分割 、 分布式分割单 元 、 持续计算 和预制缓 存等
特性 , 极大地提升了其分析 服务器 的可伸缩性 。而在 D 2 B 中早已经使用
了 S ae — ohn hrd N tig构架 以有效允许 数据库 增长超 出单 台服务 器 的功能
N 等等 。同时也支持多种硬件 平台 , T 包括 I M大型机 、C服务器等 。 B P 最 适用于海量数据处理, 并且可跨平 台等等 。这些优点使 D 2 B 在企业级 的
Widw 客户 . no s 可以用 AD D O, L DB OD C连接 ; D 2跨 平 台 , O, A 0 E , B 而 B 多层次结构 。 支持 O B J B D C,D C等客户。
据 库管理 系统 。新版的 S L e e 的可用性得 到进一 步提高 , Q rr Sv 安全性得
关 系型数据库 管理 系统 S LSre 和 D 2之 比较 Q evr B
袁 开艳 , 静 罗
( 九江学 院电子工程学 院, 江西九江 ,3 0 5 32 0 )
摘 要 :对 比研 究 了 S LS ̄e 数 据 库 和 D 2数据 库 两种 关 系型 数 据 库 管 理 系统 。 Q e r B 指
0 ,o , M/ MS V E, S2以及 U i s4 o V E , S 0 , nx环境 中的 HP U — X客户 杌胡匣 务器
定风险。D 2长期在大型企业 中得 到广泛应用 , B 经过无数次的验证 , 风
险小且向下兼容性好 。而 D 2的软件开发实验室早在 19 B 9 4年便 已经通 过了 1O 90 S 0 0国际质量管理标准 的验 证与认可 ,因而其软件可靠性较 高, 故障率低 。 可伸缩性及并行性方面 ,Q re 并行实施 和共存模型 不很成熟 , S LS v r e 很难处理 1 3益增多的用户数 和数据卷 ,伸缩性 有限 ;但新 版本 的 S L Q ev 增 Sr r 加了商业智能使其能并行分割处理 ,创建远 程关 系在线分析处 e

SQLServer与ORACLE数据库实现子查询方法比较

SQLServer与ORACLE数据库实现子查询方法比较

SQL Server和ORACLE数据库实现子查询方法比较内容摘要数据库查询都是通过SELECT语句来完成的,子查询就是在一个SELECT语句中嵌套另一个SELECT语句,通过子查询的嵌套可以实现复杂的数据查询功能。

通过具体实例,研究比较SQL Server数据库和ORACLE数据库实现子查询方法的异同点,对深入理解和实际应用数据库子查询大有裨益。

在SQL Server和ORACLE数据库中,数据查询都是通过SELECT语句来完成的,SELECT语法提供了强大的查询操作能力,可以查询一个表或多个表。

甚至可以在一个SELECT语句中嵌套另一个SELECT语句,即进行子查询,但子查询比较难以理解,本文对此问题加以研究,并对SQL Server数据库和ORACLE数据库实现子查询的方法进行比较。

1 SQL Server 数据库实现子查询功能在SQL Server中,子查询是可以嵌套在外部SELECT、INSERT、UPDATE或DELETE语句的WHERE或HA VING子句内,或者其他子查询中的查询。

任何允许使用表达式的地方都可以使用子查询。

SQL Server2005中允许高达32层嵌套,使用表达式的地方都可以使用子查询。

SQL Server查询语句基本格式如下:Select select_list[into new_table]From table_source[where search_condition][group by [all] group_by_expression [,…n] [with {cube | rollup}][having search_condition][order by order_expression] [asc | desc]子查询语句的写法必须按照标准查询语言的格式进行。

1.1SQL Server 子查询语句子查询分为多行子查询与单值子查询。

前者在通过IN 或由ANY 或ALL修改的比较运算符引入的列表上操作和通过EXISTS引入的存在测试;后者通过未修改的比较运算符引入返回单个值。

sqlserver与oracle的区别

sqlserver与oracle的区别

sqlserver与oracle的区别SQL server 与Oracle开发比较本文档主要从oracle与sql server语法上进行差异性比较,诸如两者在管理,性能,优化等方面的差异不作比较。

●概念上区别1.Oracle是一种对象关系数据库管理系统(ORD BMS),而Sql serve r 只是关系型数据库管理系统(RDBMS).2.Oracle使用Internet文件系统,该系统基于Java的应用程序,可以使数据库基于成为Internet的开发平台;Sql se rver 是基于windows3.Orace主要的三类文件是:数据文件,控制文件,恢复日志文件Sql se rver: 主要数据文件(必须有且只能有一个),次要数据文件以及日志文件4.两者支持的命令类别差不多,数据定义语言,数据操纵语言,事务处理控制语言,数据控制语言.在Oracle中,在事务控制语言中除了commit,rollback等还多了一个Savepoint,设置保存点。

5.oracle sql的扩展叫PL/SQL,主要的结构化查询工具有sql*plus,isql*plus, pl/sql等Ms sql的扩展叫Transact-SQL,主要的结构化查询工具就是自带的查询分析器6.主要数据类型Orace:主要支持cha r ,va rchar2,lo ng,number,date time,ra w,lo ng ra w,clob,blob,bfie前面三个是Cha racter数据类型,varchar2支持可变长度的字符串,long支持可变长度的字符数据,ra w,long ra w用于存储二进制数据,lo ng ra w 可变长度最后三个是大对象(lob)数据类型,存储非结构化的信息,例如声音剪辑,视频文件CLOG表示Character Lob,可以存储大量的字符数据,它对于存储非结构化的XML文档非常有用。

BLOG表示Bina ry LOG,此数据类型可以存储大型二进制对象,如图形、视频剪辑,声音文件等支不支持,money,货币Sql se rver 主要支持的文本类型cha r ,va rchar,nchar,nvarchar,te xt,nte xt,image,货币类型Money,二进制binary,va rbina ry等等●开发语法A.SQL 语法两者的SQL语法基本上是相同的,只是一些细节方面的问题一:表的管理:修改表的结构,如增加,删除列,創建表修改表1.修改表的列的數據類型,大小的定義不同,如下面修改數據類型。

OraclegDbvSqlServer性能对比(用数据说话)

OraclegDbvSqlServer性能对比(用数据说话)

Oracle10g、Db2v9.5、SqlServer2000性能对比(用数据说话)1.后台调用存储过程性能对比表:提交一次相比,oracle性能相差不大,但db2、sqlserver性能相差比较大(除sqlserver删除的性能有所下降外)。

结论:1.java向oracle,db2,sqlserver插入10000行数据后提交数据,与每插入1行数据提交一次的性能对比,oracle性能最少提高3倍、db2性能最少提高6倍,sqlserver性能最少提高5倍,如果批量处理与批量提交对比,oracle性能最少提高25倍,db2性能最少提高25倍,sqlserver性能提高很小。

2.java向oracle,db2,sqlserver插入10000行数据后提交数据,与每插入1行数据提交一次的性能对比,oracle的性能最高。

3.java向oracle,db2,sqlserver更新10000行数据后提交数据,与每更新1行数据提交一次的性能对比,oracle性能最少提高13倍、db2性能降低1.4倍,sqlserver性能最少提高1.4倍,如果批量处理与批量提交对比,oracle性能最少提高2倍,db2性能最少提高1.3倍,sqlserver性能提高有所降低。

4.java向oracle,db2,sqlserver更新10000行数据后提交数据,与每更新1行数据提交一次的性能对比,oracle的性能最高5.java向oracle,db2,sqlserver删除10000行数据后提交数据,与每删除1行数据提交一次的性能对比,oracle性能最少提高16倍、db2性能降低1.6倍,sqlserver性能最少提高1.6倍,如果批量处理与批量提交对比,oracle性能最少提高2.8倍,db2性能最少提高1.3倍,sqlserver性能最少提高1.2。

6.java向oracle,db2,sqlserver删除10000行数据后提交数据,与每删除1行数据提交一次的性能对比,oracle的性能最高总结:后台相对于前台性能对比如下:1.批量插入操作,oracle、db2性能差不多,sqlserver有所提高。

Oracle与SQLServer的SQL语法差异总结

Oracle与SQLServer的SQL语法差异总结
Oracle与SQL Server应用差异对比分析
项目
Oracle 10g
SQLServer 2008
备注
存储过程格式
CREATEORREPLACEPROCEDURE存储过程名(参数列表) IS
Begin
---存储过程内容
End存储过程名;
CREATEPROCEDURE存储过程名(参数列表) AS
--存储过程内容
From person
2、流控制语句
流控制与表达式结构很相似,只是结果表达式换成语句块
Case表达式when匹配表达式then {语句块1} else {语句块2} end case;
Eg:
case v_name
when‘张三’then
v_number := 1;
when‘李四’then
v_number:=2;
Eg:
Set @result =‘abcd’
2、通过SQL语句赋值
Select变量=表达式from表
Eg:
Select @code=code,@name=name from sysc01 where id = 1000
语句结束符
SQL语句使用分号;作为语句的结束
SQL语句不需要加分号;作为结束符(加也可)
3、动态存储过程(带入、出参)
Eg:
DECLARE@resultVARCHAR(50);
DECLARE@sqlNVARCHAR(1000);
DECLARE@paraNVARCHAR(200);
SET@sql='p_test @code,@name,@result output'
SET@para='@code varchar(10),@name varchar(10),@result varchar(50) output'

db2与oracle差别

db2与oracle差别

db2与oracle差别1:并发机制Oracle的默认隔离级是快照(Snapshot),写入事务可不能堵塞读取事务,读取事务能够猎取当前已提交值。

DB2默认是游标稳固性(Cursor Stability),写入事务会堵塞读取事务。

2: 数据类型数据库的核心是数据,类型不匹配或者语义的不同都会阻碍应用是否能够同时在两种数据库中运行。

Oracle支持一些非SQL标准的数据类型,例如VARCHAR2,这些是不被D B2支持的;另外,Oracle中的日期、时刻格式和DB2中相应类型在语义上不完全一致;最后Oracle的PL/SQL储备过程所支持的一些标量数据类型在DB2中需要被映射才能被识别。

如右:3: 隐式类型转换Oracle使用弱类型转换,而DB2使用强类型转换。

隐式类型转换能完成一种类型向另外一种类型的自动转换,关于不匹配的类型,假如数据类型能被合明白得释,比较或者赋值时能够执行隐式类型转换;强类型转换规则,意味着字符串和数字类型之间不能直截了当进行比较,除非显式转换。

4:SQL方言DB2传统上坚持对SQL标准的支持,但Oracle实现了专门多方言。

例如:CONNEC T BY 递归语句、(+)连接操作符、DUAL表、ROWNUM伪列、ROWID伪列、MINUS 操作符、SELECT INTO FOR UPDATE语句、TRUNCATE TABLE等。

假如要在DB2数据库上运行使用了上述方言的应用,就需要进行代码级别的翻译,工作量较大。

5:PL/SQL语言就储备过程和函数开发而言,DB2使用SQL PL语言来开发,Oracle使用PL/SQL 语言来开发。

SQL PL和PL/SQL差异庞大,这也是从Oracle到DB2转型最大的工作量所在。

6:内置包为了方便应用程序开发的需要,Oracle数据库提供了专门多内置包:DBMS_OUTPUT、DBMS_SQL、DBMS_ALERT、DBMS_PIPE、DBMS_JOB、DBMS_LOB、DBMS_UTI LITY、UTL_FILE、UTL_MAIL和UTL_SMTP等。

oracle与SQL_SEVER的语法区别

oracle与SQL_SEVER的语法区别
整数类型 INTEGER INT 同为整数类型,存储大小都为4个字节
浮点数类型 FLOAT FLOAT
实数类型 REAL REAL
ORACLE内部函数大全以及与SQLSERVER的区别:
下面是Oracle支持的字符函数和它们的Microsoft SQL Server等价函数。
ORACLE和SQL语法区别归纳
数据类型比较
类型名称
Oracle
SQLServer比较
字符数据类型 CHAR CHAR 都是固定长度字符资料但oracle里面最大度为2kb,SQLServer里面最大长度为8kb
变长字符数据类型 VARCHAR2 VARCHAR Oracle里面最大长度为4kb,SQLServer里面最大长度为8kb
WHEN 'B+' THEN 3.3
WHEN 'B-' THEN 2.7
WHEN 'C' THEN 2
WHEN 'C+' THEN 2.3
WHEN 'C-' THEN 1.7
WHEN 'D' THEN 1
WHEN 'D+' THEN 1.3
WHEN 'D-' THEN 0.7
ELSE 0
列表中最小的字符串 LEAST --------------------N/A
如果为NULL则转换字串 NVL-------------------- ISNULL
日期函数
下面是Oracle支持的日期函数和它们的Microsoft SQL Server等价函数。
函数 Oracle --------------------Microsoft SQL Server

SqlServer和Oracle,db2的区别

SqlServer和Oracle,db2的区别

SqlServer和Oracle,db2的区别1.开放性:SQL Server 只能在windows 上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。

Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。

而且windows平台的可靠性,安全性和伸缩性是非常有限的。

它不象unix那样久经考验,尤其是在处理大数据量的关键业务时.Oracle 能在所有主流平台上运行(包括 windows)。

完全支持所有的工业标准。

采用完全开放策略。

可以使客户选择最适合的解决方案。

对开发商全力支持。

DB2 能在所有主流平台上运行(包括windows)。

最适于海量数据。

DB2在企业级的应用最为广泛,在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器,而国内到97年约占5%.2.可伸缩性,并行性SQL server DB2 并行实施和共存模型并不成熟。

很难处理日益增多的用户数和数据卷。

伸缩性有限。

Oracle 平行服务器通过使一组结点共享同一簇中的工作来扩展windownt的能力,提供高可用性和高伸缩性的簇的解决方案。

如果windowsNT不能满足需要, 用户可以把数据库移到UNIX中。

DB2 DB2具有很好的并行性。

DB2把数据库管理扩充到了并行的、多节点的环境. 数据库分区是数据库的一部分,包含自己的数据、索引、配置文件、和事务日志。

数据库分区有时被称为节点或数据库节点3.安全性SQL server 没有获得任何安全证书。

Oracle Server 获得最高认证级别的ISO标准认证。

DB2 获得最高认证级别的ISO标准认证。

4.性能SQL Server 多用户时性能不佳Oracle 性能最高,保持windowsNT下的TPC-D和TPC-C的世界记录。

DB2 适用于数据仓库和在线事物处理性能较高。

5.客户端支持及应用模式SQL Server C/S结构,只支持windows客户,可以用ADO,DAO,OLEDB ,ODBC连接.Oracle 多层次网络计算,支持多种工业标准,可以用ODBC, JDBC,OCI等网络客户连接DB2 跨平台,多层结构,支持ODBC,JDBC等客户6.操作简便SQL Server 操作简单,但只有图形界面.Oracle 较复杂, 同时提供GUI和命令行,在windowsNT和unix 下操作相同DB2 操作简单,同时提供GUI和命令行,在windowsNT和unix 下操作相同7.使用风险SQL server 完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。

Oracle和SQLServer的主要区别

Oracle和SQLServer的主要区别

ORACLE提供了7种备份机制,具有联机备份功能 Oracle的日志默认有3个,先写入1号日志,满了后再写入2号日志,2号满了再写 入3号日志,3号满了后Oracle将自动备分1号日志的内容,然后清空后写入新的 日志信息,且Oracle的日志有多路复用功能,我们可以为日志创建多个镜像,把 相同的日志信息同时写入多个日志文件中,这样可以防止磁盘损坏造成的数据丢
SQL Server可用涵数比比较少,而且名称、调用语法跟Oracle差别比较大。 SQL Server的初如花费比较少,而且Microsoft提供免费的SQL Server工具软 件。因此价格会比Oracle低很多。 SQL Server提供全图形界面操作,很少见到DOS窗口。它的企业管理器给用户 提供一个全图形界面的集成管理控制台来集中管理多个服务器,使用比较方 便,安装也比较简单。 Sql server 只是关系型数据库管理系统(RDBMS) Ms Sql Server的扩展叫Transact-SQL,主要的结构化查询工具就是自带的查 询分析器
SQL中的错误机制比较复杂,没有提供错误描述。
SQL只能是本机备份本机的数据库,无法联机备份,而且备份压缩很低,占用 了大量空间 SQL Server对每个数据库只能分配一个日志文件。且当日志填满后,日志将停 止工作,等待人工干预,而无法自动重用。
1.SQL Server中的数据类型比较简单,只有一些简单的基本数据类型,无法提 供事务操作。 2.SQL Server包含的数据类型比较少,无法定义结构体,数组,对象。 3.SQL Server无法定义流程机制,类型转换也极不方便,SQL Server中对游标 定义十分复杂,且当用户定义的多个游标同时打开时系统却只有一个游标变 量,这是SQL SERVER中一个严重的缺陷。 4.SQL Server在保存大文件时,是一次将整个大文件写入内存,然后在一次性 存到数据库里面,很容易引起内存溢出。

SQLServerMySqlOracle语法对比及区别

SQLServerMySqlOracle语法对比及区别

SQLServerMySqlOracle语法对⽐及区别操作SQLServer Oracle Mysql查看表结构exec sp_help 表名desc 表名在command window看desc 表名或 describe 表名或show columns from 表名;修改数据库名称exec sp_renamedb ‘旧数据库名’,’新数据库名’不详修改表名exec sp_rename ‘旧表明’,’新表明’rename 旧表名 to 新表名alter table 表名 rename to 新表名修改列名exec sp_rename ‘表.旧列名’,’新列名’alter table 表名 rename column 旧列名 to 新列名alter table test change column address address1 varchar(30)--修改表列名删除数据库drop database 数据库名不详Drop database添加表中⼀列alter table 表名 Add 列名数据库类型alter table 表明 add(列名数据类型) 或alter table 表名 Add 列名数据库类型alter table test add column name varchar(10); --添加表列删除表中⼀列alter table 表名 drop column 列名alter table 表名 drop column 列名alter table test drop column name;修改表现有列alter table 表名 alter column 列名新数据库类型⼤⼩alter table 表明 modify(列名数据类型)alter table test modify address char(10) --修改表列类型||alter table test change address address char(40)删除约束alter table 表名 drop constraint约束名完全⼀样添加主键约束alter table 表名add constraint 主键约束名primary key (列名)完全⼀样alter table 表明add primary key (列名)删除主键约束alter table 表名 drop primary key添加唯⼀约束alter table 表名add constraint 唯⼀约束名unique (列名)完全⼀样alter table 表名 add unique (列名)添加默认约束alter table 表名add constraint default (值) for 列名完全⼀样添加检查约束alter table 表名add constraint check (列名 > 10)完全⼀样添加外键约束alter table ⼦表add constraint 外键约束名foreign key(⼦表的列名) references 主表 (列名)on update cascade / on updateaction注意:默认和加 on update action 表⽰更新受限加on update cascade 表⽰更新不受限,多项操作时⽤逗号隔开完全⼀样添加索引约束alter table 表名 add index 索引名 (列名)添加普通索引:create index 索引名 ON 表名 (列名)添加唯⼀索引:create unique索引名 ON 表名 (列名)删除索引drop index 索引名 on 表名alter table 表名 drop index 索引名⾝份: exec sp_grantlog域名\密码’⾝份: exec sp_addlogin ‘登陆’,’密码’SET PASSWORD FOR'username'@'host'= PASSWORD('newpassword');数据库名⾝份: Exec域名密码’,’数据库⽤户名’⾝份: Exec sp_grantdbaccess登陆帐户’,’数据库⽤户名’create user HDEAM_TYMBidentified by ""default tablespace HDEAM_TYMBtemporary tablespace TEMPprofile DEFAULT;mysql>insert intoer(Host,User,Password,ssl_cipher,x509_issuer,x509_subject) values("localhost","pppadmin",password("passwd"),'','','');CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';CREATE USER 'pig'@'192.168.1.101_' IDENDIFIED BY'123456';CREATE USER 'pig'@'%' IDENTIFIED BY '123456';CREATE USER 'pig'@'%' IDENTIFIED BY '';CREATE USER 'pig'@'%';权限 [on 表明] to 数据库grant dba to HDEAM_TYMB with admin option;-- Grant/Revoke system privilegesgrant unlimited tablespace to HDEAM_TYMBwith admin option;“abc”;grant all privileges on phplampDB.* to phplamp@localhostidentified by '1234';mysql>flush privileges;权限 [on 表名] from 数据REVOKE SELECT ON*.* FROM'pig'@'%';数据库’drop user HDEAM_SBFF cascade;mysql>Delete FROM user Where User="phplamp" andHost="localhost";mysql>flush privileges;⾝份: exec sp_droplogin⾝份: exec sp_revokelogin 登分离数据库:数据库名附加数据库:数据库名,主数据⽂件路径’,⽇志⽂件路径’exp hdeam_product/d3B68Apk29v34Dj@orclfile=E:/tymb.dmp log=E:/tymb.logimp HDEAM_LHSH/HDEAM_LHSH@orcldevfile=E:\TYMBHDEAM_BAK_2013-03-25.dmpfull=Y;mysqldump -h localhost -u root -pmysql oa >d:\oa.sqlmysql -h localhost -u root -p jira<d:\jira.sql:Select *select * from表)Exec Sp_helpExecExec数据库名exec表名exec sp_helpindex注意: 下⾯都是通过( select * from 对象 ) 来查看信息触发器 user_triggers过程 user_procedures查看源代码 user_source查看数据库对象 user_objects查看错误信息 show errors查看索引信息 user_indexes查看分区索引 user_ind_partitions查看有关基于列创建的索引 user_ind_columns查看表空间 -- user_tablespaces查看所有数据库 show databases;查看库所有表 show tables;查看表结构和属性use information_schema;select * from columns where table_name=’表名’查看表源代码show create table 表名;查看存储过程源代show create procedure 过程名查看视图源代码show create procedure 过程名查看视图资代码show create VIEW 视图名查看表的索引show index from 表名查看表的索引show keys from 表明表储蓄过/空过程,函数,视图,表的源代码:对象名::查看序列 -- user_sequences查看同义词 -- user_ind_columns查看⽤户表信息 -- user_tables查看⽤户所有的表信息 user_all_tables查看表的索引show keys from 表明sysdate NOW()varchar2(20)不⼀定要指定具体列名必须指定具体列名标识的开始值, 标识种右)create sequence 序列名1.序列名.nextval 获取下⼀个序列的值2.序列名.currval 获取当前的序列的值: *.mdf =1 :*.ndf >=0 : *.log >=1数据⽂件: *.dbf >=1⽇志⽂件: *.log >=11位置开始查找t字符串(默认从1开始)从pos位置len获取字符串的长度把字符串全部转换成把字符串全部转换成清除左边的空格清楚右边的空格从左边返回指定长度的从右边返回指定长度将s t替换成字符串我的⾳乐我’)A我的⾳乐我的世界EFG2位置开3的字符串,并在该位置索引从1开始substr(char, pos, len) 截取字符串length(char) 返回字符串的长度lower(char) 转换为⼩写upper(char) 转换为⼤写trim() 截取左右空格initcap(char) ⾸字母⼤写ltrim(char,set) 左剪裁rtrim(char,set) 右剪裁replace(char oldchar, newchar) 字符串替换concat(char1, char2) 连接字符串cha(67) 根据ASCII码返回对应的字符lpad()和rpad() 在字符串的左边或右边添加东西需要3个参数第⼀个是字符串第⼆个是返回值的总长度, 第三个是⽤来填充的字符值 as varchar) 不需指定长度to_char(d|n, fmt)将数字或⽇期转换为指定格式的值 as varchar) 不需指定长度值) 必须指to_char(d|n, fmt)将数字或⽇期转换为指定格式的字符串to_date(char,frm)将char 或varchar 转换为⽇期数据类型to_number() 将包含数字的字符转换为number数据类型取绝对值取上界最⼩整取下界最⼤整数取幂四舍五⼊,正数返回1 ,负数返-1求平⽅根获取计算机名称nvl(ex1,ex2)如果ex1为null则返回ex2;如果ex1不为null则返回ex1;nvl2(ex1,ex2,ex3)如果ex1不为null则返回ex2如果ex1为null则返回ex3nullif(ex1,ex2)如果ex1=ex2则返回null 否则返回ex1;聚合)列名) 求这列的平均值列名) 求这列的最⼩值列名) 求这列的最⼤值统计所有的⾏包括重复列名) 统计指定列中⾮空值列名) 统计不是重复右句⽤于将信息表划分,按组进⾏聚合运算avg(列名) 求这列的平均值min(列名) 求这列的最⼩值max(列名) 求这列的最⼤值count(*) 统计所有的⾏包括重复值和空值count(列名) 统计指定列中⾮空值的个数count(distinct 列名) 统计不是重复值的个数group by右句⽤于将信息表划分为组,按组进⾏聚合运算返回当前系统时间返回指+指定部分后的⽇期返回返回指a. add_months(d,n) 返回给指定的⽇期加上指定的⽉数后的⽇期值 selectadd_months(sysdate,2) from dual;b. months_between(d,d) 返回2个⽇期之间的⽉数select months_between (date '2005-05-06',date '2005-9-01') from dual;c. last_day(d) 返回指定⽇期当⽉的最后⼀天的⽇期select last_day(sysdate) from dual;d. round(d, [fmt]) 返回⽇期值⽇期四舍五⼊为格式模型指定的单位 select round(date'2005-09-08','year') from dual; 返回 2005-01-01 selectround(date'2005-09-08','month') from dual; 返回2005-09-01 select round(date'2005-09-08','day')from dual; 返回最靠近的⼀个星期⽇e. next_day(d, day) 返回指定的下⼀个星期⼏的⽇期 select next_day(sysdate,'星期⼆') fromdualf.trunc 语法与round 相同区别:trunc 是只舍不⼊g.extract 提取⽇期时间类型中的特定部分|| 连接字符串⽤于将2个或多个字符串合并成⼀个字符串两个)重复的⾏select orderno from order_master union select orderno from order_detail;b.union all 合并2个查询选定的所有⾏包括重复的⾏c.intersect 返回2个查询都有的⾏d.minus 第1个查询在第2个查询中不存在的数据)个,⾄n-个条)::对1 :)左别名.列名,右别名.列from 左表 as 左别名 inner右表 as 右别名on 左别名.列= 右别名.列名左表名.列名,右表名.列from 左表 ,右表 where 左表.列名 = 右表名.列名左外连接:(返回左表的所有⾏,如null代替,存在则显⽰具体数,显⽰出来的总⾏数由左表决定)左别名.列名,右别名.列名左表 as 左别名 left join 右as 右别名on 左别名.列名 = 右.列名右外连接:(返回右表的所有⾏,如null代替,存在则显⽰具体数,显⽰出来的总⾏数由右表决定)左别名.列名,右别名.列名左表 as 左别名 right join右表 as 右别名on 左别名.列名 =完全⼀样连接分类:1内连接:条件2外连接1)左外连接: left join 或 left outer join2)右外连接:right join 或 right outer join3)完整外连接: Full join 或 Full outer join3交叉连接: from …4. 交叉连接:(返回左右表的所有⾏,如果左表没有与右表匹配的⾏则全部⽤null代替,如果右表没有与左表匹配的⾏则全部⽤null代替,存在则显⽰具体数据,显⽰出来的总⾏数=左表和右表⾏数和决定)Select 左别名.列名,右别名.列名 from 左表 as左别名 right join 右表 as 右别名on 左别名.列名= 右别名.列名完全拷贝: insert into ⽬标表源表部分拷贝: insert into ⽬标表 (列) select 列名 from 源表表不存完全拷贝: select * into 新表源表部分拷贝: select 列名 into 新from 源表拷贝表结构: select * into 新表源表 Where 1=2emp;b.拷贝⼀部分create table temp as select 列1,列2 from 表c.只拷贝⼀个空表(根据⼀个假条件)create table temp as select * from 表 where 1=2d.使⽤列别名: select stu_id, stu_name as "学⽣姓名" from student;A表,B1:⽬标表 set 列 = a.列 froma where a.关联列 = ⽬标表.2:列 = a.列 from 源a , ⽬标表b where a.关联列 =关联列3:⽬标表 set 列 = a.列 froma , ⽬标表b where a.关联列关联列4:⽬标表 set ⽬标表.列 = a.from 源表 a , ⽬标表 b where关联列 = b.关联列5:⽬标表 set⽬标表.列 = a.from 源表 a where a.关联列 =update ⽬标表a, 源表b set a.列 =b.列 where a.关联列 = b.关联列update ⽬标表a, 源表b set a.列 =b.列 where a.关联列 = b.关联列from 源表 a where a.关联列 = .关联列6:update语创建⼀个新表修改表中的列表名 alter column 列新数据库类型⼤⼩添加表中的列表名 Add 列名数据库删除表中的列表名 drop column 列删除表中的记录⽽不删除表的truncate table student只是查看表的结构删除表中的数据及表的结构a.创建⼀个新表create table student(stu_id int, stu_name varchar2(20)) tablespace lijiaob.修改表中的列alter table student modify(stu_name varchar2(40))c.添加表中的列alter table student add(stu_age int)d.删除表中的列alter table student drop column stu_agee.删除表中的记录⽽不删除表的结构truncate table studentf.只是查看表的结构desc studentg.删除表中的数据及表的结构drop table student;:.必须)a. commit 命令(⽤于提交并结束事务处理)commitb.savepoint 保存点类似于标记它将很长的事务处理划分为较⼩的部分他们⽤来标记事务中可以应⽤回滚的点save point savepoint_idc.rollbace work ,rollbackd.回滚到某个保存点rollback to savepoint伪列,但a.rowid(可以唯⼀的标识数据库中的⼀⾏)b.rownum (代表⾏的序号)rownum 不跟> , = , >= 操作使⽤储在,)变量名 = 值变量名 = 列名 from 表明列名 =⽤户)最后⼀个T-SQL错误号最后⼀次插⼊的标识本地服务器的名值’ 只出现在查询分析器中值’,16,1) 能在前台⽤条件) begin … end条件) begin …end else begin表名 where= 值)表名列名 = 值) begin …. enda) if condition then exp_bodyend if;b) if condition then exp_bodyelse exp_body end if;c) if condition then exp_bodyelsif condition then exp_bodyelse exp_body end if;1) loop condition end loop2) while condition Loop exp_body end loop3)for varable in [REVERSE] value1...value2 (varable 变量不需声明 , ... 是范围连接符 )loop exp_body end loop别名=case条件 then 值条件 then 值值表列名值 then 值值 then 值值表a) select case 列名when 值 then 值when 值 then 值else 值end case from 表明b) select casewhen 列名=值 then 值when 列名=值 then 值else 值end case from 表:1.列类型: %TYPEvarable tableName.columnName%TYPE;varable tableName.columnName%TYPE;2.⾏类型: %ROWTYPEvarable tableName%ROWTYPE;3.使⽤⾏类型:varable.列名;异常信息’,16,1) 能在 1)⾃定义异常:a)定义异常:(位 declare和 begin之间)DECLARE varable EXCEPTION;b)显⽰引发异常(为 begin 和 end 之间):RAISE varable;2)处理预定义异常:(位 begin 和 end 之间)EXCEPTIONwhen Too_Many_ROWS thenDBMS_OUTPUT.PUT_LINE('返回多⾏');when others thenDBMS_OUTPUT.PUT_LINE('全部处理');3) 引发应⽤程序错误:RAISE_APPLICATION_ERROR(error_number,error_message);原理: ):(重复⼦查询,不能单)(只执⾏⼀次,能单独执, 查询原理: 从外(外sql⼀次查出sql)到⾥把外不查出来的值传):查询到结果可以作为表来使⼀样切套⼦查询:Select * from AuthorBook a where CopyRight =(select Max(CopyRight) from AuthorBookwhere BookName = a.BopokName)(效率低)>连接查询(效), ⽽连. 右查询有连接查完全⼀样返回多⾏⼀列完全⼀样完全⼀样:只能出现在Group by分组,不能单独使⽤group by 就没有Having完全⼀样完全⼀样相对于mssql oracle显著的书写特点:1.代码⽚段必须放到begin end .. 中2.虚拟表 dual 的使⽤3.每⾏代码强制分号";"结束,包括end4.赋值符号 :=;(select xx into xx from daul;也可以⽤于赋值)5.省略了 as...补充:⼏种关系数据库中字符编码和存储长度需要注意的⼏个问题1.mysql中char(n) varchar(n) 中再utf8编码存储⽅式下数字表⽰的是字符数,但是在其他⽅式下就根据情况定,需要再相应环境下探索⼀下。

ORACLE与SQLSERVER语言的比较_耿新青

ORACLE与SQLSERVER语言的比较_耿新青

第25卷第1期2002年2月鞍山钢铁学院学报Journal of Anshan Institute of I .&S .Technology Vol .25No .1Feb .,2002ORACLE 与SQL SERVER 语言的比较耿新青,迟呈英(鞍山钢铁学院计算机科学与技术学院,辽宁鞍山 114002)摘 要:在不同的关系型数据库管理系统(RDB MS )之间,存在很多差异,ORACLE 和SQL SERVER 都符合SQL -92标准的属性扩展.从应用程序的开发人员的角度来看,ORACLE 和SQL SERVER 对数据进行管理方式没有太大的区别,OR ACLE 和SQL SERVER 之间的内部差异却是十分明显.本文研究了ORACLE 和SQL SERVER 的区别是为了实现ORACLE 向SQL SERVER 转换.关键词:ORACLE ;SQL SERVER ;比较中图分类号:TP311.131 文献标识码:A 文章编号:1000-1654(2002)01-0036-04 计算机系统和终端设备的功能、性能和使用方式千差成别,用户希望在现有设备的基础上,充分利用不同系统的各种资源,尽可能简单地完成一项工作,满足用户的要求,设计一个统一的系统接口,并通过这一接口与局部系统转换,实现各种资源的共享.这种转换实际上是数据库语言转换,为了实现其转换,就必须进行数据库语言的比较.OR ACLE 公司的ORACLE 和Microsoft 公司推出的SQL SERVER 是当今流行的大型关系数据库管理系统,它们是建立在成熟而强大的关系模型基础上,可以很好的支持客户 服务器模型,系统具有功能强大,使用灵活和形式多样的特点,可以用于构造从小型的单用户系统到支持数千个并发用户的大型应用项目上. 本文针对OR ACLE 和SQL SER VER 两种语言进行比较,为OR ACLE 向SQL SERVER 转换做准备.总的说来,在支持多处理器,互操作性,与其他数据库的连接,分析透性方面SQL SERVER 强于OR ACLE ;在多媒体处理,WE B 连接,对声音、视频、图片的支持,操作系统的支持,可编程性,内部编程语言,面向对象设计方面ORACLE 强于SQL SER VER .1 体系结构与专业术语[1,2]1.1 定义数据库 在ORACLE 中,数据库指完整的ORACLE 关系数据库环境,包括:(1)数据库处理的缓冲器;(2)带有一个集中式系统目录的SYSTE M 表空间和由DB A 来定义的其他表空间,这些表空间都由一个以上的数据文件组成;(3)两个以上的在线重做日志;(4)归档重做日志;(5)各种其他文件(控制文件、初始化文件、配置文件等). SQL SER VER 数据库具有逻辑数据分区、应用和安全机制的功能.一台计算机上有多个实例,每个图1 两种数据库系统组成Fig .1 Composion of Two Kinds of DatabaseSQL SERVER 实例有多个数据库.数据库系统文件包含单个SQL SE VER 数据库以及类似于备份这样的数据库任务管理文件,SQL SER V -ER 数据库由若干文件组组成,文件组具备分配数据的功能.在文件组中,不可能包含多个数据库系统文件.数据库创立以后,文件组被加到数据库中.收稿日期:2001-09-10.作者简介:耿新青(1974-),女,江苏江阴人,助教;迟呈英(1963-),女,辽宁沈阳人,副教授.1.2 物理和逻辑存储结构 ORALCE 是由表空间组成,表空间是由数据文件组成,表空间数据文件的内部单元是块.当OR ALCE 数据建立时,块的大小由DBA 设定.对象创建在ORACLE 表空间中,用户可以指明它的区域单元空间(最初区域,下一个区域,最小区域,最大区域).如果区域大小没有确定,按默认的区域大小创建.OR A -CLE 区域大小是可变的,它必须包含至少五个连续城. SQL SER VER 用文件组来管理表和索引的物理位置,文件组是文件的逻辑容器,在文件组中包含的数据是按比例填充的.SQL SERVER 文件的内部单元是页,页的大小定为8192字节(8kB ),8个连续页(64kB )定为页的区域.在SQL SER VER 数据库中创建表和索引时,在一个区域中先分配一页,随着表和索引增加时,SQL SERVER 自动分配空间,使页数增加,此种方式比OR ACLE 整个区域分配更有效.1.3 事务日志和自动恢复 当启动时,要比较表空间文件的内容与在线重做日志文件的内容是否一致,如果一致,则OR ACLE 关系数据完成自动恢复,如果不一致,ORACLE 将在线重做日志文件的内容复制到表空间文件中,如果ORACLE 不能获得来自在线重做日志文件的信息,参考归档重做日志文件. SQL SER VER 通过每次启动时检查系统中的每个数据库,完成自动恢复.首先,检查“master ”数据库,在线程上恢复所有的系统中的其它数据库.SQL SER VER 检查事务日志,如果事务日志包含未提交的事务,则该事务回滚,实现数据库的自动恢复机制.然后,检查还没有写到数据库提交的事务日志,如果找到了,则完成这些事务.SQL SER VER 事务日志综合了OR ALCE 回滚段的功能和OR ACLE 在线重做日志备份功能.1.4 网 络 ORACLE 的sql *net 起到ORACLE 数据库服务器和客户端之间的网络连接作用,并与TNS 数据流协议进行通信,允许使用者不写代码,并运行在不同的网络协议上. SQL SER VER 的net _libraries (网络库)使用TDS 协议进行客户端和服务器连接,使运转于NAMED pipe 的客户端,TCP IP 插口,或者其它的IPC (内部过程通讯)实现连接,两种网络连接如图2.client →sql *net —tns —sql *net —oracle dbms engineclient →net _library —tds —net _library—sql s ever dbms engin图2 两种网络连接Fig .1 Connection of Two Kinds of Networks2 定义数据库对象[3,4] ORACLE 与SQL SERVER 在字段数、行数、BLOB 字节存储、非聚集表索引、单个索引中最大字段数、索引中字段最大长度、视图命名规范、索引命名规范等不尽相同,这里不作阐述.2.1 识别表名 当进入属于ORACLE 用户帐号的表时,不经授权可以选择表.在进入ORACLE 其他模式时,要求模式名必须做为表名的前缀,用一个点“·”来表示. SQL SER VER 当引用表时,使用了不同的命名规范.在SQL SER VER 登录号时可以在多个数据库中使用名来创建表,下面介绍如何使用表和视图:[[database -na me .]owner -na me .]table -name 表的位置 ORACLE MICROSOFT SQL SERVER 用户帐号 select *select *from user -db .student -ad -m from studentin .student 其他模式 select *fromselect *from other -db .student -ad student -admin .student min .student·37·第1期 耿新青,等:ORACLE 与SQL SERVER 语言的比较2.2 建 表 在SQL SERVER 中,数据库对象名由安装选项决定,OR ACLE 与此无关.2.3 select 语句建表 ORACLE 与SQL SERVER 语法不同. ORACLE MICROSOFT SQL SER VER Cr eate table studentbackup as selectselect *into studentbackup *from studentfrom student2.4 视 图 在ORACLE 中定义视图时,可用with read only ,在SQL SERVER 通过授权给select 语句实现该功能;在ORALCE 视图中with check option 作为约束条件,而SQL SERVER 中不是约束条件.2.5 聚集索引 ORACLE CLUSTER 对两个或更多的表在物理上进行分组,这些表共用相同的数据区和共同的列作为聚集键;SQL SERVER 与OR ACLE 在聚集上不相似,在结构上不同,SQL SER VER 是在单个表上定义聚集索引.2.6 对数据类型做对比 ORACLE 中long 类型与SQL SERVER 的text 类型对应(即在OR ACLE 中用long 类型,在SQL SE VER 中用text 类型);OR ACLE 中long raw 类型与SQL SERVER 的image 类型对应;OR ACLE 中number 类型与SQL SER VER 的numberic 类型对应;OR ACLE 中date 类型与SQL SERVER 的datetime 类型对应;OR ACLE 中ro wid 类型与SQL SER VER 的identity 字段类型,umiqueidenifier 类型,ne wid 函数对应.3 两种语言的比较3.1 Select 语句 (1)SQL ER VER 不使用start with …connect by 从句,在SQL SERVER 中用存储过程来代替这个从句.例 ORACLE : MICRSOFT SQL SERVER : Select [all distinct ]select -listselect select -list [from[into new -table ] {table -name view -name select -statement }]from table -source where clause ][where search -condition ] [group by group -by -expression ][group by [all ]group -by -expression [having search -condition ][,…n ][with {cube rollup }] [start with …connect by ][havin g search -condition ] [{union union all intersect minus }select …][order by order -expression ] [order by clause ][asc desc ]] [for update ] (2)ORACLE 的intersect 和minus 在SQL SER VER 不使用,可通过exits 和not eixtis 来实现.例 ORACLE : MICROSOFT SQL SER VER : Select ccode .,name select ccode ,name From dept -admin .class from detp -ad min .class c Intersect where exists Select c .ccode ,c .cname (select `x 'from From student admin .grade g .student -admin .grade g Dept -admin .calss c ·38· 鞍山钢铁学院学报 第25卷 Where c .ccode =g .ccode 3.2 insert 语句 transact _sql 语句可使用insert into table 和views 语句,不准使用含select 子查询的insert 语句,OR ACLE 可使用含select 子查询.3.3 update 语句 与insert 语句相同,update 语句不使用含select 子查询.在SQL SERVER 中要完成此功能,先将select 语句转化成视图,然后在update 语句中使用该视图名.ORACLE 的update 语句只在PL SQL 块中使用变量,transact _sql 语言不只在块中使用变量. 在SQL SER VER 中,关键字DE FAULT 被用来为字段设定默认值,在ORACLE 的update 语句不能为字段设置默认值.3.4 delect 语句 与inser ,update 同样,transact _sql 中update 不使用select 子查询.4 应用范围 在开过程中,SQL SERVER 只能windows 上运行,没有丝毫的开放性,windows 平台的可靠性,安全性和伸缩性是非常有限的;而ORACLE 能在所有主流平台上运行(包括windows ),采用完全开放策略,使客户选择最适合的解决方案.SQL SERVER 在可伸缩性,并行性方面,它的并行和实施共存模型并不成熟,难以处理日益增多的用户和数据卷,伸缩性有限;ORACLE 平行服务器通过使一组结点共享同一簇中的工作来扩展windo ws 的能力,提供高可用性和伸缩性的簇,如果windo ws NT 不能满足需要,用户可以把数据库移到UNIX 中.SQL SER VER 在安全性方面,没有获得任何安全证书;OR ACLE 获得最高认证级别的ISO 标准认证.SQL SERVER 在多用户时不佳;ORACLE 在多用户时,性能最高.SQL SER VER 只支持widows 客户的c s 结构,可以用ado ,dao ,oledb ,odbc 连接;ORACLE 可进行多层次网络计算,支持多种工业标准,可以用odbc ,jdbc ,odi 等网络客户连接;SQL SERVER 操作简单,OR ACLE 较复杂.参考文献:[1] KE VIN Loney ,MARENE Theriaut .ORACLE 数据库管理员手册[M ].李纪松,周保太,周凤蛟,等译.北京:机械工业出版社,2000.1-21.[2] WILLIAM G ,PAGE Jr .ORACLE 开发使用手册[M ].王磊,蒋蕊,王炎,等译.北京:机械工业出版社,2000.33-83.[3] 三味书屋.网站设计超级COOL _SQL SER VER [M ].北京:人民邮电出版社,2000.219-267.[4] 王海军.ORACLE 学习教程[M ].北京:北京大学出版社,2000.38-195.Comparison ORACLE with SQL SERVERG ENG Xin _qing ,CI Cheng _ying(School of Science and Technology of Computer ,Anshan Institute of I .&S .Technology ,Anshan 114002,China )A bstract :There are many differences among the r elational database management systems .Oracle database and sql ser ver confor m to the property extension of sql _92standard .From a point of vie w of system application developer ,ther e are some difference between oracle database and sql ser ver in mana gement of data ,but the internal difference between oracle database and sql server are great .Studying the differences between oracle database and sql server is to change oracle database to sql ser ver .Key Words :oralce ;sql server ;c omparison(Received Septem ber 10,2001)·39·第1期 耿新青,等:ORACLE 与SQL SERVER 语言的比较。

SQL 语言对比

SQL 语言对比

SQL 语言对比关键字: sqlserver oracle db2 sql1.1.1 取前n条记录SQL Server:Select top n * from xtableOracle:Select * from xtable where rownum <=nDB2:Select * from xtable fetch first n rows only1.1.2 取当前日期SQL Server:Select getdate()Oracle:Select sysdate from dualDB2:Select current timestamp from sysibm.sysdummy11.1.3 连接字符串SQL Server:Select Hello+TooneOracle:Select Hello||Toone from dualDB2:Select Hello||Toone from sysimb.sysdummy11.1.4 空值转换SQL Server:SELECT userid,username,isnull(email,0) FROM AUTH_USER Oracle:SELECT userid,username,nvl(email,0) FROM AUTH_USERDB2:SELECT userid,username,value(email,0) FROM AUTH_USER 1.1.5 类型转换SQL Server:SELECT convert(varchar,getdate(),20)Oracle:SELECT to_char(sysdate,yyyy-mm-dd hh24:mi:ss) from dualDB2:SELECT varchar(current timestamp) from sysibm.sysdummy1注1:■SQL Server中转换日期格式改变Style参数:20 ;■Oracle中转换日期格式改变格式化参数:yyyy-mm-dd hh24:mi:ss ‘yyyy’、’mm’、’dd’、’hh12’、’hh24’、’mi’、’ss’等;■Db2中转换日期格式改变系统常量:current timestamp ‘current date’、’current time’等;注2:■SQL Server数据类型改变“数据类型参数”:int、varchar等;■Oracle数据类型改变函数:to_char()、to_date()、to_number()等;■DB2数据类型改变函数:varchar()、int()、date()、time()等;1.1.6 取值判断SQL Server:select case Convert = case when g.master_type =system then 管理员when g.master_type =roletype then 特殊角色else 普通用户end fromglobal_code gOracle:select case g.master_type when system then 管理员when roletype then 特殊角色else 普通用户end AS caseConvert from global_code gDB2:select case g.master_type when system then 管理员when roletype then 特殊角色else 普通用户end AS caseConvert From global_code g1.1.7 位置SQLServer:select charindex(E,ABCDEF) select patindex(%E%,ABCDEF)Oracle:select instr(ABCDEF,E) from dualDB2:Select locate(E,ABCDEF) fromsysibm.sysdummy11.1.8 其他函数SQL Server Oracle DB2长度Len() Length() Length()取子串Substring() Substr() Substr()1.2附1.2.1 DB2V8.1常用命令■创建数据库在服务器上执行db2 CREATE DB oatemp■删除数据库在服务器上执行db2 DROP DB oatemp■创建表空间db2 CREATE USER TEMPORARY TABLESPACE USERSPACE1 MANAGED BY SYSTEM USING ( USERSPACE1)■启动数据库切换用户su – db2inst1 启动数据库:db2start■关闭数据库切换用户su – db2inst1 关闭数据库db2stop [force]■创建远程管理节点进入DB2命令窗口db2 CATALOG TCPIP NODE asnode REMOTE 10.1.22.176 SERVER 50000 db2 CATALOG DB oadb2 AS oadb2 AT NODE asnode■连接数据库db2 CONNECT TO oadb2 USER db2inst1 USING 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 -wibmdb2 -e -o putsq.db2■查看正在使用的端口netstat -a■查询系统表select count(*) from SYSCAT.TABLES where TABSCHEMA=’DB2INST1’select count(*) from SYSCAT.PROCEDURES where PROCSCHEMA=’DB2INST1’■常用命令DB2 SELECT DROP TALBE ||TABNAME FROM SYSCAT.TABLES WHERE T ABSCHEMA=DB2INST1 AND TYPE=T >db2droptables.db2 DB2 SELECT DROP VIEW ||TABNAME FROM SYSCAT.TABLES WHERE T ABSCHEMA=DB2INST1 AND TYPE=V >db2dropviews.db2 DB2 –vf db2droptables.db2 –z info.log db2 SELECTusername FROM auth_user FETCH FIRST 3 ROWS ONLY■启动JDBC db2jstrt JDBC APPLET SERVER 67891.1 数据库移植注意事项1.1.1 取前n条记录SQL Server:Select top n * from xtableOracle:Select * from xtable where rownum <=nDB2:Select * from xtable fetch first n rows only1.1.2 取当前日期SQL Server:Select getdate()Oracle:Select sysdate from dualDB2:Select current timestamp from sysibm.sysdummy11.1.3 连接字符串SQL Server:Select 'Hello'+'Toone'Oracle:Select 'Hello'||'Toone' from dualDB2:Select 'Hello'||'Toone' from sysimb.sysdummy11.1.4 空值转换SQL Server:SELECT userid,username,isnull(email,'0') FROM AUTH_USER Oracle:SELECT userid,username,nvl(email,'0') FROM AUTH_USERDB2:SELECT userid,username,value(email,'0') FROM AUTH_USER1.1.5 类型转换SQL Server:SELECT convert(varchar,getdate(),20)Oracle:SELECT to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dualDB2:SELECT varchar(current timestamp) from sysibm.sysdummy1注1:■SQL Server中转换日期格式改变Style参数:20 ;■Oracle中转换日期格式改变格式化参数:yyyy-mm-dd hh24:mi:ss XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />‘yyyy’、’mm’、’dd’、’hh12’、’hh24’、’mi’、’ss’等;■Db2中转换日期格式改变系统常量:current timestamp‘current date’、’current time’等;注2:■SQL Server数据类型改变“数据类型参数”:int、varchar等;■Oracle数据类型改变函数:to_char()、to_date()、to_number()等;■DB2数据类型改变函数:varchar()、int()、date()、time()等;1.1.6 取值判断SQL Server:select caseConvert =case when g.master_type ='system' then '管理员'when g.master_type ='roletype' then '特殊角色'else '普通用户'endfrom global_code gOracle:select case g.master_typewhen 'system' then '管理员'when 'roletype' then '特殊角色'else '普通用户'endAS caseConvertfrom global_code gDB2:select case g.master_typewhen 'system' then '管理员'when 'roletype' then '特殊角色'else '普通用户'endAS caseConvertFrom global_code g1.1.7 位置SQL Server:select charindex('E','ABCDEF')select patindex('%E%','ABCDEF')Oracle:select instr('ABCDEF','E') from dualDB2:Select locate('E','ABCDEF') from sysibm.sysdummy11.1.8 其他函数SQL Server Oracle DB2长度Len() Length() Length()取子串Substring() Substr() Substr()1.2 附1.2.1 DB2V8.1常用命令■创建数据库在服务器上执行db2 CREATE DB oatemp■删除数据库在服务器上执行db2 DROP DB oatemp■创建表空间db2 "CREATE USER TEMPORARY TABLESPACE USERSPACE1 MANAGED BY SYSTEM USING (' USERSPACE1')"■启动数据库切换用户su – db2inst1启动数据库:db2start■关闭数据库切换用户su – db2inst1 关闭数据库db2stop [force]■创建远程管理节点进入DB2命令窗口db2 CATALOG TCPIP NODE asnode REMOTE 10.1.22.176 SERVER 50000db2 CATALOG DB oadb2 AS oadb2 AT NODE asnode■连接数据库db2 CONNECT TO oadb2 USER db2inst1 USING ibmdb2■关闭数据库连接db2 terminate■执行脚本db2 -td! -vf ioa2.db2 -z info.log■导出脚本db2look -d oadb2 -i db2inst1 -w ibmdb2 -e -o putsql.db2 -t auth_userdb2look -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’•13:14•浏览(484)•评论 (0)•分类: 数据库2009-02-23异常是否会引起oracle事物回滚关键字: oracle原理上说,异常是不会终止事务的。

Oracle、SQLServer、Symfoware、DB2、SYBASE数据库对比语法及函数

Oracle、SQLServer、Symfoware、DB2、SYBASE数据库对比语法及函数

函数比较:数学函数:要点:1.由于各种数据库判断Null的方法不同,所以开发时对应DBMS分开处理。

DBMS支持SQL92规定的SQL函数coalesce()时这些操作都封装在getNvlSqlString(String strColName, String strDefaultValue)中,用这个方法可得到相应数据库处2.Symfoware数据库中没有取余函数,可以使用cast和floor组合来取余,例如:cast(empno-floor(empno/3)*3 as int)字符函数:要点:1.由于各种数据库判断Null的方法不同,所以开发时对应DBMS分开处理。

DBMS支持SQL92规定的SQL函数coalesce()时这些操作都封装在getNvlSqlString(String strColName, String strDefaultValue)中,用这个方法可得到相应数据库处2.注意oracle中取字符子串的方法名与其他数据库不一样日期函数:要点:1.由于各种数据库判断Null的方法不同,所以开发时对应DBMS分开处理。

DBMS支持SQL92规定的SQL函数coalesce()时这些操作都封装在getNvlSqlString(String strColName, String strDefaultValue)中,用这个方法可得到相应数据库处2.各种数据库得到系统时间的方法不同,所以开发时对应DBMS分开处理。

Symfoware数据库中,current_date -- 系统日期;current_time -- 系统时间;current_timestamp -- 系统日期和时间这些形式都封装在getSysdateName()中,用这个方法可得到相应数据库的系统时间方法3.各种数据库对日期加减计算的表示是不同的,所以开发时对应DBMS分开处理。

这些表现形式都封装在getAddDay 用这个方法可以得到相应数据库的日期加减方法的表示转换函数:要点:各种数据库中类型转换方法可通过PreparedStatement.setXXX()做成不依靠DBMS的处理.其他单行函数:统计函数:要点:1. SymfoWARE中,使用统计函数count时,不能够使用"count(1)"这样的形式,必须做成"count(*)"。

Oracle和SQLServer的语法区别

Oracle和SQLServer的语法区别

Oracle和SQLServer的语法区别SQL 语言支持这一部分概述了 Transact-SQL 和 PL/SQL 语言语法之间的相同点和不同点,并给出转换策略。

要将 Oracle DML 语句和 PL/SQL 程序迁移到 SQL Server 时,请按下列步骤执行:1.验证所有 SELECT、INSERT、UPDATE 和 DELETE 语句的语法是有效的。

进行任何必要的修改。

2.把所有外部联接改为 SQL-92 标准外部联接语法。

3.用相应 SQL Server 函数替代 Oracle 函数。

4.检查所有的比较运算符。

5.用“+”字符串串联运算符代替“||”字符串串联运算符。

6.用 Transact-SQL 程序代替 PL/SQL 程序。

7.把所有 PL/SQL 游标改为非游标 SELECT 语句或 Transact-SQL 游标。

8.用 Transact-SQL 过程代替 PL/SQL 过程、函数和包。

9.把 PL/SQL 触发器转换为 Transact-SQL 触发器。

10.使用 SET SHOWPLAN 语句,优化查询性能。

SELECT 语句Oracle 和 Microsoft SQL Server 使用的 SELECT 语句语法类似。

SQL Server 不支持 Oracle 特定的基于开销的优化程序提示,它必须被删除。

建议使用的技术是,使用 SQL Server 基于开销的优化程序。

有关详细信息,请参见本章后面的“SQL 语句优化”。

SQL Server 不支持 Oracle 的 START WITHUCONNECT BY 子句。

在 SQL Server 中,可以创建完成相同任务的存储过程替代它。

SQL Server 不支持 Oracle 的 INTERSECT 和 MINUS 集合运算符。

可使用 SQL Server EXISTS 和 NOT EXISTS 子句,实现相同的结果。

SQL server和DB2对比

SQL server和DB2对比

Microsoft SQL Server 2008提供了更好的性能和扩展性、高有效性、行业领先的安全性、更容易的管理能力、提高的开发人员生产力、领先的商业智能和数据仓储能力、一个用于主机OLTP的平台和SAP集成——所有这些都以低于IBM DB2的总体拥有成本提供。

基于此,许多公司从DB2移植到了SQL Server。

目前SQL Server在新的关系型数据库管理系统许可证市场中所占的份额高于DB2。

对比方面·总体拥有成本(TCO)和ROI·性能和可扩展性·高有效性·安全性·管理能力·开发人员生产力·商业智能和数据仓库·OLTP·SAP集成一.TCO和ROI●初始获得成本低于IBM DB2。

SQL Server的超高性价比降低了硬件成本。

●SQL Server 2008使许多常规数据库管理工作自动化、流线化或消除了这些工作,使得数据库管理成本低于IBM DB2。

●SQL Server 2008包含DB2用户必须以额外插件来购买的特性,包括:所有的商业智能、报表、分析、ETL、XML功能、数据仓库、安全性和性能优化。

●SQL Server许可证费用低于IBM DB2,降低了它未来的TCO和提高了它的ROI。

DB2的许可证费用可能比SQL Server贵5-6倍,而多核许可证的费用则贵更多倍。

●SAP TCO 研究通过将SQL Server与其它数据库做对比,结果表明客户将数据库管理员成本降低了55%,将总TCO降低了37%。

案例研究:客户更愿意选择SQL Server 而不是DB2✓Borgata Hotel Casino & Spa,在大西洋城的第一个娱乐场,通过使用SQL Server提高了操作效率并节省了$400,000。

✓阿拉斯加州税务部门选择了SQL Server而不是DB2来为阿拉斯加州建立7TB的数据仓库。

SQL Server,Oracle,DB2上约束建立语句对比

SQL Server,Oracle,DB2上约束建立语句对比

约束用于强制行数据满足特定的商业规则(数据类型是强制列的数据满足规则)约束有五种类型:NOT NULLUNIQUEPRIMARY KEYFOREIGN KEYCHECKSQL SERVER上的NOT NULL约束:1.CREATE TABLE U_emp(2.empno bigint,3.ename VARCHAR(10) NOT NULL,4.job VARCHAR(9),5.mgr bigint,6.hiredate DATE,7.sal decimal(7,2),m decimal(7,2),9.deptno decimal(7,2) NOT NULL);ORACLE上的NOT NULL约束:1.CREATE TABLE emp(2.empno NUMBER(4),3.ename VARCHAR2(10) NOT NULL,4.job VARCHAR2(9),5.mgr NUMBER(4),6.hiredate DATE,7.sal NUMBER(7,2),m NUMBER(7,2),9.deptno NUMBER(7,2) NOT NULL);DB2上的NOT NULL约束:1.CREATE TABLE U_emp(2.empno INTEGER,3.ename VARCHAR(10) NOT NULL,4.job VARCHAR(9),5.mgr INTEGER,6.hiredate DATE,7.sal DECIMAL(7,2),m DECIMAL(7,2),9.deptno DECIMAL(7,2) NOT NULL);SQL SERVER上的UNIQUE约束:1.CREATE TABLE U_dept(2.deptno INTEGER,3.dname VARCHAR(14),4.loc VARCHAR(13),5.CONSTRAINT dept_dname_uk UNIQUE(dname));ORACLE上的UNIQUE约束:1.CREATE TABLE dept(2.deptno NUMBER(2),3.dname VARCHAR2(14),4.loc VARCHAR2(13),5.CONSTRAINT dept_dname_uk UNIQUE(dname));DB2上的UNIQUE约束:1.CREATE TABLE U_dept(2.deptno INTEGER,3.dname VARCHAR(14) not null,4.loc VARCHAR(13),5.CONSTRAINT dept_dname_uk UNIQUE(dname));SQL SERVER上的PK 约束:1.CREATE TABLE P_dept(2.deptno INTEGER,3.dname VARCHAR(14),4.loc VARCHAR(13),5.CONSTRAINT dept_dname_uk1 UNIQUE (dname),6.CONSTRAINT dept_deptno_pk1 PRIMARY KEY(deptno));ORACLE上的PK约束1.CREATE TABLE dept(2.deptno NUMBER(2),3.dname VARCHAR2(14),4.loc VARCHAR2(13),5.CONSTRAINT dept_dname_uk UNIQUE (dname),6.CONSTRAINT dept_deptno_pk PRIMARY KEY(deptno));DB2和的PK约束:1.CREATE TABLE P_dept(2.deptno INTEGER not null,3.dname VARCHAR(14) not null,4.loc VARCHAR(13),5.CONSTRAINT dept_dname_uk1 UNIQUE (dname),6.CONSTRAINT dept_deptno_pk1 PRIMARY KEY(deptno));SQL SERVER上的FK 约束:1.CREATE TABLE F_emp(2.empno INTEGER,3.ename VARCHAR(10) NOT NULL,4.job VARCHAR(9),5.mgr INTEGER,6.hiredate DATE,7.sal DECIMAL(7,2),m DECIMAL(7,2),9.deptno INTEGER NOT NULL,10.CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno)11.REFERENCES p_dept (deptno));ORACLE上的FK约束:1.CREATE TABLE emp(2.empno NUMBER(4),3.ename VARCHAR2(10) NOT NULL,4.job VARCHAR2(9),5.mgr NUMBER(4),6.hiredate DATE,7.sal NUMBER(7,2),m NUMBER(7,2),9.deptno NUMBER(7,2) NOT NULL,10.CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno)11.REFERENCES dept (deptno));DB2上的FK约束:1.CREATE TABLE F_emp(2.empno INTEGER,3.ename VARCHAR(10) NOT NULL,4.job VARCHAR(9),5.mgr INTEGER,6.hiredate DATE,7.sal DECIMAL(7,2),m DECIMAL(7,2),9.deptno INTEGER NOT NULL,10.CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno)11.REFERENCES p_dept (deptno));FK约束的几个特点:1.FOREIGN KEY:在表级定义时需要2.REFERENCES:指定主表及其主键列3.ON DELETE CASCADE:级联删除选项SQL SERVER上的CHECK约束:1.create table test ( deptno bigint constraint emp_deptno_ck check (deptno2.between 10 and 99))ORACLE上的CHECK约束:1.create table test ( deptno number(2) constraint emp_deptno_ck check (deptno2.between 10 and 99))DB2 上的CHECK约束:1.create table test ( deptno number(2) constraint emp_deptno_ck check (deptno2.between 10 and 99))来源:网络编辑:联动北方技术论坛。

深度对比Oracle与SQL_Server

深度对比Oracle与SQL_Server

Oracle与SQL Server对比这两种数据库之间架构上的比较操作系统的支持Microsoft SQL Server只支持Windows平台,要让Microsoft发布一个支持其它操作系统版本的可能性当然是小之又小的了。

当前来说 SQL Server可以在XP、Vista、Windows Server 2000、2003、2008上运行,同时也有针对于32位和64位版本Windows的数据库版本。

对Oracle来说,它支持多种不同的操作系统平台,包括Windows,另外还有支持Linux和不同分支的Unix.实例、数据库和表空间SQL Server和Oracle之间第一个架构级别的差异就在于对实例 (instance)和数据库(database)概念的定义了。

SQL Server中,实例一词用来代表一个包含了操作系统文件、内存结构、后台进程以及注册表信息的独立的应用服务。

在Windows系统中用一个存在着停止和运行状态的服务来代表一个实例,当处于运行状态时,实例要占用一定的服务器内存以及生成一定数量的后台进程。

SQL Server实例的中心是数据库。

一个SQL Server数据库指的是一个资料库以及操作数据所需要的程序代码,当实例没有运行时,实例中的数据库就不能够访问。

SQL Server有两种数据库:系统数据库(system databases)和用户数据库(user databases)。

在一个SQL Server实例安装完成之后,将会自动创建4个系统数据库:master, model, msdb, tempdb。

如果一个机器上面安装了多个SQL Server实例时,每个实例都会有自己单独的一套系统数据库。

除了msdb数据库之外,其它数据库不能访问或是被损坏都会导致实例无法启动。

相比之下用户数据库由DBA或者是开发人员在数据库实例安装完毕、系统数据库都启动之后所创建的,这些数据库中保存着公司的业务资料。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

■DB2数据类型改变函数:varchar()、int()、date()、time()等;
1.1.6 取值判断
SQL Server: select case Convert = case when g.master_type =system then 管理员 when g.master_type =roletype then 特殊角色 else 普通用户 end from global_code g
■ 连接数据库 db2 CONNECT TO oadb2 USER db2inst1 USING ibmdb2
■ 关闭数据库连接 db2 terminate
■ 执行脚本 db2 -td! -vf ioa2.db2 -z info.log
Oracle: SELECT userid,username,nvl(email,0) FROM AUTH_USER
DB2: SELECT userid,username,value(email,0) FROM AUTH_USER
1.1.7 位置 SQL
Server: select charindex(E,ABCDEF) select patindex(%E%,ABCDEF)
Oracle: select instr(ABCDEF,E) from dual
DB2: Select locate(E,ABCDEF) from
DB2: Select * from xtable fetch first n rows only
1.1.2 取当前日期
SQL Server: Select getdate()
Oracle: Select sysdate from dual
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
DB2: Select Hello||Toone from sysimb.sysdummy1
1.1.4 空值转换
SQL Server: SELECT userid,username,isnull(email,0) FROM AUTH_USER
■ 创建远程管理节点 进入 DB2命令窗口 db2 CATALOG TCPIP NODE asnode REMOTE 10.1.22.176 SERVER 50000 db2 CATALOG DB oadb2 AS oadb2 AT NODE asnode
■Db2中转换日期格式改变系统常量:current timestamp ‘current date’、’current time’等;
注2:
■SQL Server数据类型改变“数据类型参数”:int、varchar等;
■Oracle数据类型改变函数:to_char()、to_date()、to_number()等;
注1:
■SQL Server中转换日期格式改变Style参数:20 ;
■Oracle中转换日期格式改变格式化参数:yyyy-mm-dd hh24:mi:ss XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />
■ 启动数据库 切换用户 su – db2inst1 启动数据库: db2start
■ 关闭数据库 切换用户 su – db2inst1 关闭数据库 db2stop [force]
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
1.2

1.2.1 DB2V8.
1常用命令
■ 创建数据库 在服务器上执行 db2 CREATE DB oatemp
■ 删除数据库 在服务器上执行 db2 DROP DB oatemp
■ 创建表空间 db2 CREATE USER TEMPORARY TABLESPACE USERSPACE1 MANAGED BY SYSTEM USING ( USERSPACE1)
■ 导出脚本 db2look -d oadb2 -i db2inst1 -w ibmdb2 -e -o putsql.db2 -t auth_user db2look -d oadb2 -i db2inst1 -wibmdb2 -e -o putsq.db2
■ 查看正在使用的端口 netstat -a
■ 查询系统表 select count(*) from SYSCAT.TABLES where TABSCHEMA=’DB2INST1’ select count(*) from SYSCAT.PROCEDURES where PROCSCHEMA=’DB2INST1’
DB2: SELECT varchar(current timestamp) from sysibm.sysdummy1
注1:
■SQL Server中转换日期格式改变Style参数:20 ;
■Oracle中转换日期格式改变格式化参数:yyyy-mm-dd hh24:mi:ss ‘yyyy’、’mm’、’dd’、’hh12’、’hh24’、’mi’、’ss’等;
1.1.5 类型转换
SQL Server: SELECT convert(varchar,getdate(),20)
Oracle: SELECT to_char(sysdate,yyyy-mm-dd hh24:mi:ss) from dual
1.1.ct 'Hello'+'Toone'
Oracle: Select 'Hello'||'Toone' from dual
DB2: Select 'Hello'||'Toone' from sysimb.sysdummy1
1.1.4 空值转换
SQL Server,Oracle,DB2数据库SQL语句比较
文章分类:数据库
SQL Server,Oracle,DB2数据库SQL语句比较
1.1.1 取前n条记录
SQL Server: Select top n * from xtable
Oracle: Select * from xtable where rownum <=n
■ 常用命令 DB2 SELECT DROP TALBE ||TABNAME FROM SYSCAT.TABLES WHERE T ABSCHEMA=DB2INST1 AND TYPE=T >db2droptables.db2 DB2 SELECT DROP VIEW ||TABNAME FROM SYSCAT.TABLES WHERE T ABSCHEMA=DB2INST1 AND TYPE=V >db2dropviews.db2 DB2 –vf db2droptables.db2 –z info.log db2 SELECT username FROM auth_user FETCH FIRST 3 ROWS ONLY
■ 启动JDBC db2jstrt JDBC APPLET SERVER 6789
1.1 数据库移植注意事项
1.1.1 取前n条记录
SQL Server: Select top n * from xtable
Oracle:Select * from xtable where rownum <=n
‘yyyy’、’mm’、’dd’、’hh12’、’hh24’、’mi’、’ss’等;
■Db2中转换日期格式改变系统常量:current timestamp
‘current date’、’current time’等;
DB2:Select * from xtable fetch first n rows only
1.1.2 取当前日期
SQL Server: Select getdate()
Oracle: Select sysdate from dual
DB2: Select current timestamp from sysibm.sysdummy1
1.1.5 类型转换
SQL Server: SELECT convert(varchar,getdate(),20)
Oracle:SELECT to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual
DB2: SELECT varchar(current timestamp) from sysibm.sysdummy1
sysibm.sysdummy1
1.1.8 其他函数 SQL Server Oracle DB2
长度 Len() Length() Length()
取子串 Substring() Substr() Substr()
相关文档
最新文档