資料查詢,是資料庫操作中最主要的功能之一;有時候資料庫查詢效能的好壞,直接關係到資料庫的運行效率,關係到資料庫的選型。下面筆者不談大道理,只是對其中對一些平時大家容易忽略的查詢小技巧做一些總結。或許大家可能正在為此犯愁呢?
第一個技巧:利用串連符串連多個欄位。
如在員工基本資料表中,有員工姓名、員工職位、出身日期等等。如果現在視圖中這三個欄位顯示在同一個欄位中,並且中間有分割符。如我現在想顯示的結果為“經理Victor出身於1976年5月3日”。這該如何處理呢?其實,這是比較簡單的,我們可以在Select查詢語句中,利用串連符把這些欄位串連起來。
如可以這麼寫查詢語句:
SELECT員工職位 ||’ ’ ||員工姓名||’出身於’||出身日期 as 員工出身資訊 FROM 員工基本資料表;
通過這條語句就可以實現如上的需求。也就是說,我們在平時查詢中,可以利用||串連符把一些相關的欄位串連起來。這在報表視圖中非常的有用。如筆者以前在設計圖書館管理系統的時候,在書的基本資料處有圖書的出版社、出版序號等等內容。但是,有時會在列印報表的時候,需要把這些欄位合并成一個欄位列印。為此,就需要利用這個串連符把這些欄位串連起來。而且,利用串連符還可以在欄位中間加入一些說明性的文字,以方便大家閱讀。如上面我在員工職位與員工姓名之間加入了空格;並且在員工姓名與出身日期之間加入了出身於幾個注釋性的文字。這些功能看起來比較小,但是卻可以大大的提高內容的可讀性。這也是我們在資料庫設計過程中需要關注的一個內容。
總之,令後採用串連符,可以提高我們報表的可讀性於靈活性。
第二個技巧:取消重複的行。
如在人事管理系統中,有員工基本資料基本表。在這張表中,可能會有部門、職位、員工姓名、身份證件號碼等欄位。若查詢這些內容,可能不會有重複的行。但是,我若想知道,在公司內部設定了哪些部門與職位的時候,並且這些部門與職位配置了相關人員。此時,又該如何查詢呢?
若我現在直接查詢部門表,其可以知道系統中具體設定了哪些部門與職位。但是,很有可能這些部門或者職位由於人事變動的關係,現在已經沒有人了。所以,這裡查詢出來的是所有的部門與職位資訊,而不能夠保證這個部門或者職位一定有職員存在。也就是說,這不能夠滿足於我們上面的要求。
若我現在直接從員工資訊表中查詢,雖然可以保證所查詢出來的部門與職位資訊,一定有員工資訊的存在。但是,此時查詢出來的部門與職位資訊會有重複的行。如採購部門分工合作,可能會有採購採購小組長。此時,在查詢出來的部門與職位的資訊中,就會有三條重複的記錄。
所以,以上兩種處理方式,都不能夠百分之百的滿足企業使用者的需求。此時,我們其實可以利用一個DISTINCT函數,來消除其中查詢出來的重複行。
如我們可以利用SELECT DISTINCT 部門資訊,職位資訊 FROM 員工基本資料表。通過這條加了DISTINCT約束的查詢語句,不但可以查詢出所有有員工的職位與部門資訊,而且,會把重複的記錄過濾掉,從而提高可閱讀性。
所以,在資料庫設計過程中,特別是在查詢語句的使用中,這個函數特別有用。
第三個技巧:勤用WHERE語句。
我們都知道,資料庫查詢效率高不高,是我們評價資料庫設計好壞的一個重要標準。毋庸置疑,在資料庫查詢中勤用Where條件陳述式,是提高資料庫查詢效能的一個很重要的手段之一。特別是在設計到比較大的表中查詢合格記錄過程中,利用WHERE條件陳述式加以限制,可以大幅度的提高查詢的響應速度。
如在圖書館管理系統中,現在有人想查詢“註冊會計師”輔導用書的時候,雖然不在書的類別或者名稱中輸入“註冊會計師”,先查詢出全部的紀錄,然後再一條條的看是否有相關的書籍資訊,也是可行的。但是,這麼處理的話,一方面系統響應的速度會非常的慢,因為裡面記錄很多。另一方面,查詢的結果看起來也會非常的頭疼。
其實,我們只需要在查詢中加入一些查詢的參數,利用Where條件陳述式加以限制,則即可以提高資料庫響應的速度,也可以找出最符合使用者需求的資料。
另外,我也接觸過一些在Oracle資料庫上設計的平台型管理軟體,他們可以自訂相關的報表。在報表設計中,只要使用者在前台設計平台中,選中“大表查詢”的話,則這個平台會在產生報表的時候,自動應用Where條件陳述式,以提高前台系統從資料庫查詢資料的效率。
所以,筆者認為在Oracle資料庫系統設計中,要勤於使用Where語句。利用Where語句來提高資料庫查詢的效率。