成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

當前位置:首頁>>開發編程>>數據庫>>新聞內容
多條件數據庫查詢的優化方法
作者:李軍勝 發布時間:2004-10-4 9:29:49 文章來源:電腦報

  在數據庫編程中,管理人員需要經常從數據庫中查詢數據。當查詢條件為確定時,我們可以明確用的SQL語句來實現,但是當查詢條件為多個條件的動態組合時,查詢語句會由于分支太多及IF語句的多重嵌套而變得相當復雜。在此,筆者提供了一種優化方法,運用本方法可以有效地減少查詢語句的分支和數量以及IF條件語句的嵌套層數,從而提高程序的運行效率。

  下面我們以一個簡單的例子來說明,假設有一個名為employee的表,現在我們要從其中查詢數據,條件有三個,由用戶動態選擇,如圖1所示:

  其中條件A、B、C之間是與的關系,A、B、C均為動態選擇,可以取其中的一個、兩個或三個,也可以一個都不選,當三個條件都不選擇時則認為是無條件查詢,按照通常的做法,判斷方法如圖2所示:

  這樣,最終的結果有8個,即有8條查詢語句,分別是

  1.select * from employee;

  2.select * from employee where Age =C ;

  3.select * from employee where Sex=B;

  4.select * from employee where Sex=B and Age=C;

  5.select * from employee where Name=A;

  6.select * from employee where Name=A and Age=C;

  7.select * from employee where Name=A and Sex=B ;

  8.select * from employee where Name=A and Sex=B and Age=C;

  顯然這是比較煩瑣的,而且用到了多重嵌套IF語句,因而在條件增多時,其復雜程度將大大增加。我們對它進行優化,方法如下:

  首先定義一個字符串Str_Result用來存放組合條件的結果,開始時為空。

  用程序語言描述如下:

if A <> "" then
Str_Result="where Name =A"
end if
if B <> "" then
if Str_Result="" then
Str_Result="where Sex=B"
else
Str_Result=Str_Result+"and Sex = B"
end if
end if
if C <> "" then
if Str_Result="" then
Str_Result="where Age =C"
else
Str_Result=Str_Result+"and Age=C"
end if
end if

  最終的結果查詢語句為:select * from employee + Str_Result。

  顯然,這種方法減少了組合的分支和if語句的多重嵌套,從而提高了程序的效率。

  本方法的原理在于定義了一個單獨的字符串來表示組合的結果,當該字符串經過條件A后其值為A的條件,經過條件B后其值則為條件A與B 組合的結果,而當經過條件C后其值則變成條件A、B、C的組合,從而減少了組合判斷的分支,對于更多條件的組合,其效能將更加明顯。



最新更新
·SQL Server 2005刪除用戶失敗
·SQL Server中刪除重復數據的
·經典SQL語句大全
·SQL Server 2005與ASP.NET/A
·三種查看MySQL數據庫版本的方
·SQL Server 2005 Express 遠
·啟用SQL Server 2005 Expres
·Windows下如何安裝或卸載MyS
·解決MySQL5數據庫連接超時問
·清除SQL Server日志的兩種方
相關信息
·三種查看MySQL數據庫版本的方法
·2008主流數據庫產品回顧與展望
·Berkeley DB數據庫是什么數據庫?
·SQLite數據庫是中小站點CMS的最佳選擇
·mysql2000和sql2000數據庫的區別
·批處理也能自動備份數據庫
·用SQL語句建立索引的示例
·數據備份中可能出錯的情況及解決辦法
·純真IP數據庫格式詳解
·Pocket PC數據類型映射表
畫心
愚愛
偏愛
火苗
白狐
畫沙
犯錯
歌曲
傳奇
稻香
小酒窩
獅子座
小情歌
全是愛
棉花糖
海豚音
我相信
甩蔥歌
這叫愛
shero
走天涯
琉璃月
Nobody
我愛他
套馬桿
愛是你我
最后一次
少女時代
灰色頭像
斷橋殘雪
美了美了
狼的誘惑
我很快樂
星月神話
心痛2009
愛丫愛丫
半城煙沙
旗開得勝
郎的誘惑
愛情買賣
2010等你來
我叫小沈陽
i miss you
姑娘我愛你
我們都一樣
其實很寂寞
我愛雨夜花
變心的玫瑰
犀利哥之歌
你是我的眼
你是我的OK繃
貝多芬的悲傷
哥只是個傳說
丟了幸福的豬
找個人來愛我
要嫁就嫁灰太狼
如果這就是愛情
我們沒有在一起
寂寞在唱什么歌
斯琴高麗的傷心
別在我離開之前離開
不是因為寂寞才想你
愛上你等于愛上了錯
在心里從此永遠有個你
一個人的寂寞兩個人的錯
主站蜘蛛池模板: 青田县| 曲松县| 海门市| 台中县| 海阳市| 土默特右旗| 宜阳县| 班戈县| 玉林市| 达孜县| 沿河| 祥云县| 昂仁县| 澄江县| 龙游县| 应用必备| 祁阳县| 杭锦旗| 浦东新区| 金山区| 屏边| 太仓市| 遂溪县| 新兴县| 新沂市| 黎城县| 乐亭县| 轮台县| 武平县| 报价| 舞阳县| 凤翔县| 平安县| 化隆| 叙永县| 洛宁县| 洞头县| 富源县| 铜山县| 麟游县| 错那县|