通配符可用于替代字符串中的任何其他字符。
1. SQL 通配符
在 SQL 中,通配符与 SQL LIKE 操作符一起使用。
SQL 通配符用于搜索表中的数据。
在 SQL 中,可使用以下通配符:
2. 演示数据库
在本教程中,我们将使用 Lintcode 样本数据库。
下面是选自 "student" 表的数据:
+----+----------------+---------------------------+-----+----------+
| id | name | email | age | class_id |
+----+----------------+---------------------------+-----+----------+
| 1 | Sharon Harris | w.hde@rds.li | 20 | 1 |
| 2 | Barbara Garcia | e.nnbvfipqeh@hdobycodn.st | 21 | 3 |
| 3 | Shirley Brown | b.ksfdygd@jpehdkw.net.cn | 28 | 3 |
| 4 | Anthony Brown | q.rudpslz@pqvxpyx.org | 38 | 1 |
| 5 | Gary Lopez | f.xwpevistkv@szwx.fj | 38 | 2 |
| 6 | Larry Lopez | d.lwvxzfi@bpogy.cn | 21 | 3 |
| 7 | Mark Lopez | v.coqfyiig@ckccb.bf | 32 | 2 |
| 8 | Gary Perez | t.yoffukqvi@qtohpour.td | 25 | 1 |
| 11 | Mary Harris | m.mqxcuhwon@ulrprfbji.tk | 25 | 3 |
| 12 | Lisa Brown | g.epimkkwxr@rmffcsmgl.mil | 31 | 2 |
+----+----------------+---------------------------+-----+----------+
3. 使用 SQL % 通配符
3.1 % 通配符 实例Ⅰ
下面的 SQL 语句选取 name 以字母 "Sh" 开始的所有学生:
SELECT * FROM student
WHERE name LIKE 'Sh%';
执行输出结果
+----+---------------+--------------------------+-----+----------+
| id | name | email | age | class_id |
+----+---------------+--------------------------+-----+----------+
| 1 | Sharon Harris | w.hde@rds.li | 20 | 1 |
| 3 | Shirley Brown | b.ksfdygd@jpehdkw.net.cn | 28 | 3 |
+----+---------------+--------------------------+-----+----------+
3.2 % 通配符 实例Ⅱ
下面的 SQL 语句选取 name 中包含 "ry" 的所有学生:
SELECT * FROM student
WHERE name LIKE '%ry%';
执行输出结果
+----+-------------+--------------------------+-----+----------+
| id | name | email | age | class_id |
+----+-------------+--------------------------+-----+----------+
| 5 | Gary Lopez | f.xwpevistkv@szwx.fj | 38 | 2 |
| 6 | Larry Lopez | d.lwvxzfi@bpogy.cn | 21 | 3 |
| 8 | Gary Perez | t.yoffukqvi@qtohpour.td | 25 | 1 |
| 11 | Mary Harris | m.mqxcuhwon@ulrprfbji.tk | 25 | 3 |
+----+-------------+--------------------------+-----+----------+
4. 使用 SQL _ 通配符
4.1 _ 通配符 实例Ⅰ
下面的 SQL 语句选取 name(姓名) 以一个任意字符开始,然后是 "ark Lopez" 的所有学生:
SELECT * FROM student
WHERE name LIKE '_ark Lopez';
执行输出结果
+----+------------+---------------------+-----+----------+
| id | name | email | age | class_id |
+----+------------+---------------------+-----+----------+
| 7 | Mark Lopez | v.coqfyiig@ckccb.bf | 32 | 2 |
+----+------------+---------------------+-----+----------+
4.2 _ 通配符 实例Ⅱ
下面的 SQL 语句选取 name 以任意两个字符开始,然后是 "ry",然后是任意五个字符,最后以 "z" 结尾的所有学生:
SELECT * FROM student
WHERE name LIKE '__ry_____z';
执行输出结果
+----+------------+-------------------------+-----+----------+
| id | name | email | age | class_id |
+----+------------+-------------------------+-----+----------+
| 5 | Gary Lopez | f.xwpevistkv@szwx.fj | 38 | 2 |
| 8 | Gary Perez | t.yoffukqvi@qtohpour.td | 25 | 1 |
+----+------------+-------------------------+-----+----------+
5. 使用 SQL [charlist] 通配符
MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。
5.1 [charlist] 通配符 实例Ⅰ
下面的 SQL 语句选取 name 以 "G"、"F" 或 "S" 开始的所有学员:
SELECT * FROM student
WHERE name REGEXP '^[GFS]';
执行输出结果
+----+---------------+--------------------------+-----+----------+
| id | name | email | age | class_id |
+----+---------------+--------------------------+-----+----------+
| 1 | Sharon Harris | w.hde@rds.li | 20 | 1 |
| 3 | Shirley Brown | b.ksfdygd@jpehdkw.net.cn | 28 | 3 |
| 5 | Gary Lopez | f.xwpevistkv@szwx.fj | 38 | 2 |
| 8 | Gary Perez | t.yoffukqvi@qtohpour.td | 25 | 1 |
+----+---------------+--------------------------+-----+----------+
5.2 [charlist] 通配符 实例Ⅱ
下面的 SQL 语句选取 name 以 A 到 H 字母开头的所有学员:
SELECT * FROM student
WHERE name REGEXP '^[A-H]';
执行输出结果
+----+----------------+---------------------------+-----+----------+
| id | name | email | age | class_id |
+----+----------------+---------------------------+-----+----------+
| 2 | Barbara Garcia | e.nnbvfipqeh@hdobycodn.st | 21 | 3 |
| 4 | Anthony Brown | q.rudpslz@pqvxpyx.org | 38 | 1 |
| 5 | Gary Lopez | f.xwpevistkv@szwx.fj | 38 | 2 |
| 8 | Gary Perez | t.yoffukqvi@qtohpour.td | 25 | 1 |
+----+----------------+---------------------------+-----+----------+