MySQL數據庫——過濾數據(一)

數據庫一般包含大量的數據,但是我們大部分情況下並不需要檢索所有的數據,只要檢索部分數據就行了。只檢索所需要數據需要指定搜索條件,搜索條件也稱爲過濾條件。

part 1 使用WHERE 子句
在SELECT子句中,數據根據WHERE子句中指定的搜索條件進行過濾。WHERE子句在表名(FROM子句)之後給出,如下所示:

SELECT users.user_name, users.user_age FROM users WHERE users.user_name = "黃一東"; 

這個例子採用了簡單的相等測試,檢查一個列是否具有指定的值,但SQL允許做的事情不僅僅是相等測試 。

在同時使用ORDER BY 和 WHERE子句時候,應該讓ORDER BY位於WHERE之後,否則將會產生錯誤

part 2 WHERE子句操作符

part 2.1 檢查單個值

直接上例子

SELECT users.user_name, users.user_age FROM users WHERE users.user_age <= 200 ORDER BY users.user_age; 

注意這裏的小於等於,關於WHERE的操作符和平常程序語言其實差不多的。

part 2.2 不匹配檢查

SELECT users.user_name, users.user_age FROM users WHERE users.user_age != 40 ORDER BY users.user_age DESC;

MySQL 中 WHERE表達式的不匹配 可以用<> 和 != 都行 。

tip:如果將 值 和 串類型的列 進行比較的時候我們 需要用 引號將 值 括起來 。

part 2.3 範圍值檢查
爲了檢查某個範圍的值,可使用BETWEEN操作符。其語法和其他的WHERE操作符稍有不同,因爲他需要兩個值,即開始值和結束值。

SELECT users.user_name, users.user_age FROM users WHERE users.user_age BETWEEN 19 AND 50

從例子中我們可以看出,在使用BETWEEN的時候,必須指定兩個值——所需範圍的低端值和高端值。這兩個值必須用AND關鍵字分隔。 MySQL會匹配範圍中的所有值,包括開始值和結束值。

part 2.4 空值檢查

創建表的時候,表的設計人員可以指定其中的列是否可以不包含值。在一個列不包含值的時候,稱其爲包含空值NULL 。

NULL 無值,他與字段包含0,空字符串或僅僅包含空格不同

SELECT語句有一個特殊的WHERE子句,可用來檢查具有NULL值的列。這個WHERE子句就是 IS NULL 子句 如下:

SELECT prod_name FROM products WHERE prod_price IS NULL;

part 3 組合WHERE子句

我們很可能對數據庫進行多層篩選。
MySQL允許給出多個WHERE子句。這些子句可以兩種方式使用:以AND方式或者OR方式使用。

part 3.1 AND操作符

爲了通過不只一個列進行過濾,可以使用AND操作符給WHERE子句附加條件。下面的代碼給出了一個例子:

SELECT users.user_name, users.user_age FROM users WHERE users.user_age BETWEEN 19 AND 50 AND users.user_id < 8;

可以看出,我們在WHERE子句中 多添加了一個AND關鍵字 來鏈接兩個過濾條件 。就是這麼簡單~

part 3.2 OR操作符

OR操作符和AND操作符不同,它指示MySQL檢索匹配任一條件的行 。

如下:

SELECT users.user_name, users.user_age FROM users WHERE users.user_age BETWEEN 19 AND 60 OR users.user_id < 10;

part 3.3 計算次序

WHERE可以包含任意數目的AND和OR操作符。並且允許兩者進行結合,但是這會產生一個有趣的問題。

就是說當類似於WHERE id = 2002 OR id = 1003 AND price >= 10 的情況,我們該如何確定 id = 1003 是應用於前面的 OR 還是 後面的 AND呢?

SQL語言對這種情況,在處理OR操作前,優先處理AND。就是說 AND在計算次序中優先級更高,有時會產生我們不想要的結果 。

這個問題的解決方法是使用圓括號明確地分組相應的操作符 。

SELECT users.user_name, users.user_age FROM users WHERE (users.user_age != 1 AND users.user_id != 0) OR users.user_id < 10;

注意,從結構上講,這條語句就比上面那條多了個括號,任何時候使用具有AND和OR操作符的語句的時候都應該帶上括號明確分組操作!

part 3.4 IN操作符

圓括號在WHERE子句中還有另一種用法。 IN操作符用來指定條件範圍,範圍中的每個條件都可以進行匹配。IN取合法值由逗號分隔的清單,全部在圓括號中。

SELECT users.user_name , users.user_age FROM users WHERE users.user_age IN(19,63);

可以看出 IN 操作符 和 OR的 功能是相似地! 那爲什麼要使用IN操作符呢?如下:
1.在使用長的合法選項清單中 IN 操作符語法更清楚且直觀 。
2.在使用IN時,計算的次序更容易管理。
3.IN操作符一般比OR更快
4.IN操作符最大的有點就是能包含其他SELECT語句,使得能夠更動態的建立WHERE子句。

part 3.5 NOT操作符

WHERE子句中的NOT操作符有且只有一個功能,那就是否定他之後所跟的任何條件。

NOT WHERE子句中用來否定後面條件的關鍵字!

如下:

SELECT users.user_name , users.user_age FROM users WHERE users.user_age NOT IN(19,63);

在和IN操作符聯合使用時候,NOT操作符使得找出與列表中不同的數據更簡單!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章