mysql必知必會--用通配符進行過濾

来源:https://www.cnblogs.com/ygjzs/archive/2020/01/21/12222328.html
-Advertisement-
Play Games

LIKE 操作符 前面介紹的所有操作符都是針對已知值進行過濾的。不管是匹配一 個還是多個值,測試大於還是小於已知值,或者檢查某個範圍的值,共 同點是過濾中使用的值都是已知的。但是,這種過濾方法並不是任何時 候都好用。例如,怎樣搜索產品名中包含文本anvil的所有產品?用簡單 的比較操作符肯定不行,必 ...


LIKE 操作符

前面介紹的所有操作符都是針對已知值進行過濾的。不管是匹配一
個還是多個值,測試大於還是小於已知值,或者檢查某個範圍的值,共
同點是過濾中使用的值都是已知的。但是,這種過濾方法並不是任何時
候都好用。例如,怎樣搜索產品名中包含文本anvil的所有產品?用簡單
的比較操作符肯定不行,必須使用通配符。利用通配符可創建比較特定
數據的搜索模式。在這個例子中,如果你想找出名稱包含anvil的所有產
品,可構造一個通配符搜索模式,找出產品名中任何位置出現anvil的產
品。

通配符(wildcard) 用來匹配值的一部分的特殊字元。
搜索模式(search pattern)由字面值、通配符或兩者組合構
成的搜索條件。
通配符本身實際是SQL的 WHERE 子句中有特殊含義的字元,SQL支持幾
種通配符。為在搜索子句中使用通配符,必須使用 LIKE 操作符。 LIKE
指示MySQL,後跟的搜索模式利用通配符匹配而不是直接相等匹配進行比較。

謂詞 操作符何時不是操作符?答案是在它作為謂詞(predi-
cate)時。從技術上說, LIKE 是謂詞而不是操作符。雖然最終
的結果是相同的,但應該對此術語有所瞭解,以免在SQL文檔
中遇到此術語時不知道

百分號( % )通配符

最常使用的通配符是百分號( % )。在搜索串中, % 表示任何字元出現
任意次數。例如,為了找出所有以詞 jet 起頭的產品,可使用以下 SELECT
語句:

此例子使用了搜索模式 'jet%' 。在執行這條子句時,將檢索任
意以 jet 起頭的詞。 % 告訴MySQL接受 jet 之後的任意字元,不
管它有多少字元
區分大小寫 根據MySQL的配置方式,搜索可以是區分大小
寫的。如果區分大小寫, 'jet%' 與 JetPack 1000 將不匹配

通配符可在搜索模式中任意位置使用,並且可以使用多個通配符。
下麵的例子使用兩個通配符,它們位於模式的兩端

搜索模式 '%anvil%' 表示匹配任何位置包含文本anvil的值,而
不論它之前或之後出現什麼字元。
通配符也可以出現在搜索模式的中間,雖然這樣做不太有用。下麵
的例子找出以 s 起頭以 e 結尾的所有產品:

註意尾空格 尾空格可能會幹擾通配符匹配。例如,在保存詞
anvil 時,如果它 後面有一個或多個空格,則子句 WHERE
prod_name LIKE '%anvil' 將不會匹配它們,因為在最後的 l
後有多餘的字元。解決這個問題的一個簡單的辦法是在搜索模
式最後附加一個 % 。一個更好的辦法是使用函數(第11章將會
介紹)去掉首尾空格
註意NULL 雖然似乎 % 通配符可以匹配任何東西,但有一個例
外,即 NULL 。即使是 WHERE prod_name LIKE '%' 也不能匹配
用值 NULL 作為產品名的行

下劃線( _ )通配符

另一個有用的通配符是下劃線( _ )。下劃線的用途與 % 一樣,但下劃
線只匹配單個字元而不是多個字元


此 WHERE 子句中的搜索模式給出了後面跟有文本的兩個通配
符。結果只顯示匹配搜索模式的行:第一行中下劃線匹配 1 ,
第二行中匹配 2 。 .5 ton anvil 產品沒有匹配,因為搜索模式要求匹配兩
個通配符而不是一個。對照一下,下麵的 SELECT 語句使用 % 通配符,返回
三行產品:

與 % 能匹配0個字元不一樣,_總是匹配一個字元,不能多也不能少

使用通配符的技巧

正如所見,MySQL的通配符很有用。但這種功能是有代價的:通配
符搜索的處理一般要比前面討論的其他搜索所花時間更長。這裡給出一
些使用通配符要記住的技巧。

  • 不要過度使用通配符。如果其他操作符能達到相同的目的,應該
    使用其他操作符。
  • 在確實需要使用通配符時,除非絕對有必要,否則不要把它們用
    在搜索模式的開始處。把通配符置於搜索模式的開始處,搜索起
    來是最慢的。
  • 仔細註意通配符的位置。如果放錯地方,可能不會返回想要的數
    據。
    總之,通配符是一種極重要和有用的搜索工具,以後我們經常會用
    到它。

本章介紹了什麼是通配符以及如何在 WHERE 子句中使用SQL通配符,
並且還說明瞭通配符應該細心使用,不要過度使用。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 話不多說,先看運行效果: >./term input flag 0x00000500 BRKINT not in ICRNL IGNBRK not in IGNCR not in IGNPAR not in IMAXBEL not in INLCR not in INPCK not in ISTRI ...
  • 據報道三星已經成功研發出有望替代嵌入式快閃記憶體存儲器(eFlash)的嵌入式磁阻隨機訪問記憶體(eMRAM),容量為1Gb,測試晶元的優良率已達90%。 隨著5G物聯網時代的來臨,存儲器領域發展快速,而在這一領域,韓系廠商擁有著比較明顯的優勢。 MRAM晶元是一種以電阻為存儲方式結合非易失性及隨機訪問兩種 ...
  • 思路:一臺Server 2016用作AD+DNS,一臺Server 2016用作Exchange Server 2016 Exchange Server 2016 CU14 安裝路徑:安裝路徑:https://www.microsoft.com/en-us/download/details.aspx ...
  • WEB管理工具 WebVirtMgr WebVirtMgr是一個基於libvirt的Web界面,用於管理虛擬機。它允許您創建和配置新域,並調整域的資源分配。VNC查看器為來賓域提供完整的圖形控制台。KVM是目前唯一支持的虛擬機管理程式。 基礎環境 hosts免密登錄 kvm所用的所有伺服器都需要互相 ...
  • JDK 的安裝系統安裝就不做過多介紹,大家從網上尋找安裝步驟進行安裝,不過我推薦大家進行安裝時選擇桌面圖形化格式進行安裝,方便做一部分操作,同時在安裝過程中選擇英文模式,同時我自己在安裝的過程中發現使用Oracle VM VirtualBox這個虛擬機工具比使用VM工具開發更加方便些 使用工具 系統 ...
  • 造成這種情況的原因有很多,如果直接百度錯誤信息的話,不一定能很快解決問題,所以,出現這種情況,我們可以使用 mysqld console 命令來查看報錯信息,然後根據報錯信息來百度,這樣就很快定位到問題所在。看到以下截圖,我的問題是 Please make sure that directory e ...
  • 推薦閱讀: 論主數據的重要性(正確理解元數據、數據元) CDC+ETL實現數據集成方案 Java實現impala操作kudu 實戰kudu集成impala impala基本介紹 impala是cloudera提供的一款高效率的sql查詢工具,提供實時的查詢效果,官方測試性能比hive快10到100倍 ...
  • 正則表達式介紹 前兩章中的過濾例子允許用匹配、比較和通配操作符尋找數據。對 於基本的過濾(或者甚至是某些不那麼基本的過濾),這樣就足夠了。但 隨著過濾條件的複雜性的增加, WHERE 子句本身的複雜性也有必要增加。 這也就是正則表達式變得有用的地方。正則表達式是用來匹配文本 的特殊的串(字元集合)。 ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...