【数据库设计和SQL基础语法】--查询数据--过滤
一、过滤数据
1.1 WHERE子句
-
基本条件过滤
- 使用比较运算符
在SQL中,基本条件过滤是通过使用比较运算符来限定检索的数据。以下是一些常用的比较运算符和它们的用法:
运算符 说明 示例 等于 (=) 用于检索列中与指定值相等的行。 示例: SELECT * FROM employees WHERE department_id = 1;
不等于 (<>, !=) 用于检索列中与指定值不相等的行。 示例: SELECT * FROM products WHERE category <> 'Electronics';
大于 (>) 用于检索列中大于指定值的行。 示例: SELECT * FROM orders WHERE total_amount > 1000;
小于 (<) 用于检索列中小于指定值的行。 示例: SELECT * FROM students WHERE age < 18;
大于等于 (>=) 用于检索列中大于或等于指定值的行。 示例: SELECT * FROM employees WHERE salary >= 50000;
小于等于 (<=) 用于检索列中小于或等于指定值的行。 示例: SELECT * FROM products WHERE price <= 50;
这些比较运算符可以在
WHERE
子句中灵活使用,帮助过滤出满足特定条件的数据。在实际应用中,可以根据需要组合多个条件来实现更复杂的数据过滤。- 使用逻辑运算符
逻辑运算符在SQL中用于结合多个条件,从而实现更复杂的条件过滤。以下是一些常用的逻辑运算符及其用法:
运算符 说明 示例 AND 运算符 用于结合两个条件,要求同时满足两个条件的行被检索 示例: SELECT * FROM employees WHERE department_id = 1 AND salary > 50000;
OR 运算符 用于结合两个条件,只要满足其中一个条件的行就会被检索。 示例: SELECT * FROM products WHERE category = 'Electronics' OR price > 1000;
NOT 运算符 用于否定一个条件,检索不满足指定条件的行。 示例: SELECT * FROM students WHERE NOT age < 18;
LIKE 运算符 用于模糊匹配,检索满足指定模式的行。 示例: SELECT * FROM employees WHERE first_name LIKE 'J%';
这些逻辑运算符可以根据需要进行灵活组合,构建复杂的条件过滤条件,以满足各种查询需求。在实际使用中,了解逻辑运算符的功能和用法是进行高效数据检索的关键。
- 使用比较运算符
-
范围条件过滤
运算符 说明 示例 IN 运算符 用于检索属于指定值列表中的行 示例: SELECT * FROM orders WHERE customer_id IN (1, 2, 3);
BETWEEN 运算符 用于检索在指定范围内的行。 示例: SELECT * FROM products WHERE price BETWEEN 50 AND 100;
-
空值检查
-
使用 IS NULL
IS NULL
是一种条件过滤操作符,用于检索列中值为NULL
的行。以下是一些关于IS NULL
的用法示例:描述 示例 基本用法 SELECT * FROM employees WHERE email IS NULL;
与其他条件结合使用:结合其他条件过滤,检索满足额外条件且特定列值为 NULL
的行。SELECT * FROM products WHERE category = 'Electronics' AND manufacturer IS NULL;
使用 NOT 运算符:使用 NOT
运算符检索特定列值不为NULL
的行。SELECT * FROM orders WHERE ship_date IS NOT NULL;
在 UPDATE 语句中使用:在 UPDATE
语句中,将特定列的值设置为NULL
。UPDATE employees SET phone_number = NULL WHERE employee_id = 101;
IS NULL
是处理缺失值或未知值的一种常见方式。在使用时要注意,NULL
不同于空字符串或零,而是表示缺失或未知的值。因此,在查询和更新数据时,适当地使用IS NULL
可以确保正确处理这些情况。 -
使用 IS NOT NULL
IS NOT NULL
是一种条件过滤操作符,用于检索列中值不为NULL
的行。以下是一些关于IS NOT NULL
的用法示例:描述 示例 基本用法:用于检索某列中值不为 NULL
的行。SELECT * FROM employees WHERE email IS NOT NULL;
与其他条件结合使用:结合其他条件过滤,检索满足额外条件且特定列值不为 NULL
的行。SELECT * FROM products WHERE category = 'Electronics' AND manufacturer IS NOT NULL;
在 UPDATE 语句中使用:在 UPDATE
语句中,将特定列的值设置为非NULL
。UPDATE employees SET phone_number = '123-456-7890' WHERE employee_id = 101;
在插入数据时使用:在插入数据时,确保将非 NULL
的值插入相应的列。```INSERT INTO customers (customer_id, customer_name) VALUES (1, ‘ABC Corp’); IS NOT NULL
用于过滤出不包含NULL
值的行,对于确保数据完整性和处理缺失值时很有用。在查询和更新数据时,适当地使用IS NOT NULL
可以确保正确处理这些情况。
-
1.2 AND、OR、NOT
- 多条件组合
-
使用 AND 连接条件
AND
是逻辑运算符之一,用于连接多个条件,要求所有条件同时满足。以下是使用AND
连接条件的示例:描述 示例 基本用法:检索同时满足两个条件的行。 SELECT * FROM products WHERE category = 'Electronics' AND price > 500;
多个条件:结合多个条件,检索满足所有条件的行。 SELECT * FROM employees WHERE department = 'IT' AND salary > 60000 AND experience_years > 5;
与其他条件结合使用:与其他条件组合,形成更复杂的筛选条件。 SELECT * FROM orders WHERE order_date >= '2023-01-01' AND total_amount < 1000 AND customer_id = 101;
UPDATE 语句中使用:在 UPDATE
语句中,使用AND
更新同时满足多个条件的行。UPDATE products SET stock_quantity = 100 WHERE category = 'Clothing' AND price > 50;
INSERT INTO 语句中使用:在插入数据时,使用 AND
以确保插入数据满足多个条件。INSERT INTO customers (customer_id, customer_name, country) VALUES (1, 'ABC Corp', 'USA') WHERE country = 'USA' AND credit_limit > 5000;
通过使用
AND
,可以将多个条件组合起来,以更精细地筛选和检索满足多个条件的数据。这对于构建复杂的查询或更新操作非常有用。 -
使用 OR 连接条件
OR
是逻辑运算符之一,用于连接多个条件,要求至少一个条件满足。以下是使用OR
连接条件的示例:描述 示例 基本用法: 检索满足两个条件之一的行。 SELECT * FROM products WHERE category = 'Electronics' OR price > 500;
多个条件:结合多个条件,检索满足任一条件的行。 SELECT * FROM employees WHERE department = 'IT' OR salary > 60000 OR experience_years > 5;
与其他条件结合使用:与其他条件组合,形成更灵活的筛选条件。 SELECT * FROM orders WHERE order_date >= '2023-01-01' OR total_amount < 1000 OR customer_id = 101;
UPDATE 语句中使用:在 UPDATE
语句中,使用OR
更新满足任一条件的行。UPDATE products SET stock_quantity = 100 WHERE category = 'Clothing' OR price > 50;
INSERT INTO 语句中使用:在插入数据时,使用 OR
以确保插入数据满足至少一个条件。INSERT INTO customers (customer_id, customer_name, country) VALUES (1, 'ABC Corp', 'USA') WHERE country = 'USA' OR credit_limit > 5000;
通过使用
OR
,可以构建更灵活的条件,以检索或更新满足至少一个条件的数据。这对于处理多个可能情况的查询和更新操作非常有用。 -
使用 NOT 反转条件
NOT
是一个逻辑运算符,用于反转条件的真假。以下是使用NOT
反转条件的示例:描述 示例 基本用法:检索不满足条件的行。 SELECT * FROM products WHERE NOT category = 'Electronics';
结合其他条件:与其他条件结合使用,检索不满足多个条件的行。 SELECT * FROM employees WHERE NOT department = 'HR' AND NOT experience_years > 3;
在 UPDATE 语句中使用:在 UPDATE
语句中,使用NOT
更新不满足条件的行。UPDATE products SET stock_quantity = 50 WHERE NOT category = 'Clothing' AND NOT price > 50;
在 INSERT INTO 语句中使用:在插入数据时,使用 NOT
以确保插入数据不满足某些条件。INSERT INTO customers (customer_id, customer_name, country) VALUES (1, 'ABC Corp', 'USA') WHERE NOT country = 'Canada' AND NOT credit_limit > 5000;
通过使用
NOT
,可以反转条件,从而检索或更新不满足条件的数据。这对于需要排除特定情况的查询和更新操作非常有用。
-
1.3 模糊查询
-
使用 LIKE
-
匹配模式
LIKE
是 SQL 中用于匹配模式的关键字,通常与通配符一起使用。以下是使用LIKE
进行模式匹配的一些示例:描述 示例 基本用法:检索以特定字符或字符集开头的行。 SELECT * FROM employees WHERE first_name LIKE 'A%';
通配符 %
:%
通配符表示零个、一个或多个字符。检索以 ‘S’ 开头的任何行。: SELECT * FROM products WHERE product_name LIKE 'S%';
检索以 ‘r’ 结尾的任何行:SELECT * FROM customers WHERE last_name LIKE '%r';
检索包含 ‘a’ 的任何位置的行:SELECT * FROM orders WHERE order_description LIKE '%a%';
通配符 _
:_
通配符表示一个单一的字符。检索第二个字符是 ‘o’,第四个字符是 ‘i’ 的行: SELECT * FROM products WHERE product_name LIKE '_o_i%';
在 UPDATE 语句中使用:在 UPDATE
语句中,使用LIKE
更新符合特定模式的行。UPDATE employees SET title = 'Manager' WHERE title LIKE '%Supervisor%';
在 DELETE 语句中使用:在 DELETE
语句中,使用LIKE
删除符合特定模式的行。DELETE FROM customers WHERE email LIKE '%example.com';
使用
LIKE
可以进行灵活的模式匹配,适用于在查询中查找符合特定模式的数据。 -
% 和 _ 的使用
在 SQL 中,%
和_
是通配符,用于在LIKE
操作符中进行模式匹配。它们分别表示不同的匹配规则:描述 示例 %
(百分号):%
通配符用于表示零个、一个或多个字符。匹配以 ‘A’ 开头的任何字符串: SELECT * FROM employees WHERE first_name LIKE 'A%';
匹配以 ‘S’ 开头的任何字符串:SELECT * FROM products WHERE product_name LIKE 'S%';
匹配包含 ‘a’ 的任何位置的字符串:SELECT * FROM orders WHERE order_description LIKE '%a%';
_
(下划线):_
通配符用于表示单个字符。匹配第二个字符是 ‘o’,第四个字符是 ‘i’ 的字符串: SELECT * FROM products WHERE product_name LIKE '_o_i%';
这些通配符可以结合使用,使模式匹配更加灵活。例如,可以使用
%
来匹配任意数量的字符,而使用_
来匹配特定位置的单个字符。使用这些通配符,可以进行各种模糊查询和数据检索操作。
-
-
使用 wildcard 字符
在 SQL 中,通配符字符是用于进行模糊搜索和匹配的特殊字符。主要的通配符字符是%
和_
,但有时候也提到了[]
和^
。下面是这些通配符的使用:
描述 | 示例 |
---|---|
% (百分号): % 通配符用于匹配零个、一个或多个字符。 | 匹配以 ‘A’ 开头的任何字符串:SELECT * FROM employees WHERE first_name LIKE 'A%'; 匹配以 ‘S’ 开头的任何字符串:SELECT * FROM products WHERE product_name LIKE 'S%'; 匹配包含 ‘a’ 的任何位置的字符串:SELECT * FROM orders WHERE order_description LIKE '%a%'; |
_ (下划线):_ 通配符用于匹配单个字符。 | 匹配第二个字符是 ‘o’,第四个字符是 ‘i’ 的字符串:SELECT * FROM products WHERE product_name LIKE '_o_i%'; |
[] :[] 用于指定字符集,匹配其中的任何一个字符。 | 匹配以 ‘C’ 或 ‘M’ 开头的字符串:SELECT * FROM customers WHERE customer_name LIKE '[CM]%'; |
^ : ^ 用于在字符集中否定匹配,匹配不在指定字符集中的字符。 | 匹配不以 ‘A’ 或 ‘B’ 开头的字符串:SELECT * FROM products WHERE product_name LIKE '[^AB]%'; |
这些通配符可以根据实际需求组合使用,提供更灵活的模糊搜索和匹配功能。
三、总结
过滤数据是 SQL 中的关键操作之一。通过 WHERE 子句,可以使用比较运算符、逻辑运算符、模糊查询等条件进行灵活筛选。AND、OR、NOT 运算符支持多条件组合,而模糊查询的 LIKE 运算符搭配 % 和 _ 通配符提供强大的模式匹配功能。这些技巧帮助精准检索所需数据。
相关文章:
【数据库设计和SQL基础语法】--查询数据--过滤
一、过滤数据 1.1 WHERE子句 基本条件过滤 使用比较运算符 在SQL中,基本条件过滤是通过使用比较运算符来限定检索的数据。以下是一些常用的比较运算符和它们的用法: 运算符说明示例等于 ()用于检索列中与指定值相等的行。示例:SELECT * FROM…...

关于git clone速度极慢的解决方法
!!!!前提条件:得有一个可靠且稳定的梯子,如果没有接下来的就不用看了 前言:我在写这篇文章前,也搜索过很多相关git clone速度很慢的解决方法,但是很多很麻烦,…...

软件设计不是CRUD(8):低耦合模块设计实战——组织机构模块(下)
接上文《软件设计不是CRUD(7):低耦合模块设计实战——组织机构模块(中)》 5、某项目研发团队进行扩展 上文中我们介绍了如何研发一个具有较低耦合强度的组织机构模块(包括模块的SDK和模块的默认本地数据库…...

docker-compose Install gitea
gitea 前言 Gitea 是一个轻量级的 DevOps 平台软件。从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。包括 Git 托管、代码审查、团队协作、软件包注册和 CI/CD。它与 GitHub、Bitbucket 和 GitLab 等比较类似。 Gitea 最初是从 Gogs 分支而来…...

【Pytorch】学习记录分享1——Tensor张量初始化与基本操作
1. 基础资料汇总 资料汇总 pytroch中文版本教程 PyTorch入门教程 B站强推!2023公认最通俗易懂的【PyTorch】教程,200集付费课程(附代码)人工智能_机器 视频 1.PyTorch简介 2.PyTorch环境搭建 basic: python numpy pandas pytroch…...

Python数据科学视频讲解:Python的数据运算符
2.9 Python的数据运算符 视频为《Python数据科学应用从入门到精通》张甜 杨维忠 清华大学出版社一书的随书赠送视频讲解2.9节内容。本书已正式出版上市,当当、京东、淘宝等平台热销中,搜索书名即可。内容涵盖数据科学应用的全流程,包括数据科…...

参数学习——糖果问题(人工智能期末复习)
之前看了好久都不知道这题咋写,后来看了这篇机器智能-高频问题:糖果问题,大概看明白了,其实主要围绕着这两个公式 光看公式也看不懂,还是要结合题目来 己知有草莓味和酸橙味两种类型的糖果,分别放入5种不同…...

【深度学习】注意力机制(六)
本文介绍一些注意力机制的实现,包括MobileVITv1/MobileVITv2/DAT/CrossFormer/MOA。 【深度学习】注意力机制(一) 【深度学习】注意力机制(二) 【深度学习】注意力机制(三) 【深度学习】注意…...

螺旋矩阵算法(leetcode第59题)
题目描述: 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例 1:输入:n 3 输出:[[1,2,3],[8,9,4],[7,6,5]] 示例 2:输入&#…...

SQL Server 服务启动报错:错误1069:由于登录失败而无法启动服务
现象 服务器异常关机以后,SQL Server服务无法启动了。 启动服务时报错: 错误1069:由于登录失败而无法启动服务 解决办法 我的电脑–控制面板–管理工具–服务–右键MSSQLSERVER–属性–登录–登陆身份–选择"本地系统帐户" 设置完成后&am…...

“ABCD“[(int)qrand() % 4]作用
ABCD[(int)qrand() % 4] 作用 具体来说: qrand() 是一个函数,通常在C中用于生成一个随机整数。% 4 会取 qrand() 生成的随机数除以4的余数。因为4只有四个不同的余数(0, 1, 2, 3),所以这实际上会生成一个0到3之间的随…...
Vue2面试题:说一下组件通信有哪些方式?
父传子 1、自定义属性 props:在父组件中,给子组件绑定一个自定义属性,在子组件中,通过props进行接收 2、$parent:直接访问父组件实例的属性和方法 3、$attrs:在父组件中,给子组件绑定一个自定义…...

C# 两个日期比较大小
文章目录 C# 两个日期比较大小直接比较大小工具类DateTime.Compare C# 两个日期比较大小 直接比较大小 string ed "2023-12-13 09:27:59.000";//过去式DateTime nowDateTime DateTime.Now;DateTime expirationDate Convert.ToDateTime(ed);//质保期 长日期DateT…...

路由基本原理
目录 一、路由器概述 二、路由器的工作原理 三、路由表的形成 四、路由配置 1.连接设备 2.进入系统模式 3.进入接口模式 4.配置网络 5.下一跳的设置 6.设置浮动路由 7.设置默认路由 一、路由器概述 路由器(Router)是一种用于连接不同网络或子…...

配置本地端口镜像示例
镜像概念 定义 镜像是指将指定源的报文复制一份到目的端口。指定源被称为镜像源,目的端口被称为观察端口,复制的报文被称为镜像报文。 镜像可以在不影响设备对原始报文正常处理的情况下,将其复制一份,并通过观察端口发送给监控…...

使用FluentAvalonia组件库快速完成Avalonia前端开发
前言 工欲善其事必先利其器,前面我们花了几篇文章介绍了Avalonia框架以及如何在Avalonia框架下面使用PrismAvalonia完成MVV模式的开发。今天我们将介绍一款重磅级的Avalonia前端组件库,里面封装了我们开发中常用的组件,这样就不用我们自己再写组件了。专注业务功能开发,提…...

JAVA实体类集合该如何去重?
JAVA实体类集合该如何去重? 最近在工作中经常遇到需要去重的需求,所以特意系统的来梳理一下 有目录,不迷路 JAVA实体类集合该如何去重?单元素去重方法一:利用Set去重方法二:利用java 8的stream写法…...

修改Element UI可清空Input的样式
如图所示,修改Input右侧的清空按钮位置: <el-input class"create-catalog-ipt"placeholder"请输入相关章节标题"v-model"currentCatalogTitle"clearable /> // SCSS环境 ::v-deep {.create-catalog-ipt {input {he…...

Java常用注解
文章目录 第一章、Java注解与元数据1.1)元数据与注解概念介绍1.2)Java注解的作用和使用1.3)注解的分类 第二章、Mybatis框架常用注解2.1)Mybatis注解概览2.2)常用注解MapperScanMapperSelectInsertUpdateDeleteParam结…...
golang实现同步阻塞、同步非阻塞、异步非阻塞IO模型
一、同步阻塞IO模型TCP和HTTP示例 同步阻塞IO符合我们的直觉认知,应用程序从TCP连接接收数据缓冲区接受数据,如果没有数据就等待——此处就是阻塞,如果有数据需要把数据从内核空间读取到用户空间——此处就是同步。 在Go语言中进行同步阻塞IO编程TCP交互,可以使用标准库中…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...