第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

SQL Like & Regexp

1. 定義

慕課解釋:LikeRegexp操作符一般與Where搭配用于搜索和匹配字符字段

2. 前言

本小節(jié)中,我們將一起學(xué)習(xí)SQL Like和 SQL Regexp的基本使用。

很多時候,數(shù)據(jù)表中存儲了大量的字符類型字段,如 varchar 和 char 。雖然它們可以和其它類型字段一樣通過 > ,= 等基本運(yùn)算符進(jìn)行比較和操作。但是字符串的特性較為復(fù)雜,當(dāng)需要字符串匹配時,基本運(yùn)算符就無法滿足了,因此 SQL 提供了 Like 和 Regexp兩個特殊的操作來處理字符類型。

注意: Like 還可以作用于其它字段類型,如 int ,但一般情況下 int 類型字段直接使用基本運(yùn)算符就足夠了。

本小節(jié)測試數(shù)據(jù)如下,請先在數(shù)據(jù)庫中執(zhí)行:

DROP TABLE IF EXISTS imooc_user;
CREATE TABLE imooc_user
(
  username varchar(20),
  age int
);
INSERT INTO imooc_user(username,age) VALUES('pedro', 23), ('peter', 18), ('faker', 23);

3. SQL Like

我們可以直觀地將 like 這個單詞理解為,當(dāng)與 Where 搭配時,SQL語句可以大概的翻譯為:搜索某個字段像什么的結(jié)果。

SQL Like 的語法如下:

SELECT [col] FROM [table_name] WHERE [col] LIKE [val];

其中col表示字段名稱,table_name表示數(shù)據(jù)表名稱,val表示條件值。

3.1 例1 單獨(dú)使用 Like

Like 單獨(dú)使用時,作用與=運(yùn)算符一致。

請書寫 SQL 語句,查詢imooc_user表中用戶名像pedro的用戶。

分析

題干中明確的指出,查詢用戶名像 pedro 的用戶,可以得出username是條件字段,LIKE 是操作符,pedro 是條件值。

語句

整理可得語句如下:

SELECT username, age FROM imooc_user WHERE username LIKE 'pedro';

查詢結(jié)果如下:

+----------+-----+
| username | age |
+----------+-----+
| pedro    | 23  |
+----------+-----+

在上面例子中,Like 與 Where 搭配,搜索出了 pedro 這個用戶??稍?imooc_user 表中不僅有 pedro ,其實(shí)還有 peter 這個用戶,你能否書寫一條 SQL 語句,使用 Like 將 pedro 和 peter 二人同時搜索出來了。

單獨(dú)使用 Like 是無法做到的,但搭配通配符就可以輕松完成。

4. 通配符

SQL 通配符是用特殊的字符來表示一個或多個字符。

SQL 通配符必須與 Like 搭配使用。

常見的通配符如下:

通配符 描述
% 匹配一個或多個字符
匹配一個字符
[char_list] char_list是一個字符列表,其匹配列表中的任意一個字符
[^char_list] char_list是一個字符列表,其匹配不在列表中的任意一個字符

提示[^char_list][!char_list]作用是一樣的,即^!等價。

如果你是初次接觸通配符,可能還不甚明白,我們還是通過例子來學(xué)習(xí)。

4.1 例2 Like 搭配單個通配符%

Like 可搭配單個通配符%,用于匹配特定模式下的字符串。

請書寫一條 SQL 語句,使用 Like 將pedropeter二人同時搜索出來了。

分析

現(xiàn)在有了通配符%,我們就可以輕松的搞定。

語句

SELECT username, age FROM imooc_user WHERE username LIKE 'pe%';
+----------+-----+
| username | age |
+----------+-----+
| pedro    | 23  |
| peter    | 18  |
+----------+-----+

%表示匹配一個或多個字符,pe是 pedro 和 peter 的前綴,后綴droter都以通配符%來匹配,因此 Like 在匹配搜索的時候迅速地找到了答案。

%通配符的作用遠(yuǎn)不止于此。

4.2 例3 Like 搭配兩個通配符%

Like 也可搭配兩個通配符%,匹配特定模式下的字符串。

請書寫 SQL 語句,找出用戶名內(nèi)(不包括首尾字符)含有e的用戶。

分析

既然是含有e,因此e可以出現(xiàn)在除首尾以外的任何地方,通配符可表示為%e%。

語句

SELECT username, age FROM imooc_user WHERE username LIKE '%e%';

結(jié)果如下:

+----------+-----+
| username | age |
+----------+-----+
| pedro    | 23  |
| peter    | 18  |
| faker    | 23  |
+----------+-----+

%是最常見的通配符,但有些時候我們也需要精確的位數(shù)匹配,這時_的作用就體現(xiàn)出來了。

4.3 例4 Like 搭配通配符_和%

Like 還可搭配兩個不同的通配符%,_,匹配特定模式下的字符串。

請書寫 SQL 語句,找出第二個字符為e的用戶。

分析

查詢條件用通配符可表示為_e%。

語句:

整理可得語句如下:

SELECT username, age FROM imooc_user WHERE username LIKE '_e%';

結(jié)果如下:

+----------+-----+
| username | age |
+----------+-----+
| pedro    | 23  |
| peter    | 18  |
+----------+-----+

注意: MySQL 與 PostgreSQL 均不支持[char_list][^char_list]通配符,在實(shí)際場景中可以使用正則(Regexp)來替代。

5. SQL Regexp

正則表達(dá)式可謂是如雷貫耳,與 Like 對比起來,Regexp 更加強(qiáng)大,當(dāng)然正則表達(dá)式的性能不如 Like。

同 Like 一樣,SQL Regexp 的語法如下:

SELECT [col] FROM [table_name] WHERE [col] REGEXP [val];

其中col表示字段名稱,table_name表示數(shù)據(jù)表名稱,val表示條件值。

正則表達(dá)式好用卻較為復(fù)雜,本小節(jié)不會介紹正則表達(dá)式具體的語法,如果你感興趣,可以查閱相關(guān)資料進(jìn)行學(xué)習(xí)。

5.1 例5 使用 Regexp 查詢

Regexp 搭配正則表達(dá)式,可用于匹配特定模式下的字符串。

請書寫 SQL 語句,找出imooc_user表中用戶名以pf開頭的用戶。

分析

從題干中可以得出,username是條件字段,條件值是用戶名以pf開頭,用正則表達(dá)式可表示為^[pf]

語句

整理可得語句如下:

SELECT username,age FROM imooc_user WHERE username REGEXP '^[pf]';

結(jié)果:

+----------+-----+
| username | age |
+----------+-----+
| pedro    | 23  |
| peter    | 18  |
| faker    | 23  |
+----------+-----+

從例子中可以看到 Regexp 的用法幾乎與 Like 一致,只不過將條件值從通配符換成了正則表達(dá)式。

6. 小結(jié)

  • Like 絕大多數(shù)情況下都是與通配符一起使用的,否則其作用與=是一樣的,無法發(fā)揮真正的威力。
  • %通配符使用最為廣泛,也很好理解,多多練習(xí)即可掌握。
  • 正則表達(dá)式是塊難啃的骨頭,嘗試去理解它,在適當(dāng)?shù)臅r候查閱相關(guān)資料合理使用即可。
  • PostgreSQL 除了 like 之外還有一個ilike,可以直接忽略大小寫進(jìn)行匹配。