MySQL - 第六章 | 單一條件過濾資料
使用WHERE子句
資料庫表一般包含大量的資料,很少需要檢索表中所有行。通常只會根據特定操作或報告的需要提取表資料的子集。只檢索所需資料需要指定搜索條件(search criteria),搜索條件也稱為過濾條件(filter condition)。
在SELECT語句中,資料根據WHERE子句中指定的搜索條件進行過濾。WHERE子句在表名(FROM子句)之後給出。
1 | mysql> select id, price, prod_name from products where price = 100; |
分析:這條語句從products表中檢索兩個列,但不返回所有行,只返回price值為100的行。
這個例子採用了簡單的相等測試:它檢查一個列是否具有指定的值,據此進行過濾。但是SQL允許做的事情不僅僅是相等測試。
提示:SQL過濾與應用過濾 資料也可以在應用層過濾。為此目的,SQL的SELECT語句為客戶端應用檢索出超過實際所需的資料,然後客戶端程式碼對返回資料進行循環,以提取出需要的行。
通常,這種實現並不令人滿意。因此,對資料庫進行了優化,以便快速有效地對資料進行過濾。讓客戶端應用(或開發語言)處理資料庫的工作將會極大地影響應用的性能,並且使所建立 的應用完全不具備可伸縮性。此外,如果在客戶端上過濾資料,服務器不得不通過網路發送多餘的資料,這將導致網路頻寬的浪費。
注意:WHERE子句的位置 在同時使用ORDERBY和WHERE子句時,應該讓ORDER BY位於WHERE之後,否則將會產生錯誤。
WHERE子句操作符
我們在關於相等的測試時看到了第一個WHERE子句,它確定一個列是否包含特定的值。下方列出的所有條件操作符。
操作符 | 說明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 在指定的两个值之间 |
檢查單個值
我們已經看到了測試相等的例子。
1 | mysql> select id, price, prod_name from products where prod_name = 'sleepwear'; |
分析:檢查WHERE prod_name=’sleepwear’語句,它返回prod_name的值為sleepwear的一行。MySQL在執行匹配時默認不區分大小寫,所以sleepwear與Sleepwear匹配。
其他例子:
1 | mysql> select id, price, prod_name from products where price < 666; |
1 | mysql> select id, price, prod_name from products where price <= 666; |
不匹配檢查
1 | mysql> select id, price, prod_name from products where price <> 666; |
提示:<> 和 != 是效果相同的操作符。
提示:何時使用引號 如果仔細觀察上述WHERE子句中使用的條件,會看到有的值括在單引號內(如前面使用的’sleepwear’),而有的值未括起來。單引號用來限定字符串。如果將值與串類型的列進行比較,則需要限定引號。用來與數值列進行比較的值不用引號。
範圍值檢查
為了檢查某個範圍的值,可使用BETWEEN操作符。其語法與其他WHERE子句的操作符稍有不同,因為它需要兩個值,即範圍的開始值和結束值。例如,BETWEEN操作符可用來檢索價格在500元和1000元之間或日期在指定的開始日期和結束日期之間的所有產品。
1 | mysql> select id, price, prod_name from products where price between 500 and 1000; |
分析:從這個例子中可以看到,在使用BETWEEN時,必須指定兩個值——所需範圍的低端值和高端值。這兩個值必須用AND關鍵字分隔。 BETWEEN匹配範圍中所有的值,包括指定的開始值和結束值。
空值檢查
在建立表時,表設計人員可以指定其中的列是否可以不包含值。在一個列不包含值時,稱其為包含空值NULL。
術語:NULL 無值(no value),它與欄位包含0、空字符串或僅僅包含空格不同。
SELECT語句有一個特殊的WHERE子句,可用來檢查具有NULL值的列。這個WHERE子句就是IS NULL子句。
1 | mysql> select id, price, prod_name from products where price is null; |
由於資料price沒有NULL資料,所以顯示Empty。
注意:NULL與不匹配 在通過過濾選擇出不具有特定值的行時,你可能希望返回具有NULL值的行。但是不行。因為未知具有特殊的含義,資料庫不知道它們是否匹配,所以在匹配過濾或不匹配過濾時不返回它們。因此,在過濾資料時,一定要驗證返回資料中確實給出了被過濾列具有NULL的行。
結語
我覺得NULL的處理是很重要的,而且他在SELECT的時候也是會左右資料庫的執行速度,這部分就有點深了,只大概提一下,哈。在這些操作符中相對比較少用的我覺得是BETWEEN,要知道這操作符號是常常使用在日期區間搜尋的。
註:以上參考了
MySQL必知必会 MySQL Crash Course