第六章 過濾數據
1.使用 where語句
在SELECT語句中,數據根據WHERE子句中指定的搜索條件進行過濾。WHERE子句在表名(FROM子句)之後給出
select 列名 from 表名
where 查詢條件;
SQL過濾與應用過濾 數據也可以在應用層過濾。爲此目的,SQL的SELECT語句爲客戶機應用檢索出超過實際所需的數據,然後客戶機代碼對返回數據進行循環,以提取出需要的行。通常,這種實現並不令人滿意。因此,對數據庫進行了優化,以便快速有效地對數據進行過濾。讓客戶機應用(或開發語言)處理數據庫的工作將會極大地影響應用的性能,並且使所創建的應用完全不具備可伸縮性。此外,如果在客戶機上過濾數據,服務器不得不通過網絡發送多餘的數據,這將導致網絡帶寬的浪費。
WHERE子句的位置 在同時使用ORDER BY和WHERE子句時,應該讓ORDER BY位於WHERE之後,否則將會產生錯誤
2.where子句操作符
2.1 檢查單個值
select 列名1,列名2 from 表名
where 列名1滿足的查詢條件;
MySQL在執行匹配時默認不區分大小寫,所以fuses與Fuses匹配。
2.2 不匹配檢查
select 列名1,列名2 from 表名
where 列名1不滿足的查詢條件;
何時使用引號 引號用來限定字符串。如果將值與串類型的列進行比較,則需要限定引號。用來與數值列進行比較的值不用引號。
2.3 範圍值查詢
select 列名1,列名2 from 表名
where 列名1 between min and max;
***使用BETWEEN時,必須指定兩個值——所需範圍的低端值和高端值。***這兩個值必須用AND關鍵字分隔。BETWEEN匹配範圍中所有的值,包括指定的開始值和結束值。
2.4空值查詢
查詢列名1是NULL的數據
select 列名1,列名2 from 表名
where 列名1 is NULL;
NULL與不匹配 在通過過濾選擇出不具有特定值的行時,你可能希望返回具有NULL值的行。但是,不行。因爲未知具有特殊的含義,數據庫不知道它們是否匹配,所以在匹配過濾或不匹配過濾時不返回它們。因此,在過濾數據時,一定要驗證返回數據中確實給出了被過濾列具有NULL的行
第七章 數據過濾
1. 組合where子句
操作符(operator) 用來聯結或改變WHERE子句中的子句的關鍵字。也稱爲邏輯操作符(logical operator)。
1.1 and 操作符
AND 用在WHERE子句中的關鍵字,用來指示檢索滿足所有給定條件的行
select 列名1,列名2 from 表名
where 查詢條件1 and 查詢條件2;
1.2 or操作符
OR WHERE子句中使用的關鍵字,用來表示檢索匹配任一給定條件的行。
select 列名1,列名2 from 表名
where 查詢條件1 or 查詢條件2;
1.3 計算次序
select 列名1,列名2 from 表名
where 查詢條件1 or 查詢條件2 and 查詢條件3;
select 列名1,列名2 from 表名
where (查詢條件1 or 查詢條件2) and 查詢條件3;
上述兩個SQL語句的查詢次序是不同的
SQL(像多數語言一樣)在處理OR操作符前,優先處理AND操作符。
在WHERE子句中使用圓括號 任何時候使用具有AND和OR操作符的WHERE子句,都應該使用圓括號明確地分組操作符。不要過分依賴默認計算次序,即使它確實是你想要的東西也是如此。使用圓括號沒有什麼壞處,它能消除歧義。
2. in操作符
IN WHERE子句中用來指定要匹配值的清單的關鍵字,功能與OR相當。
select 列名1,列名2 from 表名
where 列名1 in (min,max);
爲什麼要使用IN操作符?
❑ 在使用長的合法選項清單時,IN操作符的語法更清楚且更直觀。
❑ 在使用IN時,計算的次序更容易管理(因爲使用的操作符更少)。
❑ IN操作符一般比OR操作符清單執行更快。
❑ IN的最大優點是可以包含其他SELECT語句,使得能夠更動態地建立WHERE子句。第14章將對此進行詳細介紹。
3. not操作符
NOT WHERE子句中用來否定後跟條件的關鍵字。
select 列名1,列名2 from 表名
where 列名1 not in (min,max);
MySQL中的NOT MySQL支持使用NOT對IN、BETWEEN和EXISTS子句取反,這與多數其他DBMS允許使用NOT對各種條件取反有很大的差別。