-- 通配符進行過濾 #使用條件是只能用於文本欄位(字元串),非文本數據類型欄位不能使用通配符搜索 -- LIKE操作符/* 當過濾中使用的值都是已知的時候可以不用通配符,但是當數據量很大 需要進行搜索特定條件的值,簡單的比較操作符肯定不行,這時候利用通配符,可以創建比較特定數據的搜索模式。什麼是通 ...
-- 通配符進行過濾
#使用條件是只能用於文本欄位(字元串),非文本數據類型欄位不能使用通配符搜索
-- LIKE操作符
/*
當過濾中使用的值都是已知的時候可以不用通配符,但是當數據量很大
需要進行搜索特定條件的值,簡單的比較操作符肯定不行,這時候利用
通配符,可以創建比較特定數據的搜索模式。
什麼是通配符? 用來匹配值的一部分的特殊字元
什麼是搜索模式?由字面值、通配符或兩者組合構成的搜索條件
一個顯著的標誌就是:通配符本身是SQL的WHERE子句中有特殊含義的字元
搜索子句中使用通配符必須使用LIKE操作符,LIKE指示DBMS,後跟的搜索模式利用通配符匹配而不是簡單的相等匹配進行比較
*/
-- 百分號(%)通配符(%表示任意字元出現任意次數)
SELECT prod_id,prod_name
FROM Products
WHERE prod_name LIKE 'Fish%';
#表示以Fish開頭,Fish之後任意字元,不管有多少
-- DBMS的不同,搜索是可以區分大小寫的,匹配出的結果也就不一樣
-- 通配符可在搜索模式中的任意位置使用,並且可以使用多個通配符
SELECT prod_id,prod_name
FROM Products
WHERE prod_name LIKE '%bean bag%';/* '%bean bag%'表示匹配任何位置包含bean bag的值,不論它前後出現什麼字元*/
-- 匹配找出F開頭,y結尾的所有產品
SELECT prod_name
FROM Products
WHERE prod_name LIKE 'F%y';
-- 需要特別註意的是%也可以匹配0個字元,即在搜索模式中可以匹配0個、1個或多個字元
/* 當DBMS用空格來填補欄位的內容的時候,
y後面有很多空格,
這個時候'F%y'就無法檢索出來,
需要使用'F%y%'。更好的解決辦法是用函數去掉空格。
此外,通配符%不會匹配NULL
*/
-- 下劃線_通配符(用途與%一樣,但是只能匹配單個字元,而不是多個字元)
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';
/*
[]通配符只有Access和SQL Server支持集合,它用來指定一個字元集,必須匹配指定位置的一個字元
SELECT cust_contact
FROM Customers
WHERE cust_contact LIKE'[JM]%'
ORDER BY cust_contact;
其中[JM]匹配方括弧中的任意一個字元,只能匹配打個字元,即以J或者M開頭的姓氏
也可以加入首碼字元^來進行否定,匹配得到J和M之外的任意字元起頭的人名[^JM]
此外NOT操作符在這裡與^功能相同
SELECT cust_contact
FROM Customers
WHERE NOT cust_contact LIKE '[JM]%'
ORDER BY cust_contact;
^的唯一優點就是在使用多個WHERE子句時可以簡化語法
*/
/*
使用通配符的技巧:
1.不要過度使用,因為通配符搜索比其他搜索要耗費更長的處理時間。
2.確實需要使用通配符時,不要置於搜索模式的開始處,這樣搜索起來是最慢的。
3.註意位置,放錯的話不會得到想要的結果。
*/