mysql資料過濾

gxyz發表於2016-04-14

WHERE子句

在我們使用資料庫時,通常只會根據特定條件提取表資料的子集。只檢索所需資料需要指定搜尋條件(search criteria),搜尋條件也稱為過濾條件(filtercondition)。

SELECT name, age FROM tab1 WHERE age=18;

返回age=18的行

WHERE子句支援的操作符
= 等於
<> 不等於
!= 不等於
< 小於
<= 小於等於

大於
= 大於等於
BETWEEN 在指定的兩個值之間

eg:

SELECT name,age FROM tab1 WHERE age>10; //獲取age大於10的資料
SELECT name,age FROM tab1 WHERE age BETWEEN 10 AND 18; //獲取age在10到18之間的資料,包括10和18

另一個特殊子句
IS NULL用來返回為空的資料

SELECT name, age FROM WHERE name IS NULL;

組合WHERE子句

使用AND或者OR子句,組合WHERE子句

SELECT name,age FROM tab1 WHERE age=10 AND name='aaa'; //查詢age=10並且name='aaa'的資料

SELECT name,age FROM tab1 WHERE age=10 OR age=19; //查詢age=10或者age=19的資料

AND和OR可以同時使用,不過AND的優先順序高於OR,所以會先處理AND操作符,另外可以用括號分組,明確的顯示優先順序.

IN操作符

指定條件範圍,範圍中的每個條件都可以進行匹配。IN取合法值的由逗號分隔的清單,全都括在圓括號中。

SELECT name,age FROM tab1 WHERE age IN (18,19,20); //查詢age在18,19或20的所有資料,功能與OR相似.

IN相比OR的好處:

  1. 在使用長的合法選項清單時,IN操作符的語法更清楚且更直觀。
  2. 在使用IN時,計算的次序更容易管理
  3. IN操作符一般比OR操作符清單執行更快
  4. IN的可以包含其他SELECT語句,使得能夠更動態地建立WHERE子句

NOT操作符

否定它之後所跟的任何條件。

SELECT name,age FROM tab1 WHERE age NOT IN (18,19,20); //查詢age不在18,19或20的所有資料,功能與OR相似.

使用萬用字元過濾

LIKE操作符

%萬用字元

%可以匹配表示任何字元出現任意次數

SELECT name FROM tab1 WHERE name LINK 'a%';  //可以匹配任何name以a開頭的資料

_萬用字元

下劃線(_)。下劃線只匹配單個字元,用法同%

注意

  • 不要過度使用萬用字元。如果其他操作符能達到相同的目的,應該使用其他操作符。
  • 儘量不要把它們用在搜尋模式的開始處,因為速度會很慢

相關文章