時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)
數(shù)據(jù)查詢,是數(shù)據(jù)庫操作中最主要的功能之一;有時候數(shù)據(jù)庫查詢性能的好壞,直接關(guān)系到數(shù)據(jù)庫的運行效率,關(guān)系到數(shù)據(jù)庫的選型。下面筆者不談大道理,只是對其中對一些平時大家容易忽略的查詢小技巧做一些總結(jié)?;蛟S大家可能正在為此犯愁呢?
第一個技巧:利用連接符連接多個字段
如在員工基本信息表中,有員工姓名、員工職位、出身日期等等。如果現(xiàn)在視圖中這三個字段顯示在同一個字段中,并且中間有分割符。如我現(xiàn)在想顯示的結(jié)果為"經(jīng)理Victor出身于1976年5月3日"。這該如何處理呢?其實,這是比較簡單的,我們可以在Select查詢語句中,利用連接符把這些字段連接起來。
如可以這么寫查詢語句:
SELECT員工職位 ||’ ’ ||員工姓名||’出身于’||出身日期 as 員工出身信息 FROM 員工基本信息表;
通過這條語句就可以實現(xiàn)如上的需求。也就是說,我們在平時查詢中,可以利用||連接符把一些相關(guān)的字段連接起來。這在報表視圖中非常的有用。如筆者以前在設(shè)計圖書館管理系統(tǒng)的時候,在書的基本信息處有圖書的出版社、出版序列號等等內(nèi)容。但是,有時會在打印報表的時候,需要把這些字段合并成一個字段打印。為此,就需要利用這個連接符把這些字段連接起來。而且,利用連接符還可以在字段中間加入一些說明性的文字,以方便大家閱讀。如上面我在員工職位與員工姓名之間加入了空格;并且在員工姓名與出身日期之間加入了出身于幾個注釋性的文字。這些功能看起來比較小,但是卻可以大大的提高內(nèi)容的可讀性。這也是我們在數(shù)據(jù)庫設(shè)計過程中需要關(guān)注的一個內(nèi)容。
總之,令后采用連接符,可以提高我們報表的可讀性于靈活性。
第二個技巧:取消重復(fù)的行
如在人事管理系統(tǒng)中,有員工基本信息基本表。在這張表中,可能會有部門、職位、員工姓名、身份證件號碼等字段。若查詢這些內(nèi)容,可能不會有重復(fù)的行。但是,我若想知道,在公司內(nèi)部設(shè)置了哪些部門與職位的時候,并且這些部門與職位配置了相關(guān)人員。此時,又該如何查詢呢?
若我現(xiàn)在直接查詢部門表,其可以知道系統(tǒng)中具體設(shè)置了哪些部門與職位。但是,很有可能這些部門或者職位由于人事變動的關(guān)系,現(xiàn)在已經(jīng)沒有人了。所以,這里查詢出來的是所有的部門與職位信息,而不能夠保證這個部門或者職位一定有職員存在。也就是說,這不能夠滿足于我們上面的要求。
若我現(xiàn)在直接從員工信息表中查詢,雖然可以保證所查詢出來的部門與職位信息,一定有員工信息的存在。但是,此時查詢出來的部門與職位信息會有重復(fù)的行。如采購部門分工合作,可能會有采購采購小組長。此時,在查詢出來的部門與職位的信息中,就會有三條重復(fù)的記錄。
所以,以上兩種處理方式,都不能夠百分之百的滿足企業(yè)用戶的需求。此時,我們其實可以利用一個DISTINCT函數(shù),來消除其中查詢出來的重復(fù)行。
如我們可以利用SELECT DISTINCT 部門信息,職位信息 FROM 員工基本信息表。通過這條加了DISTINCT約束的查詢語句,不但可以查詢出所有有員工的職位與部門信息,而且,會把重復(fù)的記錄過濾掉,從而提高可閱讀性。
所以,在數(shù)據(jù)庫設(shè)計過程中,特別是在查詢語句的使用中,這個函數(shù)特別有用。
第三個技巧:勤用WHERE語句
我們都知道,數(shù)據(jù)庫查詢效率高不高,是我們評價數(shù)據(jù)庫設(shè)計好壞的一個重要標(biāo)準(zhǔn)。毋庸置疑,在數(shù)據(jù)庫查詢中勤用Where條件語句,是提高數(shù)據(jù)庫查詢性能的一個很重要的手段之一。特別是在設(shè)計到比較大的表中查詢符合條件的記錄過程中,利用WHERE條件語句加以限制,可以大幅度的提高查詢的響應(yīng)速度。
如在圖書館管理系統(tǒng)中,現(xiàn)在有人想查詢"注冊會計師"輔導(dǎo)用書的時候,雖然不在書的類別或者名稱中輸入"注冊會計師",先查詢出全部的紀(jì)錄,然后再一條條的看是否有相關(guān)的書籍信息,也是可行的。但是,這么處理的話,一方面系統(tǒng)響應(yīng)的速度會非常的慢,因為里面記錄很多。另一方面,查詢的結(jié)果看起來也會非常的頭疼。
其實,我們只需要在查詢中加入一些查詢的參數(shù),利用Where條件語句加以限制,則即可以提高數(shù)據(jù)庫響應(yīng)的速度,也可以找出最符合用戶需求的數(shù)據(jù)。
另外,我也接觸過一些在Oracle數(shù)據(jù)庫上設(shè)計的平臺型管理軟件,他們可以自定義相關(guān)的報表。在報表設(shè)計中,只要用戶在前臺設(shè)計平臺中,選中"大表查詢"的話,則這個平臺會在生成報表的時候,自動應(yīng)用Where條件語句,以提高前臺系統(tǒng)從數(shù)據(jù)庫查詢數(shù)據(jù)的效率。
所以,筆者認(rèn)為在Oracle數(shù)據(jù)庫系統(tǒng)設(shè)計中,要勤于使用Where語句。利用Where語句來提高數(shù)據(jù)庫查詢的效率。
第四個技巧:靈活使用COUNT函數(shù)
在查詢處理的時候,COUNT函數(shù)可以說是我們應(yīng)用的比較多的函數(shù)之一。如我們有時候需要統(tǒng)計員工的人數(shù)、統(tǒng)計圖書的種類數(shù)的時候,都需要使用到這個函數(shù)。不過,這個函數(shù)很多人可能會用,但是到靈活應(yīng)用的地步,還是有一點差距。
下面筆者就COUNT函數(shù)的一些應(yīng)用技巧談?wù)勛约旱男牡谩?/p>
一是要靈活放置COUNT函數(shù)的位置,因為利用COUNT函數(shù)統(tǒng)計記錄數(shù)的時候,是會考慮空行的記錄的。如在數(shù)據(jù)表中一般有序列字段與其它的有意義字段兩類。有時候可能序列字段中有內(nèi)容而其它字段中沒有內(nèi)容,則在利用COUNT函數(shù)統(tǒng)計記錄數(shù)量的時候,會把這個空記錄也考慮進(jìn)去。很明顯,則就會發(fā)生統(tǒng)計的錯誤。所以,這個COUNT函數(shù)該放在哪個位置上,還是比較講究的。一般的話,筆者試建議不要放在序列號字段上,而要放在一些關(guān)鍵的實體字段中。如統(tǒng)計員工人數(shù)的時候,則就可以放在員工姓名或者編號上等等。
二是靈活跟其它函數(shù)搭配使用。如在上面的例子中,筆者談到有時候用戶需要知道現(xiàn)在有員工編制的部門與職位有哪一些,我們可以利用DISTINCT函數(shù)來找出具體的部門。但是,我現(xiàn)在只想知道有編制的部門與職位具體有多少,此時,我們也可以利用COUNT 與DISTINCT函數(shù)結(jié)合應(yīng)用,找出我們所需要的數(shù)據(jù)。在COUNT函數(shù)中,可以指定ALL與DISTINCT選項。默認(rèn)的情況下,是ALL選項,表示統(tǒng)計所有的行,其中也包括重復(fù)的行。而DISTINCT就表示只統(tǒng)計不重復(fù)的行??梢?,COUNT函數(shù)跟其它函數(shù)搭配使用的話,可以簡化我們的查詢語句,提高查詢效率。
第五個技巧:只查詢時必須的字段
有時候,用戶不同的查詢需求都要用到同一張表。如在員工信息表中包含了很多內(nèi)容。有時候用戶想要知道正式員工有多少;管理層員工有多少;生產(chǎn)線員工又有哪些;或者想知道合同即將到期的員工有哪些。為此,就遇到一個問題,因為這些內(nèi)容基本上都是在同一張表中,那是在同一個視圖中實現(xiàn),而是根據(jù)需求不同,設(shè)計不同的視圖呢?
若單從技術(shù)上考慮,兩這都是可以實現(xiàn)的,不會有多大的難度。但是,若是從數(shù)據(jù)庫性能上考慮在,則還是采用不同的視圖來實現(xiàn)不同的需求為好。
一方面,若從安全方面講,則可以根據(jù)不同的視圖來控制相關(guān)的訪問權(quán)限??梢?,把視圖細(xì)化,在權(quán)限控制上則會更加的靈活。
另一方面,數(shù)據(jù)的查詢效率,跟數(shù)據(jù)內(nèi)容的多少也有非常密切的關(guān)系。如在查詢員工合同到期信息的時候,一般不需要員工的地址信息等等。若把這個信息也查詢出來的話,由于這個字段比較長,就會花費比較長的時間。所以,在數(shù)據(jù)庫設(shè)計中,我們要學(xué)會根據(jù)用戶不同的需求,設(shè)計不同的視圖。雖然可能這在設(shè)計的時候會比較花時間,但是,在確可以提高數(shù)據(jù)庫的性能與安全性。這筆生意還是劃得來的。
關(guān)鍵詞標(biāo)簽:Oracle,數(shù)據(jù)庫查詢
相關(guān)閱讀
熱門文章 Oracle中使用alter table來增加,刪除,修改列的語法 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 誤刪Oracle數(shù)據(jù)庫實例的控制文件 為UNIX服務(wù)器設(shè)置Oracle全文檢索
人氣排行 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 Oracle中使用alter table來增加,刪除,修改列的語法 ORACLE SQL 判斷字符串是否為數(shù)字的語句 ORACLE和SQL語法區(qū)別歸納(1) oracle grant 授權(quán)語句 ORACLE修改IP地址后如何能夠使用 如何加速Oracle大批量數(shù)據(jù)處理 Oracle刪除表的幾種方法