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.rhkb.cn/news/90586.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Open3D 最小二乘拟合平面(SVD分解法)

目录 一、算法原理二、代码实现三、结果展示1、点云2、拟合结果四、优秀博客本文由CSDN点云侠原创,原文链接。爬虫网站自重。 一、算法原理 本文实现矩阵奇异值分解方法的最小二乘拟合平面。原理如下: 对于得到的 n n

8 张图 | 剖析 Eureka 的首次同步注册表

注册表对于注册中心尤为重要,所有的功能都是围绕这个注册表展开。比如服务 A 要想访问服务 B,就得知道服务 B 的 IP 地址和端口号吧。如下图所示,传统的方式就是服务 A 知道了服务 B 的地址后,发送 HTTP 请求到对应的 API 地址上。…

wsl2安装docker引擎(Install Docker Engine on Debian)

安装 1.卸载旧版本 在安装 Docker 引擎之前,您必须首先确保卸载任何冲突的软件包。 发行版维护者在他们的存储库。必须先卸载这些软件包,然后才能安装 Docker 引擎的正式版本。 要卸载的非官方软件包是: docker.iodocker-composedocker-…

【深度学习】NLP中的对抗训练

在NLP中,对抗训练往往都是针对嵌入层(包括词嵌入,位置嵌入,segment嵌入等等)开展的,思想很简单,即针对嵌入层添加干扰,从而提高模型的鲁棒性和泛化能力,下面结合具体代码…

[NepCTF 2023] crypto 复现

这个赛很不理想,啥都不会。 拿了WP看了几个题,记录一下 random_RSA 这题不会是正常情况,我认为。对于论文题,不知道就是不知道,基本没有可能自己去完成论文。 题目不长,只有两个菜单,共可交…

win10中Docker安装、构建镜像、创建容器、Vscode连接实例

Docker方便一键构建项目所需的运行环境:首先构建镜像(Image)。然后镜像实例化成为容器(Container),构成项目的运行环境。最后Vscode连接容器,方便我们在本地进行开发。下面以一个简单的例子介绍在win10中实现:Docker安装、构建镜像…

九州未来参与编制的开源领域3项团体标准获批发布

日前,中电标2023年第21号团体标准公告正式发布,其中由九州未来参与编制的3项开源领域团体标准正式获批发布,于2023年8月1日正式实施。 具体内容如下: 《T/CESA 1269-2023 信息技术 开源 术语与综述》,本文件界定了信息…

“万恶”之源的KieServices,获取代码就一行,表面代码越少里面东西就越多,本以为就是个简单的工厂方法,没想到里面弯弯绕绕这么多东西

Drools用户手册看了得有一段时间了,现在开始看源码了,因为每次使用drools都会看见这么一段代码: 代码段1 起手代码 KieServices ks KieServices.Factory.get(); 那我就从这段代码出发开始研究drools的源码吧,这么一小段代码起初…

LangChain手记 Models,Prompts and Parsers

整理并翻译自DeepLearning.AILangChain的官方课程:Models,Prompts and Parsers 模型,提示词和解析器(Models, Prompts and Parsers) 模型:大语言模型提示词:构建传递给模型的输入的方式解析器:…

大语言模型:LLM的概念是个啥?

一、说明 大语言模型(维基:LLM- large language model)是以大尺寸为特征的语言模型。它们的规模是由人工智能加速器实现的,人工智能加速器能够处理大量文本数据,这些数据大部分是从互联网上抓取的。 [1]所构建的人工神…

Qt应用开发(基础篇)——工具箱 QToolBox

一、前言 QToolBox类继承于QFrame,QFrame继承于QWidget,是Qt常用的基础工具部件。 框架类QFrame介绍 QToolBox工具箱类提供了一列选项卡窗口,当前项显示在当前选项卡下面,适用于分类浏览、内容展示、操作指引这一类的使用场景。 二…

基于熵权法对Topsis模型的修正

由于层次分析法的最大缺点为:主观性太强,影响判断,对结果有很大影响,所以提出了熵权法修正。 变异程度方差/标准差。 如何度量信息量的大小: 把不可能的事情变成可能,这里面就有很多信息量。 概率越大&…

KCC@广州开源读书会广州开源建设讨论会

亲爱的开源读书会朋友们, 在下个周末我们将举办一场令人激动的线下读书会,探讨两本引人入胜的新书《只是为了好玩》和《开源之迷》。作为一个致力于推广开源精神和技术创新的社区,这次我们还邀请了圈内大咖前来参与,会给大家提供一…

瑞数信息《2023 API安全趋势报告》重磅发布: API攻击持续走高,Bots武器更聪明

如今API作为连接服务和传输数据的重要通道,已成为数字时代的新型基础设施,但随之而来的安全问题也日益凸显。为了让各个行业更好地应对API安全威胁挑战,瑞数信息作为国内首批具备“云原生API安全能力”认证的专业厂商,近年来持续输…

观察者模式实战

场景 假设创建订单后需要发短信、发邮件等其它的操作,放在业务逻辑会使代码非常臃肿,可以使用观察者模式优化代码 代码实现 自定义一个事件 发送邮件 发送短信 最后再创建订单的业务逻辑进行监听,创建订单 假设后面还需要做其它的…

【12】Git工具 协同工作平台使用教程 Gitee使用指南 腾讯工蜂使用指南【Gitee】【腾讯工蜂】【Git】

tips:少量的git安装和使用教程,更多讲快速使用上手Gitee和工蜂平台 一、准备工作 1、下载git Git - Downloads (git-scm.com) 找到对应操作系统,对应版本,对应的位数 下载后根据需求自己安装,然后用git --version验…

自动化更新导致的各种问题解决办法

由于最近自动化频频更新导致出现各种问题,因此在创建驱动对象代码时改成这种方式 我最近就遇到了由于更新而导致的代码报错,报错信息如下: 复制内容如下: Exception in thread “main” org.openqa.selenium.remote.http.Connecti…

【C++】多态的概念和简单介绍、虚函数、虚函数重写、多态构成的条件、重载、重写、重定义

文章目录 多态1.多态的概念和介绍2.虚函数2.1final2.2override 3.虚函数的重写3.1协变3.2析构函数的重写 4.多态构成的条件5.重载、重写、重定义...... 多态 1.多态的概念和介绍 C中的多态是一种面向对象编程的特性,它允许不同的对象对同一个消息做出不同的响应。 …

Hazel 引擎学习笔记

目录 Hazel 引擎学习笔记学习方法思考引擎结构创建工程程序入口点日志系统Premake\MD没有 cpp 文件的项目会出错include 到某个库就要包含这个库的路径,注意头文件展开 事件系统 获取和利用派生类信息预编译头文件抽象窗口类和 GLFWgit submodule addpremake 脚本禁…

【JVM】对String::intern()方法深入详解(JDK7及以上)

文章目录 1、什么是intern?2、经典例题解释例1例2例3 1、什么是intern? String::intern()是一个本地方法,它的作用是如果字符串常量池中已经包含一个等于此String对象的字符串,则返回代表池中这个字符串的String对象的引用&#…