1. 程式人生 > >範圍值檢測

範圍值檢測

使用IN語句只能進行多個離散值的檢測,如果要實現範圍值的檢測就非常麻煩甚至不可能了。比如我們要完成下面的功能“檢索所有年齡介於23歲到27歲之間的員工資訊”,如果用IN語句來實現的話就必須列出此範圍內的所有可能的值,SQL如下:


SELECT * FROM T_Employee WHERE FAGE IN(23,24,25,26,27) 

執行完畢我們就能在輸出結果中看到下面的執行結果:

當範圍內的值比較多的時候使用這種方式非常麻煩,比如“檢索所有年齡介於20歲到60歲之間的員工資訊”就要列出20到60之間的每一個值,這個工作量是非常大的。而且這種方式也無法表達非離散的範圍值,比如要實現“檢索所有工資介於3000元到5000元之間的員工資訊”的話就是不可能的,因為介於3000到5000之間的值是無數的。

這種情況下我們可以使用普通的“大於等於”和“小於等於”來實現範圍值檢測,比如完成下面的功能“檢索所有年齡介於23歲到27歲之間的員工資訊”,可以使用下面的SQL語句:


SELECT * FROM T_Employee WHERE FAGE>=23 AND FAGE <=27 

執行完畢我們就能在輸出結果中看到下面的執行結果:

這種方式能夠實現幾乎所有的範圍值檢測的功能,不過SQL提供了一個專門用語範圍值檢測的語句“BETTWEEN AND”,它可以用來檢測一個值是否處於某個範圍中(包括範圍的邊界值,也就是閉區間)。使用方法如下“欄位名BETTWEEN左範圍值AND右範圍值”,其等價於“欄位名>=左範圍值AND欄位名<=右範圍值”。比如完成下面的功能“檢索所有年齡介於23歲到27歲之間的員工資訊”,可以使用下面的SQL語句:


SELECT * FROM T_Employee WHERE FAGE BETWEEN 23 AND 27 

執行完畢我們就能在輸出結果中看到下面的執行結果:

使用“BETTWEEN AND”我們還能夠進行多個不連續範圍值的檢測,比如要實現“檢索所有工資介於2000元到3000元之間以及5000元到8000元的員工資訊”,可以使用下面的SQL語句:


SELECT * FROM T_Employee WHERE (FSalary BETWEEN 2000 AND 3000) OR (FSalary BETWEEN 5000 AND 8000) 

執行完畢我們就能在輸出結果中看到下面的執行結果:

資料庫系統對“BETTWEEN AND”進行了查詢優化,使用它進行範圍值檢測將會得到比其他方式更好的效能,因此在進行範圍值檢測的時候應該優先使用“BETTWEEN AND”。需要注意的就是“BETTWEEN AND”在進行檢測的時候是包括了範圍的邊界值的(也就是閉區間),

如果需要進行開區間或者半開半閉區間的範圍值檢測的話就必須使用其他的解決方案了。