利用工具進行數(shù)據(jù)庫數(shù)據(jù)的復(fù)雜查詢_第1頁
利用工具進行數(shù)據(jù)庫數(shù)據(jù)的復(fù)雜查詢_第2頁
利用工具進行數(shù)據(jù)庫數(shù)據(jù)的復(fù)雜查詢_第3頁
利用工具進行數(shù)據(jù)庫數(shù)據(jù)的復(fù)雜查詢_第4頁
利用工具進行數(shù)據(jù)庫數(shù)據(jù)的復(fù)雜查詢_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、利用工具進行數(shù)據(jù)庫數(shù)據(jù)的復(fù)雜查詢      關(guān)鍵詞:查詢 動態(tài) 數(shù)據(jù)窗口當(dāng)今數(shù)據(jù)庫技術(shù)已成為計算機應(yīng)用的核心技術(shù),可以認為當(dāng)今任何計算機信息系統(tǒng)和計算機應(yīng)用系統(tǒng)都與數(shù)據(jù)庫的應(yīng)用分不開,數(shù)據(jù)庫已成為其核心和基礎(chǔ)。建立數(shù)據(jù)庫應(yīng)用系統(tǒng)是要充分利用數(shù)據(jù)庫中的數(shù)據(jù)。對數(shù)據(jù)庫中的數(shù)據(jù)進行的操作除增加(Insert)、更改(update)和刪除(delete)外,最常用,也是重要的是查詢操作。即便是最簡單的數(shù)據(jù)庫應(yīng)用系統(tǒng),也離不開查詢功能,查詢可以說是進行數(shù)據(jù)管理的重要手段,不過也是數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)過程中較困難、花時間、有一定難度的部分。1. 問

2、題的描述某單位根據(jù)上級部門的要求建立人員信息管理應(yīng)用系統(tǒng),它是人事管理信息系統(tǒng)(Personnel Management Information System)的子系統(tǒng)。人員信息管理系統(tǒng)是對人員所有信息的全面管理,包括:基本信息、培訓(xùn)或進修信息、履歷信息、工資變動信息、離退信息、家庭成員及社會關(guān)系信息等等。根據(jù)中共中央組織部頒布的全國組織、干部、人事管理信息系統(tǒng)信息結(jié)構(gòu)體系的要求,對人員的信息描述共有43個信息集(對應(yīng)43張表),426個數(shù)據(jù)項,本文根據(jù)數(shù)據(jù)庫設(shè)計的要求進行加工,只列出3張表(table)。1)表名:基本信息 編碼:personnel主碼 字段編碼 數(shù)據(jù)類型 長度 字段名稱pe

3、rsonnel_id char 9 人員代碼name varchar 20 姓名sex char 1 性別birthday datetime 出生日期native_place char 6 籍貫 nationality char 2 民族marriage char 1 婚姻狀況 workday datetime 參加工作時間 party char 2 政治面貌 graduaton char 2 學(xué)歷 department char 30 所在單位 identification char 15 身份證號 cul_field char 6 培訓(xùn)專業(yè)(2)表名:工資變動信息 編碼:wages主碼 外

4、碼 字段編碼 數(shù)據(jù)類型 長度 字段名稱* * personnel_id char 9 人員代碼 sa_id char 3 人員內(nèi)碼 change_day datetime 工資變動日期 sa_file_num char 3 工資變動文件 salary money 工資 3)表名:離退信息 編碼:retirement主碼 外碼 字段編碼 數(shù)據(jù)類型 長度 字段名稱* * personnel_id char 9 人員代碼ret_day datetime 離退日期rel_style char 2 離退類別pay money 離退休費comment text 離退說明在應(yīng)用中為保證數(shù)據(jù)的規(guī)范化,需充分利

5、用國際代碼和組標(biāo)代碼,這樣做也可以節(jié)省存儲空間。將這些代碼表建成數(shù)據(jù)庫中的靜態(tài)表,包括:性別(GB2261)、籍貫(ZB01)、民族(GB3304)、婚姻狀況(GB4766)、政治面貌(GB4762)、學(xué)歷(GB4658)、工資變動文件(ZB52)和離退狀態(tài)(GB12405)。它們的結(jié)構(gòu)基本相同,每個表中都有兩個字段,分別存儲代碼及內(nèi)容。以性別為例:表名:性別 編碼:GB2261字段編碼 數(shù)據(jù)類型 長度 字段名稱-code char 2 代碼comment char 4 內(nèi)容表中數(shù)據(jù):code comment-男性 女性 這些代碼表一旦建立,表中數(shù)據(jù)對應(yīng)用來講是相對不變的,所以稱為靜態(tài)表。在需

6、要的時候,靜態(tài)表的數(shù)據(jù)可以修改,一般放在維護中進行。當(dāng)這些靜態(tài)表建成后,可得到完善的人員信息管理系統(tǒng)的數(shù)據(jù)模型,如圖1所示。(略)2.使用SQL語句SQL(Structured Query Language)語言是1974年由Boyce和Chamberlin提出的,并在IBM公司San Jose Research Laboratory研制的System R上實現(xiàn)了這種語言。由于它功能豐富,語言簡潔,使用方式靈活而倍受青睞,并扎根于計算機工業(yè)界及計算機用戶。SQL是集數(shù)據(jù)操縱(Data Manipulation)、數(shù)據(jù)定義(Data Definition)與數(shù)據(jù)控制(Data Control)為

7、一體的關(guān)系數(shù)據(jù)語言。查詢是數(shù)據(jù)操縱語言中最主要的部分。從SQL的英文名稱:結(jié)構(gòu)化的查詢語言,即能看出SQL在查詢中的貢獻,可以說數(shù)據(jù)庫查詢語句是SQL語言的核心。 SQL查詢語句只使用命令動詞,SELECT一般格式: SELECT目標(biāo)列FROM基本表(或視圖)WHERE條件表達式GROUP BY列名1HAVING內(nèi)部函數(shù)表達式ORDER BY列名2ASCDESC格式說明:中的內(nèi)容為根據(jù)需要的具體內(nèi)容;中的內(nèi)容為可選項。語句含義:根據(jù)WHERE子句中的條件表達式,從基本表(或視圖)中找出滿足條件的元組,按SELECT子句中的目標(biāo)列,選出元組中的分量形成表。GROUP子句將結(jié)果按列名1分組,每個組

8、產(chǎn)生結(jié)果表中的一個元組;ORDER子句使結(jié)果表按列名2升序或降序排列。 這是最基本的方法,只要能夠?qū)觳僮鳎涂梢詫嵤┧枰牟樵儭@纾合肓私馑须x退休人員的基本情況及他們的離退休費,可以鍵入如下語句:SELECT DISTINCT retirement.personnel_id,name,sex,birthday,workday,retirement.payFROM personnel,retirementWHERE personnel.personnel_id=retirement.personnel_id執(zhí)行后得到下列列表,顯示所需信息:personnel_id name sex bi

9、rthday workday pay-1 林立蘭 1 1919/03/21 1994/05/06 1,187.0013 安 靜 2 1935/05/04 1954/11/13 457.302 付石龍 1 1928/03/21 1935/05/06 947.005 魏 芳 2 1917/05/21 1933/05/21 937.008 李 四 1 1939/05/31 1960/07/13 1,128.809 王麗立 1 1917/05/21 1933/05/21 745.00 但這種方法要求操作者對數(shù)據(jù)庫的結(jié)構(gòu)有充分的了解,例此數(shù)據(jù)庫有多少個表,有多少個數(shù)據(jù)項,這些數(shù)據(jù)項分別屬于哪一個表等。顯

10、然,這是數(shù)據(jù)庫管理員的工作范疇。對用戶,即使了解SQL語法,也只能完成簡單的查詢,對復(fù)雜的查詢工作簡直是望塵莫及了。也就是說單單是SQL語句,并不能很好地完成數(shù)據(jù)庫的復(fù)雜查詢,必須要與其他技術(shù)配合使用。另外,使用SQL語句進行查詢,只能直接反映每一列的信息,而我們的43張基本表是盡可能地保存代碼以保證數(shù)據(jù)的規(guī)范且節(jié)約存儲空間。也就是說,我們能得到準(zhǔn)確的查詢結(jié)果,但得到地卻是整篇的代碼(例上表中的sex列),這對開發(fā)者和使用者都難以接受。如果能夠?qū)⒄拇a自動轉(zhuǎn)換成所表達的文字,那當(dāng)然是再好不過了。3. 借助PowerBuilder實現(xiàn)綜合信息的查詢目前,隨著工具軟件的發(fā)展和廣泛采用,使數(shù)據(jù)庫

11、應(yīng)用系統(tǒng)的開發(fā)如虎添翼,其中PowerBuilder以其獨特的數(shù)據(jù)窗口(DataWindow)倍受歡迎。PowerBuider是美國著名的數(shù)據(jù)庫應(yīng)用開發(fā)工具生產(chǎn)廠家Powersoft公司于1991年6月推出的功能強大、性能優(yōu)異的開發(fā)工具,它是一種面向?qū)ο蟮摹⒕哂锌梢晥D形界面的、快速的交互開發(fā)工具。智能化的數(shù)據(jù)窗口對象是其精華所在。利用此對象可以操作關(guān)系數(shù)據(jù)庫的數(shù)據(jù)而無需寫入SQL語句,即可以直接檢索、更新和用多種形式表現(xiàn)數(shù)據(jù)源中的數(shù)據(jù)。但要注意,必須使數(shù)據(jù)窗口成為窗口(Window)下數(shù)據(jù)窗口控制的一個連接對象,數(shù)據(jù)窗口才能使用戶在應(yīng)用執(zhí)行期間訪問數(shù)據(jù)庫中的數(shù)據(jù)。利用PowerBuilder提

12、供的內(nèi)部查詢機制,我們即可以讓數(shù)據(jù)窗口作為查詢條件的輸入,又可以讓該數(shù)據(jù)窗口作為查詢結(jié)果的輸出,這樣就可以使數(shù)據(jù)窗口中的所有數(shù)據(jù)項進行自由組合的查詢。例如:在窗口W_que上建立兩個數(shù)據(jù)窗口控制dw_1和dw_2,分別連接兩個數(shù)據(jù)窗口對象dw_que1與dw_que2,其中dw_1用于輸入查詢條件,而dw_2用于顯示滿足查詢條件的所有元組。事實上條件的輸入及元組的顯示完全可以在一個數(shù)據(jù)窗口中實現(xiàn),考慮到這兩種操作的差別(例:條件輸入可編輯,而元組顯示不可編輯;條件輸入可為某一范圍,而元組顯示僅為滿足條件的所有紀(jì)錄)將其用兩個數(shù)據(jù)窗口控制來實現(xiàn)。這就要求dw_2與dw_1數(shù)據(jù)共享,即要求dw_q

13、ue1與dw_que2兩數(shù)據(jù)窗口的數(shù)據(jù)源完全相同,如圖2所示。(略)用這種方法實現(xiàn)查詢優(yōu)點突出,例:通過設(shè)置數(shù)據(jù)窗口中對應(yīng)列的編輯風(fēng)格(Edit Styles)為相應(yīng)的下拉式數(shù)據(jù)窗口(DropDownDataWindow),使顯示的元組文字化。注意,這要事先建好下拉式數(shù)據(jù)窗口。設(shè)置數(shù)據(jù)窗口中對應(yīng)列的編輯風(fēng)格同樣可滿足其它顯示需要。利用數(shù)據(jù)窗口的風(fēng)格特點:查詢表的列寬、列序可自由改變,甚至可以覆蓋掉一些列,以達到更滿足查詢顯示的需要。綜合查詢的信息來自多個表,改變數(shù)據(jù)窗口的數(shù)據(jù)源,采用多表連接的數(shù)據(jù)源即可實現(xiàn)。但是如我們問題的描述,如果我們需要的查詢項隨機地來自這43張表中的數(shù)據(jù)項,顯示項也是隨

14、機地。這種任意條件的組合,可選輸出項的顯示稱為動態(tài)查詢(Dynamic Query)依然采用上述方法,數(shù)據(jù)窗口dw_que1與dw_que2的數(shù)據(jù)源將是這43張表的連接,先不說效率問題,單從這426個項中輸入查詢條件,又顯示這426個項,就使人敬而遠之。因為,在每一次查詢前,都不了解此次查詢的要求是什么,這樣,每張表中的每一個數(shù)據(jù)項都缺一不可;另一方面,每一次的查詢,一旦查詢條件確定、顯示條目也確定后,我們會發(fā)現(xiàn),每一次有意義的查詢并不是需要全部的43張表,換言之,每一次查詢沒有必要將43張表全部連結(jié),而應(yīng)只連接那些被選中數(shù)據(jù)項所在的表,即數(shù)據(jù)源是動態(tài)產(chǎn)生的。由于數(shù)據(jù)源不確定,數(shù)據(jù)窗口就無法設(shè)

15、計,動態(tài)查詢無法用這種方法實現(xiàn)。4. 動態(tài)查詢的實現(xiàn)在某些實際的應(yīng)用系統(tǒng)開發(fā)中,由于用戶在開發(fā)前提不出查詢的需求,而在系統(tǒng)運行中希望能夠?qū)λ械臄?shù)據(jù)項任意組合進行查詢,以滿足來自多方的需求,實現(xiàn)動態(tài)地查詢(即隨機地從43張表中選擇數(shù)據(jù)項進行組合作為查詢條件并任意地選擇數(shù)據(jù)項作為顯示條目)。對于此類查詢的實現(xiàn)要利用PowerBuilder通過編程的方式在運行時動態(tài)地創(chuàng)建數(shù)據(jù)窗口,并動態(tài)地控制數(shù)據(jù)窗口。動態(tài)地創(chuàng)建一個數(shù)據(jù)窗口,應(yīng)用程序需要執(zhí)行下列任務(wù):·動態(tài)地構(gòu)造SQL語句。·用符合數(shù)據(jù)窗口語法的字符串,為現(xiàn)在的數(shù)據(jù)窗口控制創(chuàng)建一個數(shù)據(jù)窗口對象。具體實現(xiàn)如下:1)動態(tài)地生成SQ

16、L語句,根據(jù)SQL的語法:SELECT stringaFROM stringbWHERE stringc也就是動態(tài)地生成 stringa, stringb, stringc.由用戶輸入要顯示的列,一旦輸入完畢,列名就隨之確定,將所有列名拼成一個“串”,中間用“,”分隔,形如“columm1,column2,column3,.,columnr”,則動態(tài)地生成stringa;同樣由用戶輸入查詢條件,包括相應(yīng)的列、滿足的條件或范圍、邏輯關(guān)系等,將這些條件拚成一個串,即為stringc,顯然,所有的列名都確定了,他們所在的表名也確定了,按照stringb的語法規(guī)則即可構(gòu)造。注意:上面的stringc由

17、兩部分(表間關(guān)系stringc1及查詢條件stringc2)組成;表名串stringb與表間關(guān)系stringc1、查詢條件stringc2及顯示條目stringa均有關(guān)。在實現(xiàn)的過程中:為貼近實際應(yīng)用,習(xí)慣上,先輸入查詢條件,再輸入顯示條目。即在輸入查詢條件后,生成strinc2,stringb,stringc1;然后,再在輸入顯示條目后生成stringa,并修改stringc1,stringb。最后形成SQL語法:str="select"+stringa+"from"+stringb+"where"+stringcl+stringc

18、22)在現(xiàn)在的事物對象里利用相關(guān)的SyntaxFromSQL()函數(shù)生成符合數(shù)據(jù)窗口語法的字符串: exp=syntaxfromsq1(sq1ca,str,strsty,error)生成數(shù)據(jù)窗口的源代碼其中:strsty為數(shù)據(jù)窗口的顯示風(fēng)格,例:strsty="style(type=grid)datawindow(units=lcolor=12632256)text(font.face=''system'')"3) 創(chuàng)建數(shù)據(jù)窗口對象dw_que.create(exp)這樣就實現(xiàn)了用戶要求的隨機查詢。在真實系統(tǒng)中,用戶在輸入查詢條件時希望通過選項方式錄入查詢信息,由于庫表中存放的大量信息為代碼,這就需要在程序中先把錄入的文字信息轉(zhuǎn)化成相應(yīng)的代碼再連接到查詢條件中。為簡化輸入,提高準(zhǔn)確性,可采用代碼輸入,即動態(tài)地嵌套下拉式數(shù)據(jù)窗口。在顯示查詢結(jié)果的數(shù)據(jù)窗口中,事先不能嵌套下拉式數(shù)據(jù)窗口,可預(yù)先做一個函數(shù),在程序運行中根據(jù)所選的列把代碼轉(zhuǎn)化成所對應(yīng)的漢字顯示,這樣更完善了用戶要求的隨機查詢。根據(jù)數(shù)據(jù)窗口的動態(tài)特性,對于那些運行時才能確定的數(shù)據(jù)窗口采用動態(tài)方式創(chuàng)建,使應(yīng)用程序能更靈活地滿足用戶的需求。5. 小結(jié)使用SQL語句是查詢操作的基礎(chǔ),但如何根據(jù)查

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論