极速版
1. 通配符%的使用
USE Mall
Go
SET NOCOUNT ON
---------- retrieving with wildcard % ----------
-- ********** Begin ********** --
SELECT *
FROM Products
WHERE prod_name LIKE '%toy%'
-- ********** End ********** --
GO
2. 通配符_的使用
USE Mall
Go
SET NOCOUNT ON
---------- retrieving with wildcard _ ----------
-- ********** Begin ********** --
SELECT *
FROM Products
WHERE prod_name LIKE '__ inch Lion toy'
-- ********** End ********** --
GO
3. 通配符[]的使用
USE Mall
Go
SET NOCOUNT ON
---------- retrieving with wildcard [] ----------
-- ********** Begin ********** --
SELECT *
FROM Products
WHERE NOT prod_name LIKE '[B]%'
-- ********** End ********** --
GO
以下题目
第1关:通配符%的使用
任务描述
本关任务:使用通配符 % 检索数据表中指定字段的数据;
相关知识
为了完成本关任务,你需要掌握:如何使用通配符 % 模糊匹配数据内容。
使用通配符%模糊匹配数据内容的后半部分
在所有通配符中,最常用的通配符要数 % 了。使用了 % 就意味着,你能从现有的数据中匹配到任意个数的字符(注意,可以是不止一个字符哟)。
语法规则为:
SELECT 字段名
FROM 表名
WHERE 字段名 LIKE '数据%';
举个例子
我们想从表 Customers 中检索到所有叫 Alice 的消费者的所有数据。表 Customers 的内容如下图所示。大家可以看到,我们有 Alice Nicholas 和 Alice Edwards 两个都叫 Alice 的人,该如何做才能同时匹配到他们两个呢?
输入:
SELECT *
FROM Customers
WHERE cust_name LIKE 'Alice%'
输出:
检索过程为:
在这个例子里,我们使用了模糊匹配模式 Alice% ,运行后,数据库会检索出所有以 Alice 为开头的字符串来,无论 Alice 后有多长的字符串数据库都能检索出来。
Tips:
注意,模式匹配是大小写敏感的!如果你检索的是 alice% ,那就什么都检索不到了!
使用通配符%模糊匹配数据内容的任意部分
如果,你想检索的内容既不在字符串的头部,也不在字符串的尾部,而是在它们的中间,你该如何检索呢?
举个例子
我们想从表 Customers 中得检索到所有拥有 yahoo 邮箱的消费者的所有数据。表 Customers 的内容如下图所示:
如果我们还按刚才的方法,看看我们能检索到什么?
输入:
SELECT *
FROM Customers
WHERE cust_email LIKE 'yahoo%'
输出:
啊哦!什么都没检索到!那是因为, yahoo% 模式严格匹配的是以 yahoo 开头的字符串。而大家可以看到,在我们的例子中,包含 yahoo 字符串的邮箱地址是以不同名字作为字符串开头的。
所以,要想匹配到五花八门的名字,我们需要把它们都变成通配符 % 。
输入:
SELECT *
FROM Customers
WHERE cust_email LIKE '%yahoo%'
输出:
检索过程为:
想象一下,如果你在 cust_email 中检索 a%m ,会得到什么样的结果?
下面轮到你们来试一试了。
编程要求
我们已经为你建好了数据库与数据表,并添加了相应的数据内容。你只需补全右侧代码片段中 retrieving with wildcard % 下 Begin-End 区间的代码,检索表 Products 中所有带 toy 的产品的所有内容。
其中表 Products 的内容如下图所示:
测试说明
测试过程:
本关涉及到的测试文件是 step1_test.sh ,平台将运行用户补全的 step1.sql 文件,得到数据;
将得到的数据与答案比较,判断代码是否正确。
如果操作正确,你将得到如下的结果:
第2关:通配符_的使用
任务描述
本关任务:使用通配符_检索数据表中指定字段的数据;
相关知识
为了完成本关任务,你需要掌握:如何使用通配符 _ 模糊匹配数据内容。
使用通配符_模糊匹配数据内容
另一个很实用的通配符是下划线 _ ,它的使用规则与 % 类似,唯一与 % 不同的是:% 能匹配多个字符,而 _ 只能匹配一个字符!
语法规则为:
SELECT 字段名
FROM 表名
WHERE 字段名 LIKE '数据和_的组合'
举个例子
我们想从表 Customers 中检索到 cust_id 尾数只有个位数的消费者的所有数据。表 Customers 的内容如下图所示。大家可以看到,我们只有一个 cust_id 尾数为两位数的消费者 Sol Pozo ,该如何撇开它呢?
输入:
SELECT *
FROM Customers
WHERE cust_id LIKE '100000000_'
输出:
检索过程为:
在这个例子里,通配符 _ 只匹配到了一个字符,那如果想匹配多个连起来的字符呢?那就把通配符 _ 连起来!
下面轮到你们来试一试了。
编程要求
我们已经为你建好了数据库与数据表,并添加了相应的数据内容。你只需补全右侧代码片段中 retrieving with wildcard _ 下 Begin-End 区间的代码,检索表 Products 中所有大于等于 10 inch 的产品的所有内容。
其中表 Products 的内容如下图所示:
测试说明
测试过程:
本关涉及到的测试文件是 step2_test.sh ,平台将运行用户补全的 step2.sql 文件,得到数据;
将得到的数据与答案比较,判断代码是否正确。
如果操作正确,你将得到如下的结果:
第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 文件,得到数据;
将得到的数据与答案比较,判断代码是否正确。
如果操作正确,你将得到如下的结果: