在本教程中,您將學(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í),部分匹配非常有用。您還可以使用部分匹配來檢索表的某一列中包含相似字符串的多行。