目標(biāo):
1. LIKE 操作符
2.使用通配符的技巧
6.1 LIKE操作符
1. 通配符(wildcard)用來匹配值的一部分的特殊字符。
2. 搜索模式(search pattern)由字面值吻贿、通配符或兩者組合構(gòu)成的搜索條件朝群。
3. 為在搜索子句中使用通配符蒋得,必須使用 LIKE 操作符肆捕。LIKE指示 DBMS行冰,后跟的搜索模式利用通配符匹配而不是簡(jiǎn)單的相等匹配進(jìn)行比較。
4. 謂詞(predicate)操作符何時(shí)不是操作符奏属?答案是,它作為謂詞時(shí)潮峦。從技術(shù)上說囱皿,LIKE是謂詞而不是操作符勇婴。雖然最終的結(jié)果是相同的,但應(yīng)該對(duì)此術(shù)語有所了解嘱腥,以免在 SQL 文獻(xiàn)或手冊(cè)中遇到此術(shù)語時(shí)不知所云耕渴。
5. 通配符搜索只能用于文本字段(字符串),非文本數(shù)據(jù)類型字段不能使用通配符搜索齿兔。
6.1.1 百分號(hào)(%)通配符
最常使用的通配符是百分號(hào)(%)橱脸。在搜索串中,%表示任何字符出現(xiàn)任意次數(shù)分苇。例如添诉,為了找出所有以詞 Fish 起頭的產(chǎn)品,可寫以下的 SELECT 語句:
SELECT prod_name,prod_price
FROM products
WHERE prod_name LIKE 'fish%';
分析▼
?此例子使用了搜索模式'Fish%'医寿。在執(zhí)行這條子句時(shí)栏赴,將檢索任意以Fish 起頭的詞。%告訴 DBMS 接受 Fish 之后的任意字符靖秩,不管它有多 少字符须眷。
輸出:
說明:區(qū)分大小寫,要看配置沟突。
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '%bean bag%';
分析▼
搜索模式'%bean bag%'表示匹配任何位置上包含文本 bean bag 的值花颗,
不論它之前或之后出現(xiàn)什么字符。
輸出:
SELECT prod_name?
FROM Products?
WHERE prod_name LIKE 'F%y';
分析▼?找出以 F 起頭惠拭、以 y 結(jié)尾的所有產(chǎn)品:
輸出:
提示:根據(jù)部分信息搜索電子郵件地址?
?有一種情況下把通配符放在搜索模式中間是很有用的扩劝,就是根據(jù)郵件地址的一部分來查找電子郵件,例如 WHERE email LIKE 'b%@forta.com'求橄。
需要特別注意今野,除了能匹配一個(gè)或多個(gè)字符外,%還能匹配 0 個(gè)字符罐农。%代表搜索模式中給定位置的 0 個(gè)条霜、1 個(gè)或多個(gè)字符。
6.1.2 下劃線(_)通配符
1. 另一個(gè)有用的通配符是下劃線(_)涵亏。下劃線的用途與%一樣宰睡,但它只匹配單個(gè)字符,而不是多個(gè)字符气筋。
2. 說明:DB2 通配符拆内,DB2 不支持通配符_。
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '__ inch teddy bear';
分析▼
這個(gè) WHERE 子句中的搜索模式給出了后面跟有文本的兩個(gè)通配符宠默。結(jié)果只顯示匹配搜索模式的行:第一行中下劃線匹配 12麸恍,第二行中匹配18。8 inch teddy bear 產(chǎn)品沒有匹配,因?yàn)?b>搜索模式要求匹配兩個(gè)通配符而不是一個(gè)抹沪。
輸出:
對(duì)照一下刻肄,下面的 SELECT 語句使用%通配符,返回三行產(chǎn)品:
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '% inch teddy bear';
輸出:
6.1.3 方括號(hào)([])通配符(MySQL不支持)
SELECT cust_contact
FROM Customers
WHERE cust_contact LIKE '[JM]%'
ORDER BY cust_contact;
SELECT cust_contact
FROM Customers
WHERE cust_contact LIKE '[*JM]%'
ORDER BY cust_contact;
6.2 使用通配符的技巧
1. 不要過度使用通配符融欧。如果其他操作符能達(dá)到相同的目的敏弃,應(yīng)該使用其他操作符。
2. 在確實(shí)需要使用通配符時(shí)噪馏,也盡量不要把它們用在搜索模式的開始處麦到。把通配符置于開始處,搜索起來是最慢的欠肾。
3. 仔細(xì)注意通配符的位置瓶颠。如果放錯(cuò)地方,可能不會(huì)返回想要的數(shù)據(jù)董济。
總之步清,通配符是一種極其重要和有用的搜索工具,以后我們經(jīng)常會(huì)用到它虏肾。
6.3 小結(jié)
LIKE操作符后面使用”%“廓啊,”_“,"[]"。%可以用在開頭封豪,首尾和中間谴轮,_只能匹配單個(gè)字符,[]只能SQL server使用
-- ----------第6課 用通配符進(jìn)行過濾----------------------
-- ---------------------------------
-- 6.1 LIKE操作符
-- 6.1.1 百分號(hào)(%)通配符
SELECT prod_name,prod_price
FROM products
WHERE prod_name LIKE 'fish%';
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '%bean bag%';
SELECT prod_name
FROM Products
WHERE prod_name LIKE 'F%y';
-- 6.1.2 下劃線(_)通配符
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '__ inch teddy bear';
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '% inch teddy bear';
-- 6.1.3 方括號(hào)([])通配符
/*SELECT cust_contact
FROM Customers;
SELECT cust_contact
FROM Customers
WHERE cust_contact LIKE '[JM]%'
ORDER BY cust_contact;
SELECT cust_contact
FROM Customers
WHERE cust_contact LIKE '[*JM]%'
ORDER BY cust_contact;*/
挑戰(zhàn)題:
1. 編寫 SQL 語句吹埠,從 Products 表中檢索產(chǎn)品名稱(prod_name)和描述(prod_desc)第步,僅返回描述中包含 toy 一詞的產(chǎn)品。
SELECT prod_name,prod_desc
FROM products
WHERE prod_desc LIKE '%toy%';
2. 反過來再來一次缘琅。編寫 SQL 語句粘都,從 Products 表中檢索產(chǎn)品名稱(prod_name)和描述(prod_desc),僅返回描述中未出現(xiàn) toy 一詞的產(chǎn)品刷袍。這次翩隧,按產(chǎn)品名稱對(duì)結(jié)果進(jìn)行排序。
SELECT prod_name,prod_desc
FROM products
WHERE NOT prod_desc LIKE '%toy%'
ORDER BY prod_name;
3. 編寫 SQL 語句呻纹,從 Products 表中檢索產(chǎn)品名稱(prod_name)和描述(prod_desc)堆生,僅返回描述中同時(shí)出現(xiàn) toy 和 carrots 的產(chǎn)品。有好幾種方法可以執(zhí)行此操作雷酪,但對(duì)于這個(gè)挑戰(zhàn)題淑仆,請(qǐng)使用 AND 和兩個(gè) LIKE 比較。
SELECT prod_name,prod_desc
FROM products
WHERE prod_desc LIKE '%toy%' AND prod_desc LIKE '%carrots%';
4. 來個(gè)比較棘手的哥力。我沒有特別向你展示這個(gè)語法蔗怠,而是想看看你根據(jù)目前已學(xué)的知識(shí)是否可以找到答案。編寫 SQL 語句,從 Products 表中檢索產(chǎn)品名稱(prod_name)和描述(prod_desc)寞射,僅返回在描述中以先后順序同時(shí)出現(xiàn) toy 和 carrots 的產(chǎn)品最住。提示:只需要用帶有三個(gè) % 符號(hào)的 LIKE 即可。
SELECT prod_name,prod_desc
FROM products
WHERE prod_desc LIKE '%toy%carrots%';