【SQL】掌握SQL查询技巧:数据筛选与限制
目录
- 1. DISTINCT:避免重复记录
- 1.1 示意图
- 1.2 使用场景
- 2. LIMIT:控制查询结果的数量
- 2.1 示意图
- 2.2 使用场景
- 3. OFFSET:跳过前几行
- 3.1 示意图
- 3.2 使用场景
- 4. WHERE子句:精细控制数据过滤
- 4.1 示意图
- 4.2 运算符详细说明
- 4.3 基本条件示例
- 4.4 复杂条件示例
- 5. HAVING子句:对分组结果进行过滤
- 5.1 示意图
- 5.2 基本语法
- 5.3 各部分解释
- 6. 数据筛选示意图
- 总结
在现代数据驱动的世界中,数据分析和管理已成为企业成功的重要组成部分。SQL(结构化查询语言)作为最常用的数据库查询语言之一,帮助用户从庞大的数据集中提取出有价值的信息。本文将详细介绍SQL中的数据筛选与限制工具,包括 DISTINCT、LIMIT、OFFSET、WHERE 子句以及 HAVING 子句,并结合丰富的示例和注释,帮助读者更深入地理解这些工具的使用。
1. DISTINCT:避免重复记录
当我们需要从数据库中获取唯一的值时,DISTINCT关键字是非常有效的工具。它能确保返回结果中没有重复项,从而节省存储和提高查询效率。
-
功能:
DISTINCT关键字用于返回唯一的值,避免重复的数据。它通常与SELECT语句一起使用。 -
描述: 在查询中使用
DISTINCT可以有效减少结果集的冗余信息,尤其在处理包含重复数据的列时,这个工具显得尤为重要。
示例:
SELECT DISTINCT department_id FROM employees;
该查询将返回员工表中不同的部门ID。
1.1 示意图
注释: 使用 DISTINCT 时,需要注意它会影响查询的效率,因为数据库需要执行额外的计算来去除重复值。
示例:查询所有不同的部门ID
SELECT DISTINCT department_id
FROM employees;
在这个示例中,我们从 employees 表中提取所有独特的 department_id。如果某个部门有多个员工,这个查询只会返回该部门ID一次。
1.2 使用场景
- 数据清理:在分析数据时,使用
DISTINCT可以帮助识别和消除重复值。 - 数据汇总:当需要创建报表或进行进一步分析时,确保数据的唯一性至关重要。
2. LIMIT:控制查询结果的数量
当处理大数据集时,直接查询所有数据往往不切实际。LIMIT 关键字可帮助我们指定返回结果的数量,从而优化查询性能。
-
功能:
LIMIT子句用于限制查询结果返回的行数,通常用于分页显示或只获取部分数据。 -
描述: 在处理大量数据时,使用
LIMIT可以控制结果集的大小,以提高查询性能和用户体验。
示例:
SELECT * FROM employees ORDER BY salary DESC LIMIT 10;
此查询将返回薪资最高的前10名员工。
2.1 示意图
注释: LIMIT 的使用尤其适合于需要展示部分数据的应用场景,如网站的员工列表、产品展示等。
查询前10名工资最高的员工
SELECT *
FROM employees
ORDER BY salary DESC
LIMIT 10;
该查询将按工资降序排列,并仅返回工资最高的前10名员工的信息。这在生成报告或查看特定数据时非常有用。
2.2 使用场景
- 分页显示:在网页应用中,通常需要将查询结果分为多页展示,
LIMIT可以帮助实现这一功能。 - 性能优化:对于大型数据集,通过限制返回行数,减轻了数据库负担,提高响应速度。
3. OFFSET:跳过前几行
在处理分页查询时,OFFSET 关键字可以与 LIMIT 配合使用,以跳过指定数量的行。这样可以方便地获取特定页的数据。
-
功能:
OFFSET子句用于跳过指定数量的行,通常与LIMIT一起使用,以实现分页效果。 -
描述: 当需要从特定位置开始获取数据时,
OFFSET是一个非常有用的工具。例如,在一个包含多页数据的用户界面中,可以利用OFFSET来控制当前显示的页码。
示例:
SELECT * FROM employees ORDER BY salary DESC LIMIT 10 OFFSET 10;
该查询将跳过前10名薪资最高的员工,返回第11到20名的员工。
3.1 示意图
注释: OFFSET 的使用可以结合用户输入的页码,动态地加载数据,提高用户体验。
示例:查询第11到第20名工资最高的员工:
SELECT *
FROM employees
ORDER BY salary DESC
LIMIT 10 OFFSET 10;
这个查询将返回工资排名第11到第20的员工信息。
3.2 使用场景
- 分页查询:在网页应用中,结合
LIMIT和OFFSET可以实现用户友好的分页显示。 - 数据分析:对大数据集进行分段处理时,
OFFSET可以帮助逐步检索数据。
4. WHERE子句:精细控制数据过滤
WHERE 子句是SQL中非常重要的部分,它允许用户对查询结果进行条件过滤,以确保只获取符合特定标准的数据。WHERE 支持多种运算符,可以构建复杂的查询条件。
-
功能:
WHERE子句用于对查询结果进行条件过滤,确保返回符合特定条件的记录。 -
描述: 通过
WHERE子句,用户可以精确地控制查询,允许在数据中进行复杂的条件判断。
示例:
SELECT * FROM employees WHERE salary > 50000;
该查询将返回薪资高于50,000的所有员工记录。
4.1 示意图
注释: WHERE 子句可以与多种条件(如逻辑运算符 AND、OR 等)结合使用,实现复合条件查询。
4.2 运算符详细说明
| 运算符 | 描述 |
|---|---|
= | 等于 |
!= 或 <> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
LIKE | 模糊匹配 |
IN | 指定多个可能的值 |
BETWEEN | 范围 |
AND | 组合多个条件 |
OR | 满足任一条件 |
4.3 基本条件示例
示例:查询工资高于70000的员工
SELECT *
FROM employees
WHERE salary > 70000;
这个简单的条件可以快速筛选出高薪员工,为管理层做决策提供数据支持。
示例:查询姓氏以"Li"开头的员工
SELECT *
FROM employees
WHERE name LIKE 'Li%';
这个查询会找出所有姓名以“Li”开头的员工。
4.4 复杂条件示例
结合多个条件可以更精细地控制查询结果。例如:
示例:查询在“Sales”部门且工资高于50000的员工
SELECT *
FROM employees
WHERE department = 'Sales' AND salary > 50000;
此查询将返回所有“Sales”部门且工资高于50000的员工信息。
示例:查询工资在50000到100000之间的员工
SELECT *
FROM employees
WHERE salary BETWEEN 50000 AND 100000;
此查询将返回所有工资在50000到100000之间的员工信息。
这种方式能够帮助我们获得特定条件下的数据,便于更深入的分析。
5. HAVING子句:对分组结果进行过滤
HAVING 子句通常与 GROUP BY 一起使用,用于对聚合后的结果集进行过滤。这使得我们可以在数据分组后仍然应用条件筛选。
-
功能:
HAVING子句用于对分组结果进行过滤,通常与GROUP BY子句一起使用。 -
描述: 与
WHERE不同,HAVING处理的是聚合后的数据,因此它在分组查询中是不可或缺的部分。
示例:
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 60000;
此查询将返回平均薪资高于60,000的部门及其平均薪资。
5.1 示意图
注释: HAVING 子句的使用通常出现在分析性报告中,能够帮助决策者快速识别出表现优秀的部门或其他分组数据。
5.2 基本语法
SELECT column1, AGGREGATE_FUNCTION(column2)
FROM table_name
WHERE condition
GROUP BY column1
HAVING aggregate_condition;
5.3 各部分解释
- SELECT column1, AGGREGATE_FUNCTION(column2): 查询指定列并计算聚合值。
- FROM table_name: 指定查询的数据表。
- WHERE condition: 在数据分组之前筛选行,不允许使用聚合函数。
- GROUP BY column1: 按
column1分组,每个组生成一行输出。 - HAVING aggregate_condition: 对已分组数据进行过滤,支持聚合条件。
示例:查询每个部门的平均工资,并仅返回平均工资超过60000的部门
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 60000;
在这个示例中,我们首先按部门分组,然后计算每个部门的平均工资,最后只返回平均工资超过60000的部门。这种方法在分析各部门的财务健康状况时非常有用。
6. 数据筛选示意图
总结
通过上述内容,我们可以看到SQL在数据提取中的强大功能。掌握这些工具不仅能提高数据查询的效率,还能增强数据分析的深度和广度。希望这篇文章能帮助您更好地理解SQL的数据筛选与限制工具,从而在实际工作中有效利用它们。请继续关注我们的博客,获取更多实用的SQL技巧与最佳实践!
相关文章:
【SQL】掌握SQL查询技巧:数据筛选与限制
目录 1. DISTINCT:避免重复记录1.1 示意图1.2 使用场景 2. LIMIT:控制查询结果的数量2.1 示意图2.2 使用场景 3. OFFSET:跳过前几行3.1 示意图3.2 使用场景 4. WHERE子句:精细控制数据过滤4.1 示意图4.2 运算符详细说明4.3 基本条…...
大学生社团活动系统小程序的设计
管理员账户功能包括:系统首页,个人中心,学生管理,社长管理,社团分类管理,社团信息管理,社团加入管理,社团活动管理,轮播图信息 微信端账号功能包括:系统首页…...
codetop标签双指针题目大全解析(三),双指针刷穿地心!!!!!
复习比学习更重要,更需要投入时间,更需要花费精力 1.字符串的排列2.找出字符串中第一个匹配的下标3.最大连续1的个数II4.数组中的山脉5.移除元素6.两个数组的交集II7.有序数组的平方8.删除有序数组中的重复项II9.寻找重复数10.水果成篮 1.字符串的排列 …...
HarmonyOS应用六之应用程序进阶一
目录: 1、UIAbility的冷启动和UIAbility热启动2、静态资源和动态资源的访问3、页面跳转3.1、页面返回跳转 4、HAR的ArkUI组件、接口、资源,供其他应用或当前应用的其他模块引用4.1、导出HAR的ArkUI组件4.2、引用HAR的ArkUI组件 5、循环渲染6、状态管理最…...
vue开发中变量第一次双向绑定无效,界面并没有变化,第二次则又好了。
这个问题出现的太频繁了,基本大部分用户都遇到这个情况。大部分是弹框的情况。代码如下: <el-dialog:visible.sync="isShowCode" @close="closeCode()"><div class="u4259f"><edite-edite-code isNoShowClose="true"…...
C++基础(8)——string的相关面试题
目录 1.字符串转成整数 2.字符串相加 3.高精度加法模板(acwing) 4.验证回文串 1.字符串转成整数 题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0。输入的…...
【Docker】06-DockerCompose
1. Docker compose 2. Docker Compose部署项目 docker-compose.yml version: "3.8"services:mysql:image: mysqlcontainer_name: mysqlports:- "3307:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes:- "/root/docker/mysql/…...
代码随想录训练营Day27 | 77. 组合 | 216.组合总和III | 17.电话号码的字母组合
学习文档:代码随想录 (programmercarl.com) 视频链接:代码随想录算法公开课 | 最强算法公开课 | 代码随想录 (programmercarl.com) Leetcode 77. 组合 题目描述 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以…...
Linux文件重定向文件缓冲区
目录 一、C文件接口 二、系统文件I/O 2.1认识系统文件I/O 2.2系统文件I/O 2.3系统调用和库函数 2.4open( )的返回值--文件描述符 2.5访问文件的本质 三、文件重定向 3.1认识文件重定向 3.2文件重定向的本质 3.3在shell中添加重定向功能 3.4stdout和stderr 3.5如何理…...
训练贪吃蛇ai的后续记录
发现可以结合遗传算法的思路,产生更好的效果。 即每训练一段时间,就停下来测试一下新模型的效果。如果效果优于记录中最好的,则继续导入该模型并训练。重复几次,效果可能更好。 例如,昨晚我便通过唯一一个在十次测试中…...
WPF 手撸插件 八 操作数据库一
1、本文将使用SqlSugar创建Sqlite数据库,进行入门的增删改查等操作。擦,咋写着写着凌乱起来了。 SqlSugar官方文档:简单示例,1分钟入门 - SqlSugar 5x - .NET果糖网 2、环境SqlSugar V5.0版本需要.Net Framework 4.6 ࿰…...
代数结构基础 - 离散数学系列(八)
目录 1. 群(Group) 群的定义 群的示例 2. 环(Ring) 环的定义 环的示例 3. 域(Field) 域的定义 域的示例 域在密码学中的应用 4. 实际应用场景 1. 对称性与加密 2. 误差检测与纠正 3. 数据编码…...
函数的arguments为什么不是数组?如何转化为数组?
因为arguments本身并不能调用数组方法,它是一个另外一种对象类型,只不过属性从0开始排,依次为0 1 2…最后还有callee和length属性,我们也把这样的对象成为类数组。 常见的类数组还有: 1.用getElementsByTagName/Class…...
Java之反射
目录 反射 定义 主要用途 反射相关的类 Class类中【获得类相关方法】 Class类中【获得类中属性相关的方法】 Class类中【获得类中注解相关的方法】 Class类中【获得类中构造器相关的方法】 Class类中【获得类中方法相关的方法】 获得Class对象 代码示例1 代码示例…...
3dsMax添加天空盒
点击渲染,环境 , 点击位图 找到要设置的天空HDR,可以使用HDR(EXR)贴图 一个可以下载HDR贴图的网站 https://polyhaven.com/hdris在渲染的时候不要使用使用微软输入法,3dsmax会卡死, 在渲染的时候不要使用使用微软…...
C语言的类型提升机制
概念 在C语言中,整数类型按照其大小可以分为以下几类(从小到大): charshortintlonglong long 当在表达式中涉及这些类型的混合运算时,较小的类型会被提升为较大的类型。具体规则如下: ①char 和 short …...
Pandas和Seaborn数据可视化
Pandas数据可视化 学习目标 本章内容不需要理解和记忆,重在【查表】! 知道数据可视化的重要性和必要性知道如何使用Matplotlib的常用图表API能够找到Seaborn的绘图API 1 Pandas数据可视化 一图胜千言,人是一个视觉敏感的动物,大…...
爬虫(Python版本)
1.爬虫的法律问题 爬虫技术(Web Scraping)指通过程序自动访问网页并提取其中的数据。在使用爬虫的过程中,涉及到一些法律法规和合规性问题。 常见法律风险 ①未经授权的访问:很多网站对爬虫行为设置了限制。如果未获得授权就进行…...
【分布式训练 debug】VS Code Debug 技巧:launch.json实用参数
VS Code Debug技巧:launch.json实用参数 在使用Visual Studio Code (VS Code)进行调试时,launch.json文件是一个强大的工具,它允许你自定义调试会话。以下是一些实用的参数,可以帮助你更有效地调试Python代码。 1. 调试第三方库…...
pycharm连接linux服务器需要提前安装ssh服务
在 Debian 或 Ubuntu 系统上,使用 APT: bash复制代码 sudo apt-get install openssh-server 在基于 RPM 的系统如 CentOS 或 RHEL 上,使用 YUM 或 DNF: bash复制代码 sudo yum install openssh-server 或对于较新的 RHEL/Cent…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...
图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...
