@R星校长
第3
关:通配符[]
的使用
如何使用通配符 []
模糊匹配数据内容
通配符[]
是个中括号,一看就知道里面是应该放点什么内容,放点什么呢?它又有什么作用呢?
[]
用于将一组字符囊括在内,这一组字符之间是或的关系,而通配符[]
出现的位置也严格匹配于括号中出现的字符在整个字符串中的位置。
是不是有点抽象?一会儿我们举个例子你就明白了,先来看看语法吧。
语法规则为:
SELECT 字段名
FROM 表名
WHERE 字段名 LIKE '[数据]'
举个例子
我们想从表Customers
中,检索到所有cust_name
以a
和t
开头的消费者的所有数据。表Customers
的内容如下图所示:
输入:
SELECT *
FROM Customers
WHERE cust_name LIKE '[at]%'
输出:
检索过程为:
分析: 我们在语法中加入了通配符 %
。因为通配符 []
中出现的只能是有或
关系的 单字符 。所以除非你想检索的是单字符,否则不加 %
的话,你将检索不到任何内容。
Tips: 注意,通配符中的字符大小写不敏感 !
使用通配符[]
和^
模糊匹配取反的数据内容
我们还可以对检索内容进行“取反”。使用符号^
后,我们可以成功的检索到 []
中没出现的字符。
语法规则为:
SELECT 字段名
FROM 表名
WHERE 字段名 LIKE '[^数据]'
举个例子
我们想从表Customers
中,检索到所有cust_name
不是以a
和t
开头的消费者的所有数据。表Customers
的内容如下图所示:
输入:
SELECT *
FROM Customers
WHERE cust_name LIKE '[^at]%'
输出:
检索过程为:
分析: 当然,你也可以使用 NOT 操作符来得到相同的结果。相比来说,^ 唯一的好处就是简化了 WHERE 语句的语法。
举个例子
SELECT *
FROM Customers
WHERE NOT cust_name LIKE '[at]%'
Tips: 在本实训最后一关,希望大家能格外注意这 3 条使用规则:
- 不要过分使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
- 在确实需要使用通配符时,除非绝对有必要,否则不要把他们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。
- 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。
下面轮到你们来试一试了。
编程要求
我们已经为你建好了数据库与数据表,并添加了相应的数据内容。你只需补全右侧代码片段中 retrieving with wildcard []
下Begin-End
区间的代码,检索表 Products
中所有不以B
为起始字符的产品的所有内容。
其中表 Products
的内容如下图所示:
测试说明
测试过程:
本关涉及到的测试文件是step3_test.sh
,平台将运行用户补全的step3.sql
文件,得到数据;
将得到的数据与答案比较,判断代码是否正确。
如果操作正确,你将得到如下的结果:
开始你的任务吧,祝你成功!
USE Mall
Go
SET NOCOUNT ON
---------- retrieving with wildcard [] ----------
-- ********** Begin ********** --
SELECT * FROM Products WHERE prod_name LIKE '[^B]%';
-- ********** End ********** --
GO