SQL | 使用通配符進行過濾

6-使用通配符進行過濾

6.1-LIKE操作符

前面介紹的所有操作符都是通過已知的值進行過濾,或者檢查某個范圍的值。但是如果我們想要查找產品名字中含有bag的數據,就不能使用前面那種過濾情況。

利用通配符,可以創建比較特定數據的搜索模式。

搜索模式:由字面值、通配符或兩者組合構成的搜索條件。

通配符實際上是SQL語句中where子句中具有特殊含義的字符,SQL支持幾種通配符。在為搜索子句中使用通配符,必須使用like操作符。

謂詞:操作符何時不是操作符?答案是,它作為謂詞時。從技術上說,LIKE是謂詞而不是操作符。

通配符搜索只能用于文本字段(字符串),非文本數據類型字段不能使用通配符搜索。

6.1.1 百分號(%)通配符

百分號是最常用的通配符,%表示任何字符出現任意次數。

select prod_id,prod_name
from products
where prod_name LIKE 'Fish%';

上述SQL語句的含義是,查找名稱以‘Fish’開頭的行。執行上述語句時,會檢索所有以'Fish'開頭的詞,不管它有多少字符。

一般來說,根據DBMS不同的配置,可以是區分大小寫,'Fish'和‘fish’相同。也可以是不區分大小寫,'Fish'和‘fish’不同。

通配符可以在搜索模式任意位置使用,并且可以使用多個通配符。

select prod_id,prod_name
from products
where prod_name LIKE '%bean bag%';

?

上述語句檢索的數據特征是:名字中含有bean bag這段字符串的數據,不管它之前或者之后出現什么樣的字符串。

通配符還可以出現搜索模式的中間,雖然這么做不太有用。下面例子找出以F開頭,以y結尾的數據。

select prod_id,prod_name
from products
where prod_name LIKE 'F%y';

?

有一種情況把通配符放到搜索模式的中間,是很有效果的,就是根據郵件地址的一部分查找郵件。例如WHERE email LIKE 'b%@forta.com'

注意:除了能匹配一個或多個字符以外,%還可以匹配0個字符。%代表搜索模式中給定位置的0個、1個或多個字符。

通配符%看起來像是可以匹配任何東西,但有個例外,這就是NULL。子句WHERE prod_name LIKE '%'不會匹配產品名稱為NULL的行。

6.1.2 下劃線(_)通配符

作用與%通配符相同,只不過,它只匹配單個字符,并不會匹配多個字符。

select prod_id,prod_name
from products
where prod_name LIKE '__ inch teddy bear';

上述代碼,給出了兩個下劃線通配符,檢索出的數據應該是開頭兩個字符的數據。因此,產品名為“8 inch teddy bear”的產品不會被檢索到。

6.1.3 方括號([ ])通配符

方括號通配符是指定一個字符集,它必須匹配指定位置(通配符的位置)的一個字符。

并不是所有DBMS都支持用來創建集合的[]。微軟的SQL Server支持集合,但是MySQL,Oracle,DB2,SQLite都不支持

SELECT cust_contact 
FROM Customers 
WHERE cust_contact LIKE '[JM]%' 
ORDER BY cust_contact; 

名字以J或M起頭的聯系人。

此語句的WHERE子句中的模式為'[JM]%'。這一搜索模式使用了兩個不同的通配符。[JM]匹配方括號中任意一個字符,它也只能匹配單個字符。因此,任何多于一個字符的名字都不匹配。[JM]之后的%通配符匹配第一個字符之后的任意數目的字符,返回所需結果。

此通配符可以用前綴字符^(脫字號)來否定。例如,下面的查詢匹配以J和M之外的任意字符起頭的任意聯系人名。

SELECT cust_contact
FROM Customers
WHERE cust_contact LIKE '[^JM]%'
ORDER BY cust_contact;

也可以使用NOT操作符得出類似的結果。^的唯一優點是在使用多個WHERE子句時可以簡化語法

SELECT cust_contact
FROM Customers
WHERE NOT cust_contact LIKE '[JM]%'
ORDER BY cust_contact;

6.2-使用通配符技巧

SQL通配符很有用,但是這種功能也是有代價的,相較于其他檢索來說,通配符更耗費時間。

技巧:

  • 不要過度使用通配符。如果其他操作符能達到相同目的,應該以其他操作符為主。

  • 在確實需要使用通配符的時候,也不要把通配符使用在開始處。把通配符置于開始處是速度最慢的。

  • 注意通配符的位置,如果位置不對,則返回的結果可能不盡如人意。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36387.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36387.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36387.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

selenium 爬蟲

selenium 可以動態爬取網頁數據,就像真實用戶操作瀏覽器一樣,從終端用戶的角度測試應用程序,WebDriver通過原生瀏覽器支持或者瀏覽器擴展直接控制瀏覽器 webdriver下載 因為selenuim對瀏覽器的版本存在兼容問題,顧需要針對指定瀏…

SAP系統是什么呢?它有哪些優勢?

SAP系統是全球知名的企業資源規劃(ERP)解決方案供應商。它集成了財務、供應鏈管理、人力資源管理、銷售和客戶關系管理等多個功能模塊,為企業提供全面、集成的管理體驗。SAP系統已成為各行各業企業管理的智慧選擇,極大地提升了管理…

c++ 有元

友元分為兩部分內容 友元函數友元類 友元函數 問題&#xff1a;當我們嘗試去重載operator<<&#xff0c;然后發現沒辦法將operator<<重載成成員函數。因為cout的輸出流對象和隱含的this指針在搶占第一個參數的位置。this指針默認是第一個參數也就是左操作 數了。…

如何在vue3中加入markdown語法

1、首先需要安裝 md-editor-v3 yarn add md-editor-v3 或者是在vue圖形化界面中直接搜索 md-editor-v3 進行安裝。 2、引入該編輯頁 引入可以參考這個&#xff0c;根據自己的需求進行修改和添加。 <template><md-editor v-model"text"/> </templat…

基于dbn+svr的交通流量預測,dbn詳細原理

目錄 背影 DBN神經網絡的原理 DBN神經網絡的定義 受限玻爾茲曼機(RBM) DBN+SVR的交通流量預測 基本結構 主要參數 數據 MATALB代碼 結果圖 展望 背影 DBN是一種深度學習神經網絡,擁有提取特征,非監督學習的能力,是一種非常好的分類算法,本文將DBN+SVR用于交通流量預測…

二叉樹題目:二叉樹的直徑

文章目錄 題目標題和出處難度題目描述要求示例數據范圍 解法思路和算法代碼復雜度分析 題目 標題和出處 標題&#xff1a;二叉樹的直徑 出處&#xff1a;543. 二叉樹的直徑 難度 3 級 題目描述 要求 給定二叉樹的根結點 root \texttt{root} root&#xff0c;返回其直徑…

考研408 | 【計算機網絡】 傳輸層

導圖 傳輸層的功能 傳輸層的兩個協議 傳輸層的尋址與端口 UDP協議 UDP的主要特點 UDP首部格式&#xff1a; UDP校驗&#xff1a; TCP協議 TCP協議的特點 TCP報文段首部格式 TCP連接管理 TCP的連接建立 SYN洪泛攻擊 TCP的連接釋放 TCP可靠傳輸 序號&#xff1a; 確認&#xff1…

ASEMI快恢復二極管APT80DQ20BG怎么檢查好壞

編輯-Z 二極管APT80DQ20BG是一種高壓快恢復二極管&#xff0c;常用于電源和電能質量控制等領域。如果您的二極管出現故障或需要進行維修&#xff0c;以下是一些可能的解決方案。 首先&#xff0c;確保您已經斷開了電源&#xff0c;并且具備基本的電子維修知識和技能。如果您不…

添加vue devtools擴展工具+添加后F12不顯示Vue圖標

前言&#xff1a;在開啟Vue學習之旅時&#xff0c;遇到問題兩個問題&#xff0c;第一添加不上vue devtools擴展工具&#xff0c;第二添加完成后&#xff0c;F12不顯示Vue圖標。查閱了很多博客&#xff0c;自己解決了問題&#xff0c;故寫此博客記錄。如果你遇到和我一樣的問題&…

React源碼解析18(3)------ beginWork的工作流程【mount】

摘要 OK&#xff0c;經過上一篇文章。我們調用了&#xff1a; const root document.querySelector(#root); ReactDOM.createRoot(root)生成了FilberRootNode和HostRootFilber。 并且二者之間的對應關系也已經確定。 而下一步我們就需要調用render方法來講react元素掛載在ro…

【JavaEE進階】SpringBoot 日志

文章目錄 一. 日志有什么用?二. 自定義日志打印1. 日志的使用與打印 三. 日志級別1. 日志級別有什么用?2. 日志級別的分類及使用 四. 日志持久化五. 更簡單的日志輸出---Lombok1. Lombok的使用2. lombok原理解釋2.1 Lombok更多注解說明 一. 日志有什么用? 在Java中&#xf…

【結構型設計模式】C#設計模式之外觀模式

題目描述&#xff1a; 假設你正在開發一個音樂播放器應用程序&#xff0c;該應用程序需要與多個子系統進行交互&#xff0c;包括音頻解碼、音量控制和播放控制等。請使用外觀模式設計一個音樂播放器的外觀類&#xff0c;并實現相應的子系統類。 要求&#xff1a; 創建一個外觀…

【gogogo專欄】指針

go語言指針 為什么需要指針指針使用實例值傳遞地址傳遞多級指針 為什么需要指針 作為一個大學劃水&#xff0c;畢業一直寫java的程序員來說&#xff0c;多多少少對于指針有點陌生&#xff0c;由于近期需要轉go&#xff0c;正好學到指針這里&#xff0c;就來探究下指針的使用場景…

ThreadLocal詳解

ThreadLocal詳解 一、故事背景二、知識點主要構成1、什么是ThreadLocal&#xff1f;2、ThreadLocal的基本使用內存泄漏問題引用類型&#xff1a;強引用&#xff1a;軟引用弱引用虛引用 ThreadLocal內存泄漏原因 三、總結提升 一、故事背景 最近在學習并發編程相關內容&#xf…

pycharm 安裝庫

這是另一種方式。 搜索到的安裝庫的方式多數是&#xff1a;在桌面上winR鍵運行終端&#xff0c;輸入命令&#xff0c;安裝不了&#xff0c;發現安裝不了。 1、打開pycharm&#xff1b; 2、軟件下部的Terminal終端(需要運行一個代碼才能出現&#xff0c;任何代碼都可)&#xf…

Es、kibana安裝教程-ES(二)

上篇文章介紹了ES負責數據存儲&#xff0c;計算和搜索&#xff0c;他與傳統數據庫不同&#xff0c;是基于倒排索引來解決問題的。Kibana是es可視化工具。 分布式搜索ElasticSearch-ES&#xff08;一&#xff09; 一、ElasticSearch安裝 官網下載地址&#xff1a;https://www…

[C語言] 指針

1. 指針是什么 2. 指針和指針類型 3. 野指針 4. 指針運算 5. 指針和數組 6. 二級指針 7. 指針數組 目錄 1. 指針是什么&#xff1f; 2. 指針和指針類型 2.1 指針-整數 2.2 指針的解引用 3. 野指針 3.1 野指針成因 3.2 如何規避野指針 4. 指針運算 4.1 指針…

不用技術代碼,分班查詢系統怎么做?

暑假即將結束&#xff0c;新學期開始將面臨分班信息公布的工作&#xff01;對于分班信息公布&#xff0c;涉及到學生的個人信息&#xff0c;包括姓名、學號、班級等。在發布這些信息時&#xff0c;必須確保數據的保密性&#xff0c;防止未經授權的人員獲取到學生的個人信息。因…

對字符串中所有單詞進行倒排-C語言/Java

描述 輸入一個字符串&#xff0c;輸出字符串中單詞的倒序。 要求 構成單詞的字符只有26個大寫或小寫英文字母。非構成單詞的字符均視為單詞間隔符&#xff1b;倒排后的單詞間隔符以一個空格表示&#xff1b;如果原字符串中相鄰單詞間有多個間隔符時&#xff0c;倒排轉換后也只…

docker的服務/容器缺少vim問題

背景/問題&#xff1a; docker的服務/容器缺少vim問題 bash: vim: command not found 在docker的mysql服務中安裝Vim 1、執行apt-get update root6d8d17e320a0:/# apt-get update問題:文件下載失敗 Err:1 http://security.debian.org/debian-security buster/updates InRe…