亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

復(fù)雜sql語句的生成方法

文檔序號:6558244閱讀:546來源:國知局
專利名稱:復(fù)雜sql語句的生成方法
復(fù)雜SQL語句的生成方法
技術(shù) 領(lǐng)域本發(fā)明涉及一種SQL語句的生成方法,特別是一種復(fù)雜SQL語句的生成方法。
背景技術(shù)
文獻(xiàn)“SQL生成器的設(shè)計與實現(xiàn)[J].計算機(jī)工程與設(shè)計.2006. Vol. 27(11) P2024-2027”公開了一種SQL語句的生成方法,該方法基于SQL92標(biāo)準(zhǔn),能夠?qū)崿F(xiàn)復(fù)雜的SQL 語句的生成。首先根據(jù)用戶指定的數(shù)據(jù)庫表字段和SQL子句、函數(shù)或表達(dá)式等條件,進(jìn)行完整性和重復(fù)性檢查,然后根據(jù)SQL92標(biāo)準(zhǔn)拼出特定的符合要求的SQL語句。該方法可以簡化SQL語句的生成過程,提高數(shù)據(jù)庫應(yīng)用程序的開發(fā)效率。但是要求用戶必須掌握SQL語句的語法和各種復(fù)雜表達(dá)式的構(gòu)成方法,輸入正確的參數(shù)才能得到所需的SQL語句,使用起來較為復(fù)雜。其次,該方法只能實現(xiàn)針對指定表字段的SQL語句,不能實現(xiàn)針對指定SQL 組合關(guān)鍵字的SQL語句,因此,在數(shù)據(jù)庫測試領(lǐng)域無法應(yīng)用。

發(fā)明內(nèi)容
為了克服現(xiàn)有的SQL語句的生成方法不能生成根據(jù)組合關(guān)鍵字的復(fù)雜SQL語句的不足,本發(fā)明提供一種SQL語句的生成方法,該方法以Postgres數(shù)據(jù)庫測試集為基礎(chǔ),通過對SQL關(guān)鍵字分類、組合、設(shè)計基礎(chǔ)SQL語句和生成方法,來根據(jù)用戶指定的關(guān)鍵字自動生成復(fù)雜的SQL語句,可以生成根據(jù)組合關(guān)鍵字的復(fù)雜SQL語句。本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是一種SQL語句的生成方法,其特點(diǎn)是采用以下步驟(a)構(gòu)建基礎(chǔ)SQL語句select*from tl ; (1)select id from tl where id = 1 ; (2)select distinct id, name from tl where id > = lorder by id ; (3)select count (id), sum (id), avg (id), max (id), min (id) from tl group by name having count (id) > Oorder by id ; (4)select*from tl, t2 ; (5)select氺from tl natural join t2 on tl. id = t2. id ; (6)select*from tl join t2 using(id) ; (7)select氺from tl left outer join t2 using(id) ; (8)select氺from tl right outer join t2 using (id) ; (9)select*from tl where id = (select id from tl where id = 1) ; (10)(b)構(gòu)建SQL關(guān)鍵字列表KeyWordsList和SQL語句列表SQLList KeyffordsList = {用戶指定的組合SQL關(guān)鍵字},SQLList = {};(c)關(guān)鍵字分組,關(guān)鍵字按照匹配原則歸屬于四個組
單表查詢={with, select,distinct,as,from, where,group by, having, order by, limit,offset,sum,count,min,max, avg};多表連接查詢={natural,join,on, using};多表交、并、差集查詢={intersect,union,except, };子查詢={select,from, where, select};(d)對于單表 查詢,根據(jù)輸入關(guān)鍵字從基礎(chǔ)SQL語句(1) (4)中查找包含特定關(guān)鍵字的語句加入SQLList,關(guān)鍵字列表減去生成語句中包含的SQL語句,執(zhí)行步驟(i);(e)對于多表連接查詢,執(zhí)行下面流程生成SQL語句,加入SQLList,關(guān)鍵字列表減去生成語句中包含的SQL語句,執(zhí)行步驟(i);stepl 計算連接關(guān)鍵字個數(shù)N,根據(jù)輸入關(guān)鍵字從自定義基礎(chǔ)SQL語句(5) (9) 中選擇包含指定關(guān)鍵字的SQL語句;st印2 如果是N = 1,直接返回該語句,否則進(jìn)入st印3 ;st印3 刪除基礎(chǔ)SQL語句后分號,加空格,復(fù)制從基礎(chǔ)SQL語句連接關(guān)鍵字開始至語句末尾的SQL語句并添加到空格后,N-I ;st印4:如果N= 1,添加分號,返回SQL ;如果不是,返回st印3 ;(f)對于多表交、并、差集查詢,執(zhí)行下面流程生成SQL語句,加入SQLList,關(guān)鍵字列表減去生成語句中包含的SQL語句,執(zhí)行步驟(i);stepl 計算連接關(guān)鍵字個數(shù)N,取得自定義基礎(chǔ)SQL (1);st印2 添加交,并,差關(guān)鍵字,N-I ;st印3 添加自定義基礎(chǔ)SQL (1);st印4 如果N = 0,添加分號,返回SQL ;如果不是,返回st印2 ;(g)對于子查詢的SQL語句,繼續(xù)如下步驟,生成SQL語句加入SQLList,關(guān)鍵字列表減去生成語句中包含的SQL語句,執(zhí)行步驟(i);st印1 計算子查詢級數(shù)N,取得自定義基礎(chǔ)SQL (10);st印2 查找第一個id = 1的位置,刪除1,添加“ 0 ”,將(2)插入括號內(nèi),N-I ;st印3 如果N = O,返回SQL ;如果不是,返回st印2。(h)如果關(guān)鍵字不在基礎(chǔ)SQL語句中包含,從Postgres測試集合中挑選匹配的 SQL語句加入SQLList,執(zhí)行步驟(i);(i)如果KeyWordsList為空,過程結(jié)束,返回SQLList ;否則繼續(xù)處理下一個分組。本發(fā)明的有益效果是由于以Postgres數(shù)據(jù)庫測試集為基礎(chǔ),通過對SQL關(guān)鍵字分類、組合、設(shè)計基礎(chǔ)SQL語句和生成方法,來根據(jù)用戶指定的關(guān)鍵字自動生成復(fù)雜的SQL 語句,可以生成根據(jù)組合關(guān)鍵字的復(fù)雜SQL語句。這些語句可以直接應(yīng)用于數(shù)據(jù)庫系統(tǒng)的測試過程,解決手工編寫組合關(guān)鍵字的SQL語句出錯率高,效率低的問題。下面結(jié)合具體實施方式
對本發(fā)明作詳細(xì)說明。
具體實施例方式假設(shè)指定如下的SQL 關(guān)鍵字為{select,join, join, group by, where, intersect},需要生成SQL語句,則生成方法如下A.構(gòu)建基礎(chǔ)SQL語句如下select*from tl ; (1)
select id from tl where id = 1 ; (2)select distinct id,name from tl where id > = lorder by id ; (3)select count (id), sum (id),avg (id),max (id),min (id) from tl group by name havingcount (id) > Oorder by id ; (4)select*from tl, t2 ; (5)select氺from tl natural join t2 on tl. id = t2. id ; (6)select^from tl join t2 using(id) ; (7)select水from tl left outer join t2 using(id) ; (8)select水from tl right outer join t2 using(id) ; (9)select*from tl where id = (select id from tl where id = 1) ; (10)B.根據(jù)輸入SQL組合關(guān)鍵字構(gòu)建SQL關(guān)鍵字列表KeyWordsList和SQL語句列表 SQLList,關(guān)鍵字列表的初值為用戶輸入的所有關(guān)鍵字,SQL語句列表初值為空。KeyffordsList = {select, join, join, group by, where, intersect},SQLList = {};C.對關(guān)鍵字分組單表={select,group by, where},多表連接={join, join},多表交集= {intersect}D.對于單表查詢,根據(jù)輸入關(guān)鍵字從基礎(chǔ)SQL語句(1) (4)中查找包含特定關(guān)鍵字的語句加入SQLList,關(guān)鍵字列表減去生成語句中包含的SQL語句,執(zhí)行步驟(i);按照關(guān)鍵字包含最多的SQL優(yōu)先選擇的原則,從基礎(chǔ)SQL語句(1) (4)查到(2)包含{select, where},(4)包含{group by},將這兩條SQL語句加入SQLList,關(guān)鍵字列表減去這三個, 則KeyWordsList = {join,join,intersect},SQLList = {select id from tl where id = 1 ;select count (id),sum (id),avg (id),max (id),min (id) from tl group by name having count (id) > Oorder by id;};Ε.對于多表查詢,繼續(xù)判斷是否連接查詢,如果是,執(zhí)行下面流程生成SQL語句, 加入SQLList,關(guān)鍵字列表減去生成語句中包含的SQL語句,執(zhí)行步驟(i);stepl 計算連接關(guān)鍵字個數(shù)N,根據(jù)輸入關(guān)鍵字從自定義基礎(chǔ)SQL語句(5) (9) 中選擇包含指定關(guān)鍵字的SQL語句;st印2 如果是N = 1,直接返回該語句,否則進(jìn)入st印3 ;st印3 刪除基礎(chǔ)SQL語句后分號,加空格,復(fù)制從基礎(chǔ)SQL語句連接關(guān)鍵字開始至語句末尾的SQL語句并添加到空格后,N-I ;select氺from tl natural join t2 on tl. id = t2. id join t2 on tl. id = t2. id ;將上述語句加入SQLList,關(guān)鍵字列表減去兩個join關(guān)鍵字,則
權(quán)利要求
1. 一種復(fù)雜SQL語句的生成方法,其特征在于釆用以下步驟(a)構(gòu)建基礎(chǔ)SQL語句 select水from tl ; (1)select id from tl where id = 1 ; (2)select distinct id,name from tl where id > = lorder by id ; (3) select count (id),sum (id), avg(id),max (id), min (id) from tl group by name having count (id) > Oorder by id ; (4) select^from tl, t2 ; (5)select氺from tl natural join t2 on tl. id = t2. id ; (6)select^from tl join t2 using(id) ; (7)select水from tl left outer join t2 using(id) ; (8)select水from tl right outer join t2 using(id) ; (9)select*from tl where id = (select id from tl where id = 1) ; (10)(b)構(gòu)建SQL關(guān)鍵字列表KeyWordsList和SQL語句列表SQLList KeyWordsList = {用戶指定的組合SQL關(guān)鍵字},SQLList = {};(c)關(guān)鍵字分組,關(guān)鍵字按照匹配原則歸屬于四個組單表查詢={with, select,distinct,as,from, where,group by, having, order by, limit,offset,sum,count,min, max, avg};多表連接查詢={natural,join,on,using}; 多表交、并、差集查詢={intersect,union,except, };子查詢={select,from, where, select};(d)對于單表查詢,根據(jù)輸入關(guān)鍵字從基礎(chǔ)SQL語句⑴ (4)中查找包含特定關(guān)鍵字的語句加入SQLList,關(guān)鍵字列表減去生成語句中包含的SQL語句,執(zhí)行步驟(i);(e)對于多表連接查詢,執(zhí)行下面流程生成SQL語句,加入SQLList,關(guān)鍵字列表減去生成語句中包含的SQL語句,執(zhí)行步驟(i);stepl 計算連接關(guān)鍵字個數(shù)N,根據(jù)輸入關(guān)鍵字從自定義基礎(chǔ)SQL語句(5) (9)中選擇包含指定關(guān)鍵字的SQL語句;st印2 如果是N = 1,直接返回該語句,否則進(jìn)入st印3 ; st印3:刪除基礎(chǔ)SQL語句后分號,加空格,復(fù)制從基礎(chǔ)SQL語句連接關(guān)鍵字開始至語句末尾的SQL語句并添加到空格后,N-I ;st印4 如果N = 1,添加分號,返回SQL ;如果不是,返回st印3 ;(f)對于多表交、并、差集查詢,執(zhí)行下面流程生成SQL語句,加入SQLList,關(guān)鍵字列表減去生成語句中包含的SQL語句,執(zhí)行步驟(i);stepl 計算連接關(guān)鍵字個數(shù)N,取得自定義基礎(chǔ)SQL(I); st印2 添加交,并,差關(guān)鍵字,N-I ; st印3 添加自定義基礎(chǔ)SQL(I);st印4 如果N = 0,添加分號,返回SQL ;如果不是,返回step2 ;(g)對于子查詢的SQL語句,繼續(xù)如下步驟,生成SQL語句加入SQLList,關(guān)鍵字列表減去生成語句中包含的SQL語句,執(zhí)行步驟(i);stepl 計算子查詢級數(shù)N,取得自定義 基礎(chǔ)SQL (10);st印2 查找第一個id = 1的位置,刪除1,添加“ 0 ”,將(2)插入括號內(nèi),N-I ; st印3 如果N = 0,返回SQL ;如果不是,返回st印2 ;(h)如果關(guān)鍵字不在基礎(chǔ)SQL語句中包含,從Postgres測試集合中挑選匹配的SQL語句加入SQLList,執(zhí)行步驟⑴;(i)如果KeyWordsList為空,過程結(jié)束,返回SQLList;否則繼續(xù)處理下一個分組。
全文摘要
本發(fā)明公開了一種復(fù)雜SQL語句的生成方法,用于解決現(xiàn)有的SQL語句的生成方法不能生成根據(jù)組合關(guān)鍵字的復(fù)雜SQL語句的技術(shù)問題。技術(shù)方案是以Postgres數(shù)據(jù)庫測試集為基礎(chǔ),通過對SQL關(guān)鍵字分類、組合、設(shè)計基礎(chǔ)SQL語句和生成方法,來根據(jù)用戶指定的關(guān)鍵字自動生成復(fù)雜的SQL語句,可以生成根據(jù)組合關(guān)鍵字的復(fù)雜SQL語句。這些語句可以直接應(yīng)用于數(shù)據(jù)庫系統(tǒng)的測試過程,解決手工編寫組合關(guān)鍵字的SQL語句出錯率高,效率低的問題。
文檔編號G06F17/30GK102222097SQ201110163280
公開日2011年10月19日 申請日期2011年6月16日 優(yōu)先權(quán)日2011年6月16日
發(fā)明者劉文潔, 周云濤, 張曉 , 李戰(zhàn)懷 申請人:西北工業(yè)大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1