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、优化 四、应用举例——环境映射:反射 五、应用举例——环境映射:折射 六、应用…

C# 中Math.Round 和 SQL Server中decimal(18,2) 不想等的问题

首先了解Math.Round方法的默认舍入规则 在C#中,Math.Round方法使用的是“银行家舍入法”(也叫四舍六入五成双)。这种舍入规则是:当要舍弃的数字小于5时直接舍去;当要舍弃的数字大于5时进位;当要舍弃的数字正…

如何用分布式数据库解决慢查询问题

当使用MySQL时,我们不可避免地会遇到许多与慢查询相关的问题。 为了解决这些慢SQL的问题,我们通常需要投入大量的精力去研究执行计划、考虑合适的索引策略、精心改写SQL语句,甚至可能需要调整程序逻辑。然而,针对特定SQL的优化往…

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>三、配置启动自动挂载四、添…

uniapp ios app以framwork形式接入sentry

一、下载Sentry mac终端输入&#xff1a;vim Podfile修改Podfile: platform :ios, 11.0 target YourApp douse_frameworks! # This is importantpod Sentry, :git > https://github.com/getsentry/sentry-cocoa.git, :tag > 8.40.1 end执行&#xff1a;pod install下载…

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

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

Linux kvm环境搭建

1.1 安装KVM虚拟机 #系统是否支持KVM虚拟化 [rootjztserver01 ~]# cat /proc/cpuinfo | egrep vmx|svm [rootjztserver01 ~]# egrep (vmx|svm) /proc/cpuinfo |wc -l #关闭selinux&#xff1b;设置selinux立即生效 [rootjztserver01 ~]# vi /etc/sysconfig/selinux [rootjztse…

2020年计挑赛往届真题(C++)

因为17号要开赛了&#xff0c;甚至是用云端编辑器&#xff0c;debuff拉满&#xff0c;只能临时抱佛脚了 各个选择题的选择项我就不标出来了&#xff0c;默认ABCD排&#xff0c;手打太麻烦了 目录 单选题&#xff1a; 1.阅读以下语句:double m0;for(int i3;i>0;i--)m1/i;…

2 的幂算法

给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2x &#xff0c;则认为 n 是 2 的幂次方。 示例 1&#xff1a; 输入&#xff1a;n 1 输出&#xff1a;tr…

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源…

CTF-RE 从0到N: windows反调试-获取Process Environment Block(PEB)信息来检测调试

在Windows操作系统中&#xff0c;Process Environment Block (PEB&#xff0c;进程环境块) 是一个包含特定进程信息的数据结构。它可以被用于反调试中 如何获取PEB指针&#xff1f; 在Windows操作系统中&#xff0c;获取PEB指针的常见方法主要有以下几种。&#xff1a; 1. 使…

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

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

RHEL/CENTOS 7 ORACLE 19C-RAC安装(纯命令版)

一 首先需要安装两个CENTOS 7虚拟机(此处省略)。 由于我们是要安装ORCLE-RAC双节点集群所以至少每个CENTOS虚拟机上需要两块网卡&#xff0c;并且两块网卡都是HOST-ONLY具体步骤请看视频一《为虚拟机添加网卡》 这里大家需要注意的是&#xff0c;我们需要绑定两台机器的IP一共…

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

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

ubuntu24.04设置开机自启动Eureka

ubuntu24.04设置开机自启动Eureka 之前我们是在/root/.bashrc的文件中增加了一条命令 nohup java -jar /usr/software/eurekaServer-auth-prd-03.jar > /usr/software/log.log 2>&1 &但上面这条命令只有在登录root的用户时&#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…

java Arrays 详解

Java Arrays 类详解 Arrays 是 Java 中一个专门用于操作数组的工具类&#xff0c;位于 java.util 包中。它提供了多种用于数组操作的方法&#xff0c;例如排序、搜索、填充、比较、转换等。 1. 常用方法分类 1.1 排序 方法描述Arrays.sort(array)对数组进行升序排序&#xf…