SQL Server 查询设置 - LIKE/DISTINCT/HAVING/排序

目录

背景

一、LIKE - 模糊查询

1. 通配符 % 

2. 占位符 _

3. 指定集合 []

3.1 表示否定 ^

3.2 表示范围 -

4. 否定 NOT

二、DISTINCT - 去重查询

三、HAVING - 过滤查询

四、小的查询设置

1. ASC|DESC - 排序

2. TOP - 限制

3. 子查询

4. not in - 取补集(LIMIT效果)


背景

本专栏文章以 SAP 实施顾问在实施项目中需要掌握的 sql 语句为偏向进行选题,用例使用的是 SAP B1 的数据库,使用工具为 SQL Server。

本篇为复杂查询中功能强大、使用边界的条件语句 LIKEDISTINCTHAVING,与排序、子查询等查询设置。

不考虑表连接的基础上,在查询信息时,本文涉及到的各逻辑条件排列顺序如下:

--()表示结构可省略,[]表示该位置内容
SELECT (DISTINCT) (TOP 获取前几条) [*/字段名] 
FROM [表名/子查询]
(WHERE [字段名] LIKE [查询模糊条件])
(GROUP BY [分组条件])
(HAVING [过滤条件])
(ORDER BY [排序字段] (ASC|DESC))

一、LIKE - 模糊查询

模糊查询 LIKE 用于字符搜索,通过对所需查找的信息进行条件设定,如某字开头、某字结尾、包含某字、不含某字、第几位是某字等,将所需信息筛出。与之功能对应的还有 REGEXP(正则表达式) ,并且其功能更强大,表达更简略。但是 SQL Server 不支持使用。

其基本语法如下:

SELECT [需要查询的列名]
FROM [表名]
WHERE [条件列] LIKE '[条件内容]'

1. 通配符 % 

使用模糊查询 LIKE 时,对于所需核对的信息进行位置限定,需要根据条件使用 “%”,若需要以某字开头则形式为 'X%' ,某字结尾则为 '%X'

:查找【业务伙伴主数据】表单中含有 “京” 字的公司。

此时需要在条件词左右打上 “%”,对文本所在位置进行限制,即 “京” 字出现在的任何一个位置,都将被查找出来:

SELECT CardCode,CardName
FROM OCRD
WHERE CardName LIKE N'%京%' --查询内容为中文字符时需要增加前缀“N”才能被sql server识别

查询结果为:

2. 占位符 _

如果对于查询信息有严格的位数要求,如需要第几位是某字,即可通过占位符 “_” 占出前面位数,

例1:查找【业务伙伴主数据】表单中业务伙伴编码第二位为 “1” 的公司。

使用占位符占用第一位,意思是无论第一位是什么都无所谓只要有东西就行,第二位是要求 “1”,其后一共几位无所谓了所以用通配符 “%”。

SELECT CardCode,CardName
FROM OCRD
WHERE CardCode LIKE '_1%'

查询结果:

例2:查找【业务伙伴主数据】表单中业务伙伴编码为 6 位的公司。

SELECT CardCode,CardName
FROM OCRD
WHERE CardCode LIKE '______'--一共六条下划线

查询结果(结果行数较多,仅展示部分):

3. 指定集合 []

设定某一位,为在一定范围内任意一个值都可以,则使用 “[]” 框选集合,无论中括号内放多少字符,中括号都只算一位。

例:查找【业务伙伴主数据】表单中业务伙伴编码以 “C” 或 “V” 开头的公司。

SELECT CardCode,CardName
FROM OCRD
WHERE CardCode LIKE '[CV]%'

查询结果(结果行数较多,仅展示部分):

3.1 表示否定 ^

否定符 “^” 仅能在中括号内使用,哪怕只有一位,要使用否定符 “^”,也需要加上 “[]”。

例:查找【业务伙伴主数据】表单中业务伙伴编码不以 “C” 开头的公司。

SELECT CardCode,CardName
FROM OCRD
WHERE CardCode LIKE '[^C]%' --不加[]的话数据库会把^理解为判断字符

查询结果:

3.2 表示范围 -

在 “[]” 内设定内容存在既定顺序时,可以使用 “-”,主要包含:字母按照字母表顺序和数字按照大小顺序。

例:查找【业务伙伴主数据】表单中业务伙伴名称含有数字的公司。

SELECT CardCode,CardName
FROM OCRD
WHERE CardName LIKE '%[0-9]%'

查询结果:

4. 否定 NOT

对于 LIKE 级别的综合否定,均可用 NOT LIKE 来实现。

例:查找【业务伙伴主数据】表单中业务伙伴名称不含有数字的公司。

SELECT CardCode,CardName
FROM OCRD
WHERE CardName NOT LIKE '%[0-9]%'

则会查询出上一节 3.2 案例的查询结果的补集,即返回上一案例以外的内容行。

二、DISTINCT - 去重查询

SELECT 之后增加 DISTINCT,可以对查询数据去重。 

使用场景:比如在查询所有下过采购订单的客户时,可以使用得到去重后的客户名单

SELECT DISTINCT CardCode,CardName
FROM ORDR

三、HAVING - 过滤查询

对分组后的数据过滤,一般会先使用 GROUP BY;倘若没有出现 GROUP BY,则默认 HAVING 把整张表当作一组进行过滤

HAVING 和 WHERE 的区别:

  • WHERE 在分组前过滤,HAVING 在分组后过滤。
  • WHERE 语句里不能包含聚合函数,HAVING 语句可以,并且 HAVING 语句中的子句一般来说不是聚合函数就是分组列。

例:查找平均销售额大于 1000 的客户。

SELECT CardCode,CardName,AVG(DocTotal) AS '平均销售额'
FROM ORDR
GROUP BY CardCode,CardName
HAVING AVG(DocTotal)>1000

查询结果:

四、小的查询设置

1. ASC|DESC - 排序

放在 ORDER BY 后面,起到一个对分组进行升序(ASC)或降序(DESC)续排列的作用。

例:按【销售金额】对平均销售额大于 1000 的客户进行【倒序】排列

SELECT CardCode,CardName,AVG(DocTotal) AS '平均销售额'
FROM ORDR
GROUP BY CardCode,CardName 
HAVING AVG(DocTotal)>1000
ORDER BY AVG(DocTotal) DESC

查询结果:

2. TOP - 限制

放在 SELECT 之后,按照 TOP + [数量] 的格式,实现对前 [数量] 行信息的效果。

例:查询【销售金额】对平均销售额前十的客户名单

SELECT TOP 10 CardCode,CardName FROM ORDR
GROUP BY CardCode,CardName
ORDER BY AVG(DocTotal) DESC

查询结果:

3. 子查询

在 WHERE 后,除了可以接某张已经存在的具体表,还可以接一个【子查询】,即由一个新的查询构建的新表,将其嵌套进原有的查询命令时,形成一个【子查询】。

注意:子查询返回的值能且仅能为一个

例:查找销售额最高的客户在【业务伙伴主数据】中登记的业务伙伴代码、业务伙伴名称、业务伙伴类型、组代码、电话 1、联系人信息。

SELECT CardCode,CardName,CardType,GroupCode,Phone1,CntctPrsn
FROM OCRD
WHERE CardCode = (
SELECT TOP 1 CardCode FROM ORDR
GROUP BY CardCode
ORDER BY SUM(DocTotal) DESC
)

 查询结果

4. not in - 取补集(LIMIT效果)

在 MySQL 中,可以利用 LIMIT 对查询的信息条目进行限制,如查前 x 条数据、跳过前 y 条数据查找后面的 z 条数据。但是 SQL Server 中不支持 LIMIT,可以使用 TOP 联合 not 和 子查询完成以上功能的实现。

例:跳过销售金额平均值前十的客户,返回第 11-15 名的客户名单

SELECT TOP 5 CardCode,CardName FROM OPOR
WHERE CardCode NOT IN(
SELECT TOP 10 CardCode FROM ORDR
GROUP BY CardCode
ORDER BY AVG(DocTotal) DESC
)

查询结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/60870.shtml

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

相关文章

Android OpenGL ES详解——立方体贴图

目录 一、概念 二、如何使用 1、创建立方体贴图 2、生成纹理 3、设置纹理环绕和过滤方式 4、激活和绑定立方体贴图 三、应用举例——天空盒 1、概念 2、加载天空盒 3、显示天空盒 4、优化 四、应用举例——环境映射:反射 五、应用举例——环境映射:折射 六、应用…

pipx安装提示找不到包

执行&#xff1a; pipx install --include-deps --force "ansible6.*"WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNone)) after connection broken by NewConnectionError(<pip._vendor.urllib3.connection.HTTPSConnection …

VMware 17虚拟Ubuntu 22.04设置共享目录

VMware 17虚拟Ubuntu 22.04设置共享目录 共享文件夹挂载命令&#xff01;&#xff01;&#xff01;<font colorred>配置启动自动挂载Chapter1 VMware 17虚拟Ubuntu 22.04设置共享目录一、卸载老版本二、安装open-vm-tools<font colorred>三、配置启动自动挂载四、添…

Python用CEEMDAN-LSTM-VMD金融股价数据预测及SVR、AR、HAR对比可视化

全文链接&#xff1a;https://tecdat.cn/?p38224 分析师&#xff1a;Duqiao Han 股票市场是一个复杂的非线性系统&#xff0c;股价受到许多经济和社会因素的影响。因此&#xff0c;传统的线性或近线性预测模型很难有效、准确地预测股票指数的价格趋势。众所周知&#xff0c;深…

ubuntu20.04默认的python3.8升级到python3.10

Python 3.8 于 2019 年 10 月发布&#xff0c;距今已有五年时间。2024 年 10 月是 Python 3.8 版本发布的最后一个月&#xff0c;从 2024 年 10 月开始&#xff0c;如果存在安全错误&#xff0c;Python 开发团队将不会修复该错误。有必要把python3.8升级python3.10。 新加apt源…

数据结构 ——— 层序遍历链式二叉树

目录 链式二叉树示意图​编辑 何为层序遍历 手搓一个链式二叉树 实现层序遍历链式二叉树 链式二叉树示意图 何为层序遍历 和前中后序遍历不同&#xff0c;前中后序遍历链式二叉树需要利用递归才能遍历 而层序遍历是非递归的形式&#xff0c;如上图&#xff1a;层序遍历的…

DevOps工程技术价值流:加速业务价值流的落地实践与深度赋能

DevOps的兴起&#xff0c;得益于敏捷软件开发的普及与IT基础设施代码化管理的革新。敏捷宣言虽已解决了研发流程中的诸多挑战&#xff0c;但代码开发仅是漫长价值链的一环&#xff0c;开发前后的诸多问题仍亟待解决。与此同时&#xff0c;虚拟化和云计算技术的飞跃&#xff0c;…

python json详解

json 是 Python 中用于处理 JSON 数据的标准库。JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人类阅读和编写&#xff0c;同时也易于机器解析和生成。Python 的 json 模块提供了将 Python 对象与 JSON 数据相互转换的功…

WPS宏编辑器开发,单元格内容变更自动触发事件

WPS中Excel的“触发器” 写在前面宏的开发1、切换宏编辑器开发环境2、小练习&#xff1a;自定义函数3、完成功能需求&#xff1a;单元格内容变更自动触发事件 总结 写在前面 我先生用EXCEL做了一张学生存款表。设计得很简单&#xff0c;A学生已存款X元&#xff0c;A学生再次存…

新版Apache Tomcat ⽬目录文件讲解(笔记)

简介&#xff1a;Tomcat⽬目录⽂文件讲解 bin &#xff08;关注&#xff09; 启动和关闭tomcat脚本 startup.sh/startup.bat (Linux平台或Mac上的启动脚本/Windows平台上的启动脚本) shutdown.sh/shutdown.bat (Linux平台或Mac上的关闭脚本/Windows平台上的关闭脚本) conf&am…

Go 语言已立足主流,编程语言排行榜24 年 11 月

Go语言概述 Go语言&#xff0c;简称Golang&#xff0c;是由Google的Robert Griesemer、Rob Pike和Ken Thompson在2007年设计&#xff0c;并于2009年11月正式宣布推出的静态类型、编译型开源编程语言。Go语言以其提高编程效率、软件构建速度和运行时性能的设计目标&#xff0c;…

Kettle配置数据源错误“Driver class ‘org.gjt.mm.mysql.Driver‘ could not be found”解决记录

问题描述 错误提示&#xff1a;“Driver class ‘org.gjt.mm.mysql.Driver’ could not be found, make sure the ‘MySQL’ driver (jar file) is installed.” 原因分析&#xff1a; 根据错误提示是缺少了相关的数据源连接jar包。 解决方案&#xff1a; 安装对应的Mysql…

PCA 原理推导

针对高维数据的降维问题&#xff0c;PCA 的基本思路如下&#xff1a;首先将需要降维的数据的各个变量标准化&#xff08;规范化&#xff09;为均值为 0&#xff0c;方差为 1 的数据集&#xff0c;然后对标准化后的数据进行正交变换&#xff0c;将原来的数据转换为若干个线性无关…

河道无人机雷达测流监测系统由哪几部分组成?

在现代水利管理中&#xff0c;河道无人机雷达监测系统正逐渐成为一种重要的工具&#xff0c;为河道的安全和管理提供了强大的技术支持。那么&#xff0c;这个先进的监测系统究竟由哪几部分组成呢&#xff1f; 河道无人机雷达监测系统工作原理 雷达传感器通过发射电磁波或激光束…

DDRPHY数字IC后端设计实现系列专题之数字后端floorplanpowerplan设计

3.2.3 特殊单元的布局 布图阶段除了布置 I/O 单元和宏单元&#xff0c;在 28nm 制程工艺时&#xff0c;还需要处理两种特 殊的物理单元&#xff0c;Endcap 和 Tapcell。 DDRPHY数字IC后端设计实现系列专题之后端设计导入&#xff0c;IO Ring设计 &#xff08;1&#xff09;拐…

实现金蝶云与MySQL的无缝数据集成

金蝶云与MySQL的费用申请单数据集成案例 金蝶云星空数据集成到MySQL的技术案例分享 在企业信息化系统中&#xff0c;数据的高效流转和准确对接是业务顺利运行的关键。本文将聚焦于一个具体的系统对接集成案例&#xff1a;如何通过轻易云数据集成平台&#xff0c;将金蝶云星空中…

Flink Source 详解

Flink Source 详解 原文 flip-27 FLIP-27 介绍了新版本Source 接口定义及架构 相比于SourceFunction&#xff0c;新版本的Source更具灵活性&#xff0c;原因是将“splits数据获取”与真“正数据获取”逻辑进行了分离 重要部件 Source 作为工厂类&#xff0c;会创建以下两…

Android Settings 单元测试 | 如何运行单元测试?

背景 在Android Settings 单元测试 | Telephony Network 模块 APN 案例中粗略介绍了单元测试逻辑内容&#xff0c;但是在独立APK里面如何将单元测试跑起来还是有疑问&#xff0c;因为APP不能直接install&#xff0c;无法借助Android Studio直接Run&#xff0c;在安装的一步会报…

【Qt聊天室】客户端实现总结

目录 1. 项目概述 2. 功能实现 2.1 主窗口设计 2.2 功能性窗口 2.3 主界面功能实现 2.4 聊天界面功能实现 2.5 个人信息功能开发 2.6 用户信息界面设置功能 2.7 单聊与群聊 2.8 登录窗口 2.9 消息功能 3. 核心设计逻辑 3.1 核心类 3.2 前后端交互与DataCenter 4…

java瑞吉外卖

环境搭建 一、数据库环境搭建 1.新建数据库reggie&#xff0c;这里字符集一般用utf8mb4&#xff0c;排序规则一般用utf8mb4_general_ci或utf8mb4_unicode_ci 2.然后导入表结构 二、创建springboot工程 然后检查maven仓库设置&#xff0c;jdk 这是我的pom.xml文件 <?xml …