【数据库设计和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交互,可以使用标准库中…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
