1. <code id="ya7qu"><span id="ya7qu"><label id="ya7qu"></label></span></code>

    <b id="ya7qu"><bdo id="ya7qu"></bdo></b>
    <wbr id="ya7qu"><optgroup id="ya7qu"><strike id="ya7qu"></strike></optgroup></wbr>
  2. <u id="ya7qu"><bdo id="ya7qu"></bdo></u>
    現在位置:范文先生網>理工論文>計算機論文>利用工具進行數據庫數據的復雜查詢

    利用工具進行數據庫數據的復雜查詢

    時間:2023-02-20 22:36:32 計算機論文 我要投稿
    • 相關推薦

    利用工具進行數據庫數據的復雜查詢

    利用工具進行數據庫數據的復雜查詢

    天津鋼管公司  王保安

    摘要: 數據庫應用系統中數據的復雜查詢問題,長期困擾著使用者和開發者。本文通過具體問題,論述了實現復雜查詢的方法,同時論證了各種方法的特點及適用范圍。?

    關鍵詞:查詢 動態 數據窗口

    當今數據庫技術已成為計算機應用的核心技術,可以認為當今任何計算機信息系統和計算機應用系統都與數據庫的應用分不開,數據庫已成為其核心和基礎。建立數據庫應用系統是要充分利用數據庫中的數據。對數據庫中的數據進行的操作除增加(Insert)、更改(update)和刪除(delete)外,最常用,也是重要的是查詢操作。即便是最簡單的數據庫應用系統,也離不開查詢功能,查詢可以說是進行數據管理的重要手段,不過也是數據庫應用系統開發過程中較困難、花時間、有一定難度的部分。?

    1. 問題的描述

    某單位根據上級部門的要求建立人員信息管理應用系統,它是人事管理信息系統(Personnel Management Information System)的子系統。人員信息管理系統是對人員所有信息的全面管理,包括:基本信息、培訓或進修信息、履歷信息、工資變動信息、離退信息、家庭成員及社會關系信息等等。根據中共中央組織部頒布的全國組織、干部、人事管理信息系統信息結構體系的要求,對人員的信息描述共有43個信息集(對應43張表),426個數據項,本文根據數據庫設計的要求進行加工,只列出3張表(table)。

    1)表名:基本信息 編碼:personnel?

    主碼 字段編碼 數據類型 長度 字段名稱

    personnel_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 學歷

    ? department char 30 所在單位?

    ? identification char 15 身份證號

    ? cul_field char 6 培訓專業

    (2)表名:工資變動信息 編碼:wages?

    主碼 外碼 字段編碼 數據類型 長度 字段名稱

    * * personnel_id char 9 人員代碼

    sa_id char 3 人員內碼?

    change_day datetime 工資變動日期
    sa_file_num char 3 工資變動文件
    salary money ? ???工資?
    3)表名:離退信息 編碼:retirement

    主碼 外碼 字段編碼 數據類型 長度 字段名稱

    * * personnel_id char 9 人員代碼

    ret_day datetime 離退日期

    rel_style char 2 離退類別?

    pay money 離退休費

    comment text 離退說明

    在應用中為保證數據的規范化,需充分利用國際代碼和組標代碼,這樣做也可以節省存儲空間。將這些代碼表建成數據庫中的靜態表,包括:性別(GB2261)、籍貫(ZB01)、民族(GB3304)、婚姻狀況(GB4766)、政治面貌(GB4762)、學歷(GB4658)、工資變動文件(ZB52)和離退狀態(GB12405)。它們的結構基本相同,每個表中都有兩個字段,分別存儲代碼及內容。以性別為例:?

    表名:性別 編碼:GB2261?

    字段編碼 數據類型 長度 字段名稱

    -------------------------------

    code char 2 代碼

    comment char 4 內容

    表中數據:?

    code comment?

    ----------------

    男性
    女性?
    這些代碼表一旦建立,表中數據對應用來講是相對不變的,所以稱為靜態表。在需要的時候,靜態表的數據可以修改,一般放在維護中進行。?

    當這些靜態表建成后,可得到完善的人員信息管理系統的數據模型,如圖1所示。(略)?

    2.使用SQL語句

    SQL(Structured Query Language)語言是1974年由Boyce和Chamberlin提出的,并在IBM公司San Jose Research Laboratory研制的System R上實現了這種語言。由于它功能豐富,語言簡潔,使用方式靈活而倍受青睞,并扎根于計算機工業界及計算機用戶。

    SQL是集數據操縱(Data Manipulation)、數據定義(Data Definition)與數據

    控制(Data Control)為一體的關系數據語言。查詢是數據操縱語言中最主要的部分。從SQL的英文名稱:結構化的查詢語言,即能看出SQL在查詢中的貢獻,可以說數據庫查詢語句是SQL語言的核心。

    ? SQL查詢語句只使用命令動詞,SELECT?

    一般格式: SELECT〈目標列〉?

    FROM〈基本表(或視圖)〉?

    [WHERE〈條件表達式〉]?

    [GROUP BY〈列名1〉[HAVING〈內部函數表達式〉]]?

    [ORDER BY〈列名2〉ASC|DESC]

    格式說明:〈〉中的內容為根據需要的具體內容;[]中的內容為可選項。

    語句含義:根據WHERE子句中的條件表達式,從基本表(或視圖)中找出滿足條件的元組,按SELECT子句中的目標列,選出元組中的分量形成表。GROUP子句將結果按列名1分組,每個組產生結果表中的一個元組;ORDER子句使結果表按列名2升序或降序排列。? 這是最基本的方法,只要能夠對庫操作,就可以實施所需要的查詢。例如:想了解所有離退休人員的基本情況及他們的離退休費,可以鍵入如下語句:?

    SELECT DISTINCT retirement.personnel_id,name,sex,

    birthday,workday,retirement.pay

    FROM personnel,retirement

    WHERE personnel.per

    sonnel_id=retirement.personnel_id?

    執行后得到下列列表,顯示所需信息:?

    personnel_id name sex birthday workday pay

    -------------------------------------------

    1 林立蘭? 1 1919/03/21 1994/05/06 1,187.00

    13 安 靜? 2 1935/05/04 1954/11/13 457.30

    2 付石龍 1 ?1928/03/21 1935/05/06 947.00

    5 魏 芳? 2 1917/05/21 1933/05/21 937.00

    8 李 四? 1 1939/05/31 1960/07/13? 1,128.80

    9 王麗立 1 1917/05/21 1933/05/21 745.00

    但這種方法要求操作者對數據庫的結構有充分的了解,例此數據庫有多少個表,有多少個數據項,這些數據項分別屬于哪一個表等。顯然,這是數據庫管理員的工作范疇。對用戶,即使了解SQL語法,也只能完成簡單的查詢,對復雜的查詢工作簡直是望塵莫及了。也就是說單單是SQL語句,并不能很好地完成數據庫的復雜查詢,必須要與其他技術配合使用。另外,使用SQL語句進行查詢,只能直接反映每一列的信息,而我們的43張基本表是盡可能地保存代碼以保證數據的規范且節約存儲空間。也就是說,我們能得到準確的查詢結果,但得到地卻是整篇的代碼(例上表中的sex列),這對開發者和使用者都難以接受。如果能夠將整篇的代碼自動轉換成所表達的文字,那當然是再好不過了。?

    3. 借助PowerBuilder實現綜合信息的查詢?

    目前,隨著工具軟件的發展和廣泛采用,使數據庫應用系統的開發如虎添翼,其中PowerBuilder以其獨特的數據窗口(DataWindow)倍受歡迎。?

    PowerBuider是美國著名的數據庫應用開發工具生產廠家Powersoft公司于1991年6月推出的功能強大、性能優異的開發工具,它是一種面向對象的、具有可視圖形界面的、快速的交互開發工具。智能化的數據窗口對象是其精華所在。利用此對象可以操作關系數據庫的數據而無需寫入SQL語句,即可以直接檢索、更新和用多種形式表現數據源中的數據。但要注意,必須使數據窗口成為窗口(Window)下數據窗口控制的一個連接對象,數據窗口才能使用戶在應用執行期間訪問數據庫中的數據。?

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

    用這種方法實現查詢優點突出,例:通過設置數據窗口中對應列的編輯風格(

    Edit Styles)為相應的下拉式數據窗口(DropDownDataWindow),使顯示的元組文字化。注意,這要事先建好下拉式數據窗口。設置數據窗口中對應列的編輯風格同樣可滿足其它顯示需要。利用數據窗口的風格特點:查詢表的列寬、列序可自由改變,甚至可以覆蓋掉一些列,以達到更滿足查詢顯示的需要。?

    綜合查詢的信息來自多個表,改變數據窗口的數據源,采用多表連接的數據源即可實現。但是如我們問題的描述,如果我們需要的查詢項隨機地來自這43張表中的數據項,顯示項也是隨機地。這種任意條件的組合,可選輸出項的顯示稱為動態查詢(Dynamic Query)依然采用上述方法,數據窗口dw_que1與dw_que2的數據源將是這43張表的連接,先不說效率問題,單從這426個項中輸入查詢條件,又顯示這426個項,就使人敬而遠之。因為,在每一次查詢前,都不了解此次查詢的要求是什么,這樣,每張表中的每一個數據項都缺一不可;另一方面,每一次的查詢,一旦查詢條件確定、顯示條目也確定后,我們會發現,每一次有意義的查詢并不是需要全部的43張表,換言之,每一次查詢沒有必要將43張表全部連結,而應只連接那些被選中數據項所在的表,即數據源是動態產生的。由于數據源不確定,數據窗口就無法設計,動態查詢無法用這種方法實現。?

    4. 動態查詢的實現?

    在某些實際的應用系統開發中,由于用戶在開發前提不出查詢的需求,而在系統運行中希望能夠對所有的數據項任意組合進行查詢,以滿足來自多方的需求,實現動態地查詢(即隨機地從43張表中選擇數據項進行組合作為查詢條件并任意地選擇數據項作為顯示條目)。對于此類查詢的實現要利用PowerBuilder通過編程的方式在運行時動態地創建數據窗口,并動態地控制數據窗口。?

    動態地創建一個數據窗口,應用程序需要執行下列任務:?

    ·動態地構造SQL語句。?

    ·用符合數據窗口語法的字符串,為現在的數據窗口控制創建一個數據窗口對象。具體實現如下:?

    1)動態地生成SQL語句,根據SQL的語法:SELECT stringa?

    FROM stringb

    WHERE stringc?

    也就是動態地生成 stringa, stringb, stringc.由用戶輸入要顯示的列,一旦輸入完畢,列名就隨之確定,將所有列名拼成一個“串”,中間用“,”分隔,形如“columm1,column2,column3,...,columnr”,則動態地生成stringa;同樣由用戶輸入查詢條件,包括相應的列、滿足的條件或范圍、邏輯關系等,將這些條件拚成一個串,即為stringc,顯然,所有的列名都確定了,他們所在的表名也確定了,按照stringb的語法規則即可構造。?

    注意:上面的stringc由兩部分(表間關系stringc1及查詢條件stringc2)組成;表名串stringb與表間關系stringc1、查詢條件stringc2及顯示條目stringa均有關。?

    在實現的過程中:為貼近實際應用,習慣上,先輸入查詢條件,再輸入顯示條目。即在輸入查詢條件后,生成strinc2,stringb,stringc1;然后,再在輸入顯示條目后生成stringa,并修改stringc1,stringb。最后形成SQL語法:?

    str="select"+stringa+"f

    rom"+stringb+"where"+stringcl+stringc2?

    2)在現在的事物對象里利用相關的SyntaxFromSQL()函數生成符合數據窗口語法的字符串:

    ? exp=syntaxfromsq1(sq1ca,str,strsty,error)生成數據窗口的源代碼?

    其中:strsty為數據窗口的顯示風格,例:?

    strsty="style(type=grid)datawindow(units=lcolor=12632256)text(font.face='system')"?

    3) 創建數據窗口對象?

    dw_que.create(exp)?

    這樣就實現了用戶要求的隨機查詢。?

    在真實系統中,用戶在輸入查詢條件時希望通過選項方式錄入查詢信息,由于庫表中存放的大量信息為代碼,這就需要在程序中先把錄入的文字信息轉化成相應的代碼再連接到查詢條件中。為簡化輸入,提高準確性,可采用代碼輸入,即動態地嵌套下拉式數據窗口。在顯示查詢結果的數據窗口中,事先不能嵌套下拉式數據窗口,可預先做一個函數,在程序運行中根據所選的列把代碼轉化成所對應的漢字顯示,這樣更完善了用戶要求的隨機查詢。?

    根據數據窗口的動態特性,對于那些運行時才能確定的數據窗口采用動態方式創建,使應用程序能更靈活地滿足用戶的需求。?

    5. 小結?

    使用SQL語句是查詢操作的基礎,但如何根據查詢的要求自動的構造最貼切的SQL語句是問題的關鍵。利用PowerBuilder中的數據窗口使問題簡化,如何通過嵌入動態生成的SQL語句動態地生成數據窗口是解決問題的根本。將查詢條件的輸入實現多級菜單選擇將查詢結果文字化,使復雜查詢問題解決得更完善。動態查詢的方法,不僅能應用于人事管理信息系統,同時也是解決其他需要復雜查詢的數據庫應用系統的途徑。這種動態查詢方法的在數據庫應用系統的使用,避免了應用系統開發中開發者冥思苦想所有可能的查詢條件,而系統運行中用戶總遇到有些查詢要求無法滿足的矛盾。動態查詢的實現,縮短了開發周期,減少了產品維護的工作。


    【利用工具進行數據庫數據的復雜查詢】相關文章:

    利用ASP實現網上數據庫檢索08-06

    基于Web的交互式數據庫查詢技術08-06

    開發基于Web的地震目錄數據庫查詢系統08-06

    淺談數據庫教學--數據庫FOXBASE教學體會08-06

    數據庫綜合練習08-16

    省級圖書館應進行省情文獻資源數據庫建設08-09

    Vc 下如何利用Matlab工具箱進行數字信號處理08-09

    sql數據查詢實驗心得09-04

    數據庫的學習心得04-04

    国产福利萌白酱精品tv一区_日韩亚洲中字无码一区二区三区_亚洲欧洲高清无码在线_全黄无码免费一级毛片
    1. <code id="ya7qu"><span id="ya7qu"><label id="ya7qu"></label></span></code>

      <b id="ya7qu"><bdo id="ya7qu"></bdo></b>
      <wbr id="ya7qu"><optgroup id="ya7qu"><strike id="ya7qu"></strike></optgroup></wbr>
    2. <u id="ya7qu"><bdo id="ya7qu"></bdo></u>
      欧美日韩精品久久久久免费看 | 中文字幕婷婷丁香色五月 | 亚洲情a成黄在线观看动漫尤物 | 中文字幕不卡在线 | 日本一区二区在线观看免费 | 亚洲美女视频免费爽 |