按條件過濾
阿新 • • 發佈:2018-11-09
前面演示的例子都是檢索出表中所有的資料,不過在很多情況下我們需要按照一定的過濾條件來檢索表中的部分資料,這個時候可以先檢索出表中所有的資料,然後檢查每一行看是否符合指定的過濾條件。比如我們要檢索出所有工資少於5000元的員工的姓名,那麼可以編寫下面的程式碼來處理:
result = executeQuery(“SELECT FName, FSalary FROM T_Employee”);
for(i=0;i<result.count;i++)
{
salary = result[i].get(“FSalary”);
if(salary<5000) { name = result[i].get(“FName”); print(name+”的工資少於5000 元,為:”+salary); } }
這種處理方式非常清晰簡單,在處理小資料量以及簡單的過濾條件的時候沒有什麼不妥的地方,但是如果資料表中有大量的資料(數以萬計甚至百萬、千萬數量級)或者過濾條件
非常複雜的話就會帶來很多問題:
1,由於將表中所有的資料都從資料庫中檢索出來,所以會有非常大的記憶體消耗以及網路資源消耗。
2,需要逐條檢索每條資料是否符合過濾條件,所以檢索速度非常慢,當資料量大的時候這種速度是讓人無法忍受的。
3,無法實現複雜的過濾條件。如果要實現“檢索工資小於5000或者年齡介於23歲與28歲之間的員工姓名”這樣的邏輯的話就要編寫複雜的判斷語句,而如果要關聯其他表進行查詢的話則會更加複雜。
資料檢索是資料庫系統的一個非常重要的任務,它內建了對按條件過濾資料的支援,只要為SELECT 語句指定WHERE 語句即可,其語法與上一章中講的資料更新、資料刪除的WHERE語句非常類似,比如完成“檢索出所有工資少於5000 元的員工的姓名”這樣的功能可以使用下面的SQL語句:
SELECT FName FROM T_Employee WHERE FSalary<5000
執行完畢我們就能在輸出結果中看到下面的執行結果:
FName
Jerry
Jane
Smith
Stone
WHERE子句還支援複雜的過濾條件,下面的SQL語句用來檢索出所有工資少於5000元或者年齡大於25歲的員工的所有資訊:
SELECT * FROM T_Employee WHERE FSalary<5000 OR FAge>25
執行完畢我們就能在輸出結果中看到下面的執行結果:
使用WHERE子句只需指定過濾條件就可以,我們無需關心資料庫系統是如果進行查詢的,資料庫會採用適當的優化演算法進行查詢,大大降低了CPU資源的佔用。