本站小編為你精心準(zhǔn)備了數(shù)據(jù)庫(kù)數(shù)據(jù)查詢參考范文,愿這些范文能點(diǎn)燃您思維的火花,激發(fā)您的寫作靈感。歡迎深入閱讀并收藏。
1.問題的描述
某單位根據(jù)上級(jí)部門的要求建立人員信息管理應(yīng)用系統(tǒng),它是人事管理信息系統(tǒng)(PersonnelManagementInformationSystem)的子系統(tǒng)。人員信息管理系統(tǒng)是對(duì)人員所有信息的全面管理,包括:基本信息、培訓(xùn)或進(jìn)修信息、履歷信息、工資變動(dòng)信息、離退信息、家庭成員及社會(huì)關(guān)系信息等等。根據(jù)中共中央組織部頒布的全國(guó)組織、干部、人事管理信息系統(tǒng)信息結(jié)構(gòu)體系的要求,對(duì)人員的信息描述共有43個(gè)信息集(對(duì)應(yīng)43張表),426個(gè)數(shù)據(jù)項(xiàng),本文根據(jù)數(shù)據(jù)庫(kù)設(shè)計(jì)的要求進(jìn)行加工,
在應(yīng)用中為保證數(shù)據(jù)的規(guī)范化,需充分利用國(guó)際代碼和組標(biāo)代碼,這樣做也可以節(jié)省存儲(chǔ)空間。將這些代碼表建成數(shù)據(jù)庫(kù)中的靜態(tài)表,包括:性別(GB2261)、籍貫(ZB01)、民族(GB3304)、婚姻狀況(GB4766)、政治面貌(GB4762)、學(xué)歷(GB4658)、工資變動(dòng)文件(ZB52)和離退狀態(tài)(GB12405)。它們的結(jié)構(gòu)基本相同,每個(gè)表中都有兩個(gè)字段,分別存儲(chǔ)代碼及內(nèi)容。
這些代碼表一旦建立,表中數(shù)據(jù)對(duì)應(yīng)用來講是相對(duì)不變的,所以稱為靜態(tài)表。在需要的時(shí)候,靜態(tài)表的數(shù)據(jù)可以修改,一般放在維護(hù)中進(jìn)行。
當(dāng)這些靜態(tài)表建成后,可得到完善的人員信息管理系統(tǒng)的數(shù)據(jù)模型,如圖1所示。
2.使用SQL語(yǔ)句
SQL(StructuredQueryLanguage)語(yǔ)言是1974年由Boyce和Chamberlin提出的,并在IBM公司SanJoseResearchLaboratory研制的SystemR上實(shí)現(xiàn)了這種語(yǔ)言。由于它功能豐富,語(yǔ)言簡(jiǎn)潔,使用方式靈活而倍受青睞,并扎根于計(jì)算機(jī)工業(yè)界及計(jì)算機(jī)用戶。
SQL是集數(shù)據(jù)操縱(DataManipulation)、數(shù)據(jù)定義(DataDefinition)與數(shù)據(jù)
控制(DataControl)為一體的關(guān)系數(shù)據(jù)語(yǔ)言。查詢是數(shù)據(jù)操縱語(yǔ)言中最主要的部分。從SQL的英文名稱:結(jié)構(gòu)化的查詢語(yǔ)言,即能看出SQL在查詢中的貢獻(xiàn),可以說數(shù)據(jù)庫(kù)查詢語(yǔ)句是SQL語(yǔ)言的核心。
語(yǔ)句含義:根據(jù)WHERE子句中的條件表達(dá)式,從基本表(或視圖)中找出滿足條件的元組,按SELECT子句中的目標(biāo)列,選出元組中的分量形成表。GROUP子句將結(jié)果按列名1分組,每個(gè)組產(chǎn)生結(jié)果表中的一個(gè)元組;ORDER子句使結(jié)果表按列名2升序或降序排列。這是最基本的方法,只要能夠?qū)?kù)操作,就可以實(shí)施所需要的查詢。例如:想了解所有離退休人員的基本情況及他們的離退休費(fèi),可以鍵入如下語(yǔ)句:
但這種方法要求操作者對(duì)數(shù)據(jù)庫(kù)的結(jié)構(gòu)有充分的了解,例此數(shù)據(jù)庫(kù)有多少個(gè)表,有多少個(gè)數(shù)據(jù)項(xiàng),這些數(shù)據(jù)項(xiàng)分別屬于哪一個(gè)表等。顯然,這是數(shù)據(jù)庫(kù)管理員的工作范疇。對(duì)用戶,即使了解SQL語(yǔ)法,也只能完成簡(jiǎn)單的查詢,對(duì)復(fù)雜的查詢工作簡(jiǎn)直是望塵莫及了。也就是說單單是SQL語(yǔ)句,并不能很好地完成數(shù)據(jù)庫(kù)的復(fù)雜查詢,必須要與其他技術(shù)配合使用。另外,使用SQL語(yǔ)句進(jìn)行查詢,只能直接反映每一列的信息,而我們的43張基本表是盡可能地保存代碼以保證數(shù)據(jù)的規(guī)范且節(jié)約存儲(chǔ)空間。也就是說,我們能得到準(zhǔn)確的查詢結(jié)果,但得到地卻是整篇的代碼(例上表中的sex列),這對(duì)開發(fā)者和使用者都難以接受。如果能夠?qū)⒄拇a自動(dòng)轉(zhuǎn)換成所表達(dá)的文字,那當(dāng)然是再好不過了。
3.借助PowerBuilder實(shí)現(xiàn)綜合信息的查詢
目前,隨著工具軟件的發(fā)展和廣泛采用,使數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的開發(fā)如虎添翼,其中PowerBuilder以其獨(dú)特的數(shù)據(jù)窗口(DataWindow)倍受歡迎。
PowerBuider是美國(guó)著名的數(shù)據(jù)庫(kù)應(yīng)用開發(fā)工具生產(chǎn)廠家Powersoft公司于1991年6月推出的功能強(qiáng)大、性能優(yōu)異的開發(fā)工具,它是一種面向?qū)ο蟮?、具有可視圖形界面的、快速的交互開發(fā)工具。智能化的數(shù)據(jù)窗口對(duì)象是其精華所在。利用此對(duì)象可以操作關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)而無(wú)需寫入SQL語(yǔ)句,即可以直接檢索、更新和用多種形式表現(xiàn)數(shù)據(jù)源中的數(shù)據(jù)。但要注意,必須使數(shù)據(jù)窗口成為窗口(Window)下數(shù)據(jù)窗口控制的一個(gè)連接對(duì)象,數(shù)據(jù)窗口才能使用戶在應(yīng)用執(zhí)行期間訪問數(shù)據(jù)庫(kù)中的數(shù)據(jù)。
利用PowerBuilder提供的內(nèi)部查詢機(jī)制,我們即可以讓數(shù)據(jù)窗口作為查詢條件的輸入,又可以讓該數(shù)據(jù)窗口作為查詢結(jié)果的輸出,這樣就可以使數(shù)據(jù)窗口中的所有數(shù)據(jù)項(xiàng)進(jìn)行自由組合的查詢。例如:在窗口W_que上建立兩個(gè)數(shù)據(jù)窗口控制dw_1和dw_2,分別連接兩個(gè)數(shù)據(jù)窗口對(duì)象dw_que1與dw_que2,其中dw_1用于輸入查詢條件,而dw_2用于顯示滿足查詢條件的所有元組。事實(shí)上條件的輸入及元組的顯示完全可以在一個(gè)數(shù)據(jù)窗口中實(shí)現(xiàn),考慮到這兩種操作的差別(例:條件輸入可編輯,而元組顯示不可編輯;條件輸入可為某一范圍,而元組顯示僅為滿足條件的所有紀(jì)錄……)將其用兩個(gè)數(shù)據(jù)窗口控制來實(shí)現(xiàn)。這就要求dw_2與dw_1數(shù)據(jù)共享,即要求dw_que1與dw_que2兩數(shù)據(jù)窗口的數(shù)據(jù)源完全相同,如圖2所示。(略)
用這種方法實(shí)現(xiàn)查詢優(yōu)點(diǎn)突出,例:通過設(shè)置數(shù)據(jù)窗口中對(duì)應(yīng)列的編輯風(fēng)格(
EditStyles)為相應(yīng)的下拉式數(shù)據(jù)窗口(DropDownDataWindow),使顯示的元組文字化。注意,這要事先建好下拉式數(shù)據(jù)窗口。設(shè)置數(shù)據(jù)窗口中對(duì)應(yīng)列的編輯風(fēng)格同樣可滿足其它顯示需要。利用數(shù)據(jù)窗口的風(fēng)格特點(diǎn):查詢表的列寬、列序可自由改變,甚至可以覆蓋掉一些列,以達(dá)到更滿足查詢顯示的需要。
綜合查詢的信息來自多個(gè)表,改變數(shù)據(jù)窗口的數(shù)據(jù)源,采用多表連接的數(shù)據(jù)源即可實(shí)現(xiàn)。但是如我們問題的描述,如果我們需要的查詢項(xiàng)隨機(jī)地來自這43張表中的數(shù)據(jù)項(xiàng),顯示項(xiàng)也是隨機(jī)地。這種任意條件的組合,可選輸出項(xiàng)的顯示稱為動(dòng)態(tài)查詢(DynamicQuery)依然采用上述方法,數(shù)據(jù)窗口dw_que1與dw_que2的數(shù)據(jù)源將是這43張表的連接,先不說效率問題,單從這426個(gè)項(xiàng)中輸入查詢條件,又顯示這426個(gè)項(xiàng),就使人敬而遠(yuǎn)之。因?yàn)?,在每一次查詢前,都不了解此次查詢的要求是什么,這樣,每張表中的每一個(gè)數(shù)據(jù)項(xiàng)都缺一不可;另一方面,每一次的查詢,一旦查詢條件確定、顯示條目也確定后,我們會(huì)發(fā)現(xiàn),每一次有意義的查詢并不是需要全部的43張表,換言之,每一次查詢沒有必要將43張表全部連結(jié),而應(yīng)只連接那些被選中數(shù)據(jù)項(xiàng)所在的表,即數(shù)據(jù)源是動(dòng)態(tài)產(chǎn)生的。由于數(shù)據(jù)源不確定,數(shù)據(jù)窗口就無(wú)法設(shè)計(jì),動(dòng)態(tài)查詢無(wú)法用這種方法實(shí)現(xiàn)。
4.動(dòng)態(tài)查詢的實(shí)現(xiàn)
在某些實(shí)際的應(yīng)用系統(tǒng)開發(fā)中,由于用戶在開發(fā)前提不出查詢的需求,而在系統(tǒng)運(yùn)行中希望能夠?qū)λ械臄?shù)據(jù)項(xiàng)任意組合進(jìn)行查詢,以滿足來自多方的需求,實(shí)現(xiàn)動(dòng)態(tài)地查詢(即隨機(jī)地從43張表中選擇數(shù)據(jù)項(xiàng)進(jìn)行組合作為查詢條件并任意地選擇數(shù)據(jù)項(xiàng)作為顯示條目)。對(duì)于此類查詢的實(shí)現(xiàn)要利用PowerBuilder通過編程的方式在運(yùn)行時(shí)動(dòng)態(tài)地創(chuàng)建數(shù)據(jù)窗口,并動(dòng)態(tài)地控制數(shù)據(jù)窗口。
也就是動(dòng)態(tài)地生成stringa,stringb,stringc.由用戶輸入要顯示的列,一旦輸入完畢,列名就隨之確定,將所有列名拼成一個(gè)“串”,中間用“,”分隔,形如“columm1,column2,column3,...,columnr”,則動(dòng)態(tài)地生成stringa;同樣由用戶輸入查詢條件,包括相應(yīng)的列、滿足的條件或范圍、邏輯關(guān)系等,將這些條件拚成一個(gè)串,即為stringc,顯然,所有的列名都確定了,他們所在的表名也確定了,按照stringb的語(yǔ)法規(guī)則即可構(gòu)造。
注意:上面的stringc由兩部分(表間關(guān)系stringc1及查詢條件stringc2)組成;表名串stringb與表間關(guān)系stringc1、查詢條件stringc2及顯示條目stringa均有關(guān)。
在實(shí)現(xiàn)的過程中:為貼近實(shí)際應(yīng)用,習(xí)慣上,先輸入查詢條件,再輸入顯示條目。即在輸入查詢條件后,生成strinc2,stringb,stringc1;然后,再在輸入顯示條目后生成stringa,并修改stringc1,stringb。最后形成SQL語(yǔ)法:
這樣就實(shí)現(xiàn)了用戶要求的隨機(jī)查詢。
在真實(shí)系統(tǒng)中,用戶在輸入查詢條件時(shí)希望通過選項(xiàng)方式錄入查詢信息,由于庫(kù)表中存放的大量信息為代碼,這就需要在程序中先把錄入的文字信息轉(zhuǎn)化成相應(yīng)的代碼再連接到查詢條件中。為簡(jiǎn)化輸入,提高準(zhǔn)確性,可采用代碼輸入,即動(dòng)態(tài)地嵌套下拉式數(shù)據(jù)窗口。在顯示查詢結(jié)果的數(shù)據(jù)窗口中,事先不能嵌套下拉式數(shù)據(jù)窗口,可預(yù)先做一個(gè)函數(shù),在程序運(yùn)行中根據(jù)所選的列把代碼轉(zhuǎn)化成所對(duì)應(yīng)的漢字顯示,這樣更完善了用戶要求的隨機(jī)查詢。
根據(jù)數(shù)據(jù)窗口的動(dòng)態(tài)特性,對(duì)于那些運(yùn)行時(shí)才能確定的數(shù)據(jù)窗口采用動(dòng)態(tài)方式創(chuàng)建,使應(yīng)用程序能更靈活地滿足用戶的需求。
5.小結(jié)
使用SQL語(yǔ)句是查詢操作的基礎(chǔ),但如何根據(jù)查詢的要求自動(dòng)的構(gòu)造最貼切的SQL語(yǔ)句是問題的關(guān)鍵。利用PowerBuilder中的數(shù)據(jù)窗口使問題簡(jiǎn)化,如何通過嵌入動(dòng)態(tài)生成的SQL語(yǔ)句動(dòng)態(tài)地生成數(shù)據(jù)窗口是解決問題的根本。將查詢條件的輸入實(shí)現(xiàn)多級(jí)菜單選擇將查詢結(jié)果文字化,使復(fù)雜查詢問題解決得更完善。動(dòng)態(tài)查詢的方法,不僅能應(yīng)用于人事管理信息系統(tǒng),同時(shí)也是解決其他需要復(fù)雜查詢的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的途徑。這種動(dòng)態(tài)查詢方法的在數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的使用,避免了應(yīng)用系統(tǒng)開發(fā)中開發(fā)者冥思苦想所有可能的查詢條件,而系統(tǒng)運(yùn)行中用戶總遇到有些查詢要求無(wú)法滿足的矛盾。動(dòng)態(tài)查詢的實(shí)現(xiàn),縮短了開發(fā)周期,減少了產(chǎn)品維護(hù)的工作。