08年在大學學習資料庫的筆記

iSQlServer發表於2010-04-19

這是08年在大學時候學習SqlServer的筆記,和各位交流下,溫故而知新。 

(1)臨時表,#table

(2)表變數,

上面2個使用的區別是小的表一般使用表變數,大的表使用臨時表。這2個和表一樣使用。不過他們使用完後就消失了,有生命週期的。

g.l 區域性/全域性 區別在那? # /##的區別 優點,什麼地方使用,能否儲存大小資料?.

2008-05-27 區域性與全域性的區別,就是於區域性就是對於當前登陸的使用者有效,全域性都全部登陸的使用者都有效.
本地臨時表的名稱以單個數字符號 (#) 打頭;它們僅對當前的使用者連線是可見的;當使用者從 SQL Server 例項斷開連線時被刪除。全域性臨時表的名稱以兩個數字符號 (##) 打頭,建立後對任何使用者都是可見的,當所有引用該表的使用者從 SQL Server 斷開連線時被刪除。

***派生表***

就是一箇中間表,在查詢的過程中生成,沒有什麼的,一般生成的這個表指定一個別名,主要是便於使用

(3)CTE, G.L

這個在2005裡面很酷,我記得的是有2個,一個是可以實現遞迴,實現樹的資料結構,及層次的迭代,另外一個就是在檢視中不能返回前面幾個(因為返回的確定),可以使用這個來替代,可以認為在一般的表中有限制時都可以用這個來轉換

(4)UDF,

使用者自定義函式,可以用變數來傳遞引數,也可以用子查詢來傳遞引數

***遊標***,
這個是程式導向的處理方式,和我們一般的 select  from...結構的面向集合的方式是截然不同的,就像一個是程式導向,一個物件導向的一樣。使用遊標有開銷,一般應該考慮使用,但是在2種情況(目前知道的)可以使用考慮遊標,一種是排序的時候,但是排序的內部分組有大有小(視具體的情況),如果分組很小,遊標體現不出來優勢,用集合的方式處理也是可以的,甚至速度更快,要看具體的情況,如果分組大,則應該用遊標,另一種是可以自定義函式

(5)檢視

提供一種使用者的看資料的方式,定義在資料字典中存在,是一個虛表

一般把多表的查詢放在一個檢視上使用。

 (6)索引,

有組合索引,聚集索引,非聚集索引,覆蓋索引有include()的關鍵字

索引是物理存在的,主要是提高查詢速度的

(7)觸發器,

三種觸發器的使用:insert 、delete,update,

instead of 這個可以處理檢視不能實現的基於多表的更新

也可以將多個觸發器放在一起使用。

(8)約束
恢復刪除的表,看一看日誌能不能搞定. g.l
這兩個是維護資料的完整性和一致性,在設定約束的時候有的時候也同步建立非聚集索引,

設立主鍵的時候是同時建立聚集索引,

(9)聚合,

裡面的一些函式的使用,sum....,還有很多的聚合方面的使用,到時候可以查

(10)旋轉,

2005 裡面的pivot ,是分組的多行旋轉為一列的情況,分3步執行,

1 隱式分組,2 隔離值,3 使用集合函式

而unpivot的功能則相反

(11)數字輔助表,

個人認為這個最酷了,可以優化很多的語句,必須在資料庫裡建一個

g.l 可以把800M資料庫掛上,做一個示例:比如select * from

 (12)儲存過程

主要是已經編譯好的,以後就直接拿來使用,所以下次執行的時候不需要重新 編譯,它是將多個sql語句快組織到 了一起,觸發器是一個特殊的儲存過程。

 

(13)還有null值,這個也很重要,在多表查詢的時候就是使用這個來的,還有一些在其他的情況時候也必須清楚。

空值(null)-什麼都沒有的值 

  

 空值並不包括零,一個或者多個空格組成的字串,以及長度的字串

 

  1)零可以有幾個非常廣泛的含義,他可以表示一個賬目平衡的那種狀態,當前可用的頭等艙的票的數目,

  或者一個產品的庫存水平

 

  2)在SQL中,一個或者多個空格組成的字串是有著某種含義的,三個空格組成的’   ’和由三個字母組成

  的字串‘abc’一樣有著合法性的。

 

  3)零長度的字串在某些特定的場合下也是具有一定的意義的。比如在一個僱員表中,一個列MiddleInitial

  的一個長度  的字串,可能描述的事實是他的名字中沒有首字母大寫。

 

  4)空值在某些場合非常有用:該列的值不明確的,該列的值未知的,該列的任何可能的值都不能使用某一指定行。

 

  5)空值對數學操作有不利影響:包含所有空值的操作其結果都是空值

 

  6)邏輯操作

 null and null=null,  null and true=null,  null and false=false

 ( null or null )=null,  (null or true )=true,  (null or false)=null

 ( not null) =null

 7) 值為空值的就是那些行所表示的也就是表1和表2的差值,相對於左連線而言的,對於右連線,一次類推。

  可以說檢驗空值的outer join 是計算2個集合差值的另一種方式。

 8)所有的查詢篩選器(on,where,having)都把unkonwn 當作false 處理。

 9)unique約束,排序操作,分組操作把2個null值是相等的。

 (14)還有一個over關鍵字,這個也很好,可以在排名函式(有3個)裡面使用,僅在select 階段 和order by 階段可以使用,其他的階段是不能使用的

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-660167/,如需轉載,請註明出處,否則將追究法律責任。

相關文章