一、過濾數據
1.1 使用WHERE子句
在SELECT語句中,數據根據WHERE子句中指定的搜索條件進行過濾。WHERE子句在表名(FROM子句)之後給出,如下所示:
SELECT id, home FROM table1 WHERE name = "TN6";
**WHERE子句的位置:**在同時使用ORDER BY和WHERE子句時,應該讓ORDER BY位於WHERE之後, 否則將會產生錯誤。
1.2 WHERE子句操作符
MySQL支持下標列出的所有條件操作符:
操作符 | 說明 |
---|---|
= |
等於 |
<> |
不等於 |
!= |
不等於 |
< |
小於 |
<= |
小於等於 |
> |
大於 |
>= |
大於等於 |
BETWEEN |
指定的兩個值之間 |
上述指令使用示例如下:
範圍檢查
SELECT id, home FROM table1 WHERE id < 6;
SELECT id, home FROM table1 WHERE id <= 6;
不匹配檢查
SELECT id, home FROM table1 WHERE name <> "TN6";
範圍值檢查
SELECT id, home FROM table1 WHERE id BETWEEN 4 AND 6;
空值檢查
SELECT語句有一個特殊的WHERE子句,可用來檢查具有NULL值的列。這個WHERE子句就是IS NULL子句。其語法如下:
SELECT id FROM table1 WHERE home IS NULL;
二、數據過濾
2.1 組合WHERE子句
mysql允許給出多個WHERE子句,這些子句可以兩種方式使用:以AND子句的方式或OR子句的方式使用。
2.1.1 AND操作符
SELECT id,phone FROM table1 WHERE name = "TN6" ADN id <= 5;
2.1.2 OR操作符
OR操作符與AND操作符不同,它指示mysql檢索匹配任一條件的行,命令如下
SELECT id,phone FROM table1 WHERE name = "TN6" OR id <= 5;
2.1.3 計算次序
WHERE可包含任意數目的AND和OR操作符。允許兩者結合以進行復雜和高級的過濾。SQL(像多數語言一樣)在處理OR操作符前,優先處理AND操作符。可使用圓括號明確地分組相應的操作符。
任何時候使用具有AND和OR操作符的WHERE子句,都應該使用圓括號明確地分組操作符。
2.2 IN操作符
圓括號在WHERE子句中還有另外一種用法。 IN操作符用來指定條件範圍,範圍中的每個條件都可以進行匹配。 IN取合法值的由逗號分隔的清單,全都括在圓括號中。
SELECT id,phone FROM table1 WHERE id IN (2,5) ORDER BY name;
使用IN操作符的優點具體如下:
- 在使用長的合法選項清單時, IN操作符的語法更清楚且更直觀。
- 在使用IN時,計算的次序更容易管理(因爲使用的操作符更少)。
- IN操作符一般比OR操作符清單執行更快。
- IN的最大優點是可以包含其他SELECT語句,使得能夠更動態地建立WHERE子句。
2.3 NOT操作符
WHERE子句中的NOT操作符有且只有一個功能,那就是否定它之後所跟的任何條件。
SELECT id,phone FROM table1 WHERE id NOT (2,5) ORDER BY name;
MySQL支持使用NOT對IN、 BETWEEN 和EXISTS子句取反,這與多數其他DBMS允許使用NOT對各種條件取反有很大的差別。
三、用通配符進行過濾
3.1 LIKE操作符
爲在搜索子句中使用通配符,必須使用LIKE操作符。 LIKE指示mysql,後跟的搜索模式利用通配符匹配而不是直接相等匹配進行比較
3.1.1 百分號(%)通配符
最常使用的通配符是百分號(%),在搜索串中, %表示任何字符出現任意次數。例如,爲了找出所有以詞12起頭的產品,可使用以下SELECT語句:
SELECT id,home FROM table1 WHERE phone LIKE '12%';
區分大小寫 根據MySQL的配置方式,搜索可以是區分大小寫的
3.1.1 下劃線(_
)通配符
另一個有用的通配符是下劃線(_
)。下劃線的用途與%一樣,但下劃線只匹配單個字符而不是多個字符。
SELECT id,home FROM table1 WHERE name LIKE 'TN_';
3.2 使用通配符的技巧
- 不要過度使用通配符。如果其他操作符能達到相同的目的,應該 使用其他操作符。
- 在確實需要使用通配符時,除非絕對有必要,否則不要把它們用在搜索模式的開始處。把通配符置於搜索模式的開始處,搜索起來是最慢的。
- 仔細注意通配符的位置。如果放錯地方,可能不會返回想要的數
四、使用正則表達式進行搜索
4.1 使用mysql正則表達式
4.1.1 基本字符匹配
下面的語句檢索列name包含文本TN的所有行:
SELECT id,home FROM table1 WHERE name REGEXP 'TN';
此命令告訴MySQL: REGEXP後所跟的東西作爲正則表達式(與文字正文TN匹配的一個正則表達式)處理。
匹配不區分大小寫 MySQL中的正則表達式匹配(自版本3.23.4後)不區分大小寫(即,大寫和小寫都匹配)
4.1.2 進行OR匹配
爲搜索兩個串之一(或者爲這個串,或者爲另一個串),使用|,如下所示:
SELECT id,home FROM table1 WHERE name REGEXP 'TN|李';
4.1.3 匹配幾個字符之一
匹配任何單一字符。若只想匹配特定的字符,可通過指定一組用[和]括起來的字符來完成,如下所示:
SELECT id,home FROM table1 WHERE name REGEXP 'TN[26]';
這裏,使用了正則表達式TN[26]。 [26]定義一組字符,它的意思是匹配2或6,因此, TN2和TN6都匹配且返回。字符集合也可以被否定,即,它們將匹配除指定字符外的任何東西。爲否定一個字符集,在集合的開始處放置一個即可。因此,[26]卻匹配除這些字符外的任何東西。
4.1.4 匹配範圍
集合可用來定義要匹配的一個或多個字符。例如,下面的集合將匹配數字0到9:
[0123456789]
爲簡化這種類型的集合,可使用-
來定義一個範圍。下面的式子功能上等同於上述數字列表:
[0-9]
SELECT id,home FROM table1 WHERE name REGEXP 'TN[2-6]';
4.1.5 匹配範圍
SELECT id,home FROM table1 WHERE name REGEXP '.';
.
匹配任意字符,因此每個行都被檢索出來
爲了匹配特殊字符,必須用\爲前導。\\-
表示查找-
, \\.
表示查找.
。
\\
也用來引用元字符(具有特殊含義的字符),如下表所示:
元字符 | 說明 |
---|---|
\\f |
換頁 |
\\n |
換行 |
\\r |
回車 |
\\t |
製表 |
\\v |
縱向製表 |
匹配\
爲了匹配反斜槓(\)字符本身,需要使用\\\
。
4.1.6 匹配字符類
爲更方便工作,可以使用預定義的字符集,稱爲字符類(character class)。下表列出字符類以及它們的含義。
類 | 說明 |
---|---|
[:alnum:] |
任意字母和數字(同[a-zA-Z0-9] ) |
[:alpha:] |
任意字符(同[a-zA-Z] ) |
[:blank:] |
空格和製表(同[\\t] ) |
[:cntrl:] |
ASCII控制字符(ASCII 0到31和127) |
[:digit:] |
任意數字(同[0-9]) |
[:graph:] |
與[:print:]相同,但不包括空格 |
[:lower:] |
任意小寫字母(同[a-z]) |
[:print:] |
任意可打印字符 |
[:punct:] |
既不在[:alnum:] 又不在[:cntrl:] 中的任意字符 |
[:space:] |
包括空格在內的任意空白字符(同[\f\n\r\t\v]) |
[:upper:] |
任意大寫字母(同[A-Z]) |
[:xdigit:] |
任意十六進制數字(同[a-fA-F0-9] ) |
4.1.7 匹配多個實例
下表列出的正則表達式重複元字符來完成
元字符 | 說明 |
---|---|
* |
0個或多個匹配 |
+ |
1個或多個匹配(等於{1,}) |
? |
0個或1個匹配(等於{0,1}) |
{n} |
指定數目的匹配 |
{n,} |
不少於指定數目的匹配 |
{n,m} |
匹配數目的範圍(m不超過255) |
匹配連在一起的4位數字:
SELECT id,home FROM table1 WHERE name REGEXP '[[:digit:]]{4}';
4.1.8 定位符
爲了匹配特定位置的文本,需要使用下表列出的定位符:
元字符 | 說明 |
---|---|
^ |
文本的開始 |
$ |
文本的結尾 |
[[:<:]] |
詞的開始 |
[[:>:]] |
詞的結尾 |
若想找出以一個數(包括以小數點開始的數)開始的所有內容,可使用^定位符,如下所示:
SELECT id,home FROM table1 WHERE name REGEXP '^[0-9\\.]';
^匹配串的開始。因此,^[0-9\\.]
只在.或任意數字爲串中第一個字符時才匹配它們。