SQL LIKE 運(yùn)算符

在本教程中,您將學(xué)習(xí)如何基于部分匹配來檢索數(shù)據(jù)。

模式匹配

到目前為止,您已經(jīng)看到了標(biāo)識(shí)確切字符串的條件,例如WHERE name='Lois Lane'。但是在SQL中,您也可以使用LIKE運(yùn)算符執(zhí)行部分或模式匹配。

LIKE運(yùn)算符允許您為一個(gè)或多個(gè)字符指定通配符提供模式匹配的度量。您可以使用以下兩個(gè)通配符:

  • 百分號(hào)(%) - 匹配任意數(shù)量的字符,甚至零個(gè)字符。

  • 下劃線(_) - 完全匹配一個(gè)字符

這是一些示例,顯示了如何將LIKE運(yùn)算符與通配符一起使用。

聲明含義返回值
WHERE name LIKE 'Da%'

查找以Da開頭的名字

David, Davidson
WHERE name LIKE '%th'查找以th結(jié)尾的名字Elizabeth, Smith
WHERE name LIKE '%on%'

查找包含on的名字

Davidson, Toni
WHERE name LIKE 'Sa_'

查找以Sa開頭且最多后跟一個(gè)字符的名字

Sa
WHERE name LIKE '_oy'

查找以oy結(jié)尾且最多包含一個(gè)字符的名字

Joy, Roy
WHERE name LIKE '_an_'查找包含an的名字,并以一個(gè)字符開頭和結(jié)尾Dana, Hans
WHERE name LIKE '%ar_'查找包含ar的名字,該名字以任意數(shù)量的字符開頭,并以最多一個(gè)字符結(jié)尾Richard, Karl
WHERE name LIKE '_ar%'查找包含ar的名字,最多以一個(gè)字符開頭,以任意數(shù)量的字符結(jié)尾Karl, Mariya

通過搜索一些記錄,讓我們將上面討論的語句投入實(shí)際應(yīng)用中。

考慮我們employees在數(shù)據(jù)庫中有一個(gè)包含以下記錄的表:

+--------+------------------+------------+--------+---------+
| emp_id | emp_name         | hire_date  | salary | dept_id |
+--------+------------------+------------+--------+---------+
|      1 | Ethan Hunt       | 2001-05-01 |   5000 |       4 |
|      2 | Tony Montana     | 2002-07-15 |   6500 |       1 |
|      3 | Sarah Connor     | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard     | 2007-01-03 |   7200 |       3 |
|      5 | Martin Blank     | 2008-06-24 |   5600 |    NULL |
|      6 | simons bistro    | 2009-04-01 |   6000 |       1 |
+--------+------------------+------------+--------+---------+

現(xiàn)在,假設(shè)您想找出所有以S字母開頭的員工。

SELECT * FROM employees 
WHERE emp_name LIKE 'S%';

執(zhí)行查詢后,您將獲得如下輸出:

+--------+------------------+------------+--------+---------+
| emp_id | emp_name         | hire_date  | salary | dept_id |
+--------+------------------+------------+--------+---------+
|      3 | Sarah Connor     | 2005-10-18 |   8000 |       5 |
|      6 | simons bistro    | 2009-04-01 |   6000 |       1 |
+--------+------------------+------------+--------+---------+

在MySQL非二進(jìn)制串(CHAR,VARCHAR,TEXT)比較是不區(qū)分大小寫的默認(rèn)的,而二進(jìn)制字符串(BINARY,VARBINARY,BLOB)比較是大小寫敏感的。

這意味著,如果使用搜索WHERE name LIKE 'S%',您將獲得以S或s開頭的所有列值(正如您看到的,我們同時(shí)擁有“ Sarah”和“ simons”)。但是,如果要使此搜索區(qū)分大小寫,可以BINARY按以下方式使用運(yùn)算符:

-- Syntax for MySQL Database 
SELECT * FROM employees 
WHERE BINARY emp_name LIKE 'S%';

現(xiàn)在,此語句將僅返回名稱以大寫S字母開頭的員工:

+--------+------------------+------------+--------+---------+
| emp_id | emp_name         | hire_date  | salary | dept_id |
+--------+------------------+------------+--------+---------+
|      3 | Sarah Connor     | 2005-10-18 |   8000 |       5 |
+--------+------------------+------------+--------+---------+

注意:如果希望始終以區(qū)分大小寫的方式對待列,請使用區(qū)分大小寫或二進(jìn)制排序規(guī)則對其進(jìn)行聲明,以避免任何性能問題。

提示:當(dāng)您不知道要搜索的字符串的確切形式時(shí),部分匹配非常有用。您還可以使用部分匹配來檢索表的某一列中包含相似字符串的多行。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清