SELECT with LIKE()
CREATE TABLE stack
( id int AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100) NOT NULL
);
INSERT stack(username) VALUES
('admin'),('k admin'),('adm'),('a adm b'),('b XadmY c'), ('adm now'), ('not here');
任何地方的 adm
:
SELECT * FROM stack WHERE username LIKE "%adm%";
+----+-----------+
| `id` | username |
+----+-----------+
| 1 | admin |
| 2 | k admin |
| 3 | adm |
| 4 | a adm b |
| 5 | b XadmY c |
| 6 | adm now |
+----+-----------+
以 adm
開頭:
SELECT * FROM stack WHERE username LIKE "adm%";
+----+----------+
| `id` | username |
+----+----------+
| 1 | admin |
| 3 | adm |
| 6 | adm now |
+----+----------+
以 adm
結尾:
SELECT * FROM stack WHERE username LIKE "%adm";
+----+----------+
| `id` | username |
+----+----------+
| 3 | adm |
+----+----------+
就像 LIKE
子句中的%
字元匹配任意數量的字元一樣,_
字元只匹配一個字元。例如,
SELECT * FROM stack WHERE username LIKE "adm_n";
+----+----------+
| `id` | username |
+----+----------+
| 1 | admin |
+----+----------+
效能說明如果 username
上有索引,那麼
LIKE 'adm'
執行與`=‘adm’相同的操作LIKE 'adm%
是一個範圍,類似於BETWEEN..AND..
它可以很好地利用列上的索引。LIKE '%adm'
(或帶有前導萬用字元的任何變體 )不能使用任何索引。因此它會很慢。在有很多行的表上,它很可能很慢而沒用。RLIKE
(REGEXP
)往往比LIKE
慢,但有更多的能力。- 雖然 MySQL 在許多型別的表和列上提供了
FULLTEXT
索引,但這些FULLTEXT
索引不用於使用LIKE
來完成查詢。