1. 程式人生 > >SQL Server,Oracle,DB2資料庫SQL語句比較

SQL Server,Oracle,DB2資料庫SQL語句比較

 資料庫由許多資料檔案組成,在邏輯上則是有許多表空間組成。一個表空間則可以對應多個數據檔案。在表空間內的資料庫,根據使用者不同,分為許多不同的模式,每個模式內包含有表,索引等物件。每個物件對應到一個段,段由許多個不一定連續的區組成,每個區則是由許多連續的資料塊組成。要控制資料庫的大小,可以通過資料檔案和表空間的大小來控制,要控制表的大小,可以通過表空間可用區域的數量和大小,可以設定將表建立在哪個表空間如同sql中設定表存在哪個檔案組來對錶存在的位置的控制。要處理 I/O頻繁的檔案查詢速變慢等問題,則通過資料塊,和pcttree(類似sql server中的fill factor)處理。 sql server
中,沒有表空間的概念,但是與表空間對應的概念是檔案組。sql server也沒有段的概念,sql server的頁大概可以與oracle中的塊對應。sql server也有區,它是分配磁碟空間的單元。因為,每一個區至少包含一個表或索引的內容,但它的區的大小是固定的64kb,頁也是固定的8kb。而oarcle中的區的大小不是固定的,且每個塊的大小,依據*作系統的不同而不同。 Oracle的*作包含兩大部分,第一個是資料庫,第二個例項。所謂oracle例項可以看成sql server的mssqlserver服務,只要sql server的服務啟動,那麼所有的資料庫就可以使用,而例項只要被啟動,則特定的資料庫就可以運用。每個資料庫都有自己的例項。 sql語句,MS SQL
是T-SQL, 而Oracle是PL/SQL,而者有很大區別如查看錶結構,oracle是desc 表名,而ms sql是sp_help 表名 補充:oracle的儲存結構 一個表空間只能屬於一個數據庫   每個資料庫最少有一個控制檔案(建議3個,分別放在不同的磁碟上)   每個資料庫最少有一個表空間(SYSTEM表空間)   每個資料庫最少有兩個聯機日誌組,每組最少一個聯機日誌檔案   一個數據檔案只能屬於一個表空間   一個數據檔案一旦被加入到一個表空間中,就不能再從這個表空間中移走,也不能再加入到其他表空間中   建立新的表空間需要建立新的資料檔案   一個段segment只能屬於一個表空間,但可以屬於多個數據檔案   一個區extent只能屬於一個數據檔案,即區間(extent)不能跨越資料檔案     COMMIT後,資料不一定立即寫盤(資料檔案)   一個事務即使不被提交,也會被寫入到重做日誌中。 為什麼要知道這麼多,因為microsoft把很多的*作都打成包,*作人員只知道單擊"下一步"就可以達到目的,但是渾然不知sql server
是如何運轉,oracle幾乎什麼都可以自己設定!,不過也因為這樣,一個不小心,很可能就會把資料庫搞壞,或拖跨系統運算速度。 我講一些sql語句的差別 1. oracle檢視當前使用者下有什麼物件(表、檢視、同義詞、快照) SQL> select * from tab; 查看錶結構 SQL> describe 表名 而sql server是sp_help 2.如何實現某一欄位自動增加1?大家都知道,sql server有個自動遞增identity屬性而oracle是通過序列來實現的建立一個最小為1,最大為999999999的一個序列號會自動迴圈的序列 create sequence 序列名 increment by 1 start with 1 maxvalue 999999999 nocycle; 當向表中插入資料時,SQL語句寫法如下: SQL> insert into 表名 values(序列名.nextval,列1值,列2值); 3 如何來限制查詢所返回的行數? sql server 中用top子句,如select top 10 * from 表名而oracle利用rownum,rownum是oracle系統順序分配為從查詢返回的行的編號,返回的第一行分配的是1,第二行是2,依此類推,這個偽欄位可以用於限制查詢返回的總行數。只返回前10條紀錄 SQL> select * from 表名 where rownum<11; 4.系統函式很多不同如得到系統當前時間, ms sql 用getdate(), 而oracle用sysdate 在資料型別上 db2有個圖形字串是mssql所沒有的。graphic(X) x從1到127 它是一個雙位元組字元資料序列 在日期時間上,mssql是datetime和smalldatetime,db2還提供了date和time型,而mssql需要用函式來獲得。 mssql的uniqueidentifier在db2中沒有 別的基本上差別不大