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
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...