开发必看!三分钟读懂Salesforce SOQL查询和限制

news/2024/4/28 13:30:30/文章来源:https://blog.csdn.net/ziyouxia666/article/details/128953680

SOQL是支持我们与Salesforce数据库交互的查询语言。开发人员在编写Apex时通常会使用到SOQL,此外,它还允许管理员和开发人员从组织内部检索数据并在导出结果时生成强大的数据报告。

SOQL 查询对于编写代码的开发人员,以及通过使用子句扩展查询功能的管理员来说都是一个强大的工具,可以将一些复杂的数据操作转变为一项简单的任务。

虽然大多数开发人员对如何执行查询有基本的了解,但SOQL可以做的不仅仅是从数据库中检索记录。本篇文章将探讨SOQL查询的构成,以及如何将查询提升到一个新水平。

什么是查询(Query)?

查询的基本语法看起来相对简单,SELECT语句中有几个字段,就有了一个基本查询。我们可以将查询分解为不同的块(通常称为子句),这些块定义应该检索哪些数据,以及应该如何格式化数据。

所有查询都包含一个SELECT子句,这是查询的一部分,用于确定要返回的字段,后面跟着FROM关键字,说明被查询的对象。

WHERE子句

通过提供可以使用AND或OR运算符组合的逻辑运算符,用于筛选出要返回的记录。

TYPEOF子句

用于在引用多态查找时提供要选择的字段,例如查询与特定对象相关的任务。

WITH子句

用于指定附加查询行为;这可能是通过WITH SECURITY_ENFORCED强制执行字段级权限,或者在查询问题时指定数据类别。

ORDER BY 子句

以特定的方式对查询结果进行排序。

GROUP BY 子句

这个子句彻底改变了查询的行为。GROUP BY查询不是返回单个记录作为结果,而是将查询更改为聚合查询,返回基于集合数据集而不是单个行的数据。

关系查询(Relational Queries)

SOQL的另一个强大功能是能够跨越查询中的关系。例如,检索父帐户的名称,检索与某个帐户相关的联系人。

关系查询主要有以下两种类型:

子对父(Child to Parent)

当我们查询子对象时,它们沿着关系树上升,引用父对象的字段。

这些可以上升5个级别,引用祖父、曾祖父等的字段。

这些类型的关系是通过点符号来访问的,关键是要记住它使用的是关系名,对于自定义的关系,关系名称是以__r 结尾

父对子(Parent to Child)

它们沿着关系树向下,引用作为查询记录子对象的记录和字段。

这些查询只能向下一级。也就是说,可以查询一个帐户的联系人,但不能查询与这些联系人相关的记录。

这些是通过SELECT子句中的子查询编写的,FROM是关系名称(例如Contacts或 My_Custom_Objects__r)。

聚合查询(Aggregate Queries)

聚合查询可以把大量复杂的数据集压缩成几行,为你提供所需的准确数据。

根据具体用例,可以使用以下聚合函数:

COUNT() / COUNT(fieldName):计算查询返回的行数。通常与Id字段或其他查找一起使用。

COUNT_DISTINCT(fieldName) :计算查询的唯一非空值的数量。

AVG(fieldName) :根据查询返回的行返回字段的平均值。

MIN(fieldName) :根据查询返回字段的最小值。可以在选项列表中使用,根据选项列表排序顺序返回。

MAX(fieldName) :根据查询返回字段的最大值。可以在选项列表中使用,根据选项列表排序顺序返回。

SUM(fieldName) :根据查询结果返回字段的数字总和。

GROUP BY子句还有两个兄弟子句,可以进一步增强查询能力,同时通过返回各种小计,提供与标准GROUP BY子句相同的数据。

GROUP BY ROLLUP

与多个字段聚合一起使用(例如,计算各阶段的业务机会数量并合计其总额)。

采用聚合查询,并返回每个类别的小计。

包括每个字段组合的分类汇总行。

有最终总计行。

上面的查询将返回以下内容:

GROUP BY CUBE

与多个字段聚合一起使用(例如,计算各阶段的业务机会数量并合计其总额)。

为我们提供分组字段的所有组合的聚合。

包含比GROUP BY ROLLUP更多的信息。

字段排序无关紧要。

用于生成交叉表格报告。

上面的查询将返回以下内容:

通过使用HAVING子句可以进一步筛选这些查询。例如,假设有一个用特定关键字标记联系人的对象,我们希望找到标签为“United Kingdom”、“Salesforce Developer”和“Available”的所有联系人,可以使用以下查询来准确地找到这些联系人。

HAVING子句也可以附加到GROUP BY ROLLUP和GROUP BY CUBE查询中,以进一步自定义返回的确切结果。

Limits和Limitations

SOQL也有自己的限制。对于SOQL查询,这些限制可以根据运行查询的上下文而改变,以下是它的通用限制:

100k字符限制:整个查询(包括所有子句)的长度必须少于100k个字符。

WHERE子句中的字符串限制为4000个字符。这是针对单个字符串,而不是整个WHERE子句。

不超过55个子对父关系。

不超过20个父对子关系。

父对子关系只能在FROM子句中的对象上执行。

可能会在Apex中使用SOQL,Apex对如何使用SOQL有更多限制:

同步进程中最多100个查询

异步进程中最多200个查询

每个进程最多返回50000行

注意:聚合查询也计入此限制,但它们的使用量计算方式不同。查询返回的每1行都计为1行,不管数据是否是从几个记录中聚合的。例如,如果以下查询返回7行“ SELECT COUNT(Id), AccountId FROM Contact GROUP BY AccountId ”,不管统计的联系人数量如何,它只会消耗此限制中的7行。

作者:自由侠部落

文章地址:开发必看!一文读懂Salesforce SOQL查询和限制

本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接

如果文章的内容对你有帮助,欢迎点赞~

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

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

相关文章

STM32 复用JLink下载线输出调试信息

编写STM32程序时,要输出调试信息的话,一般是通过一个串口输出,电脑端使用串口调试助手显示调试信息。这样的话,就需要占用一个串口资源。还有一种SEGGER的RTT方式,直接使用JLink下载线输出调试信息,这样可以…

在线支付系列【21】微信支付服务商接入前准备

有道无术,术尚可求,有术无道,止于术。 文章目录项目概述接入准备1. 注册服务商号(获取服务商mchid)2. 注册公众号(获取服务商APPID)3. 绑定应用ID和服务商ID4. 入驻子商户(特约商户进…

使用Jmeter抓取手机APP报文并进行APP接口测试

Jmeter是一个比较常用的接口测试工具,尤其是接口性能测试。当然它也可以用来测试手机APP的HTTP接口,我在Fiddler抓取手机APP报文 和 接口测试代理工具charles mock测试 分别介绍了Fiddler和charles 如何抓取APP报文,本文介绍使用Jmeter来抓取…

内网渗透(十三)之内网信息收集-收集域环境中的基本信息

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

Jmeter之实现参数化的不同方式详解

参数化简介 定义:动态的获取、设置或生成数据,是一种由程序驱动代替人工驱动的数据设计方案,提高脚本的编写效率以及编写质量 适用场景:当提交的数据量较大时,每次修改太麻烦,可以使用参数化 本文介绍实现…

linux yum安装卸载jdk8

1>安装1 yum -y list java* 列出jdk列表2 yum install -y java-1.8.0-openjdk-demo.x86_64(安装这个java -version 正常显示,但是javac不能用,因为yum install java 只是安装了java的运行时环境,并不支持编译,安装成…

NLP学习——信息抽取

信息抽取 自动从半结构或无结构的文本中抽取出结构化信息的任务。常见的信息抽取任务有三类:实体抽取、关系抽取、事件抽取。 1、实体抽取 从一段文本中抽取出文本内容并识别为预定义的类别。 实体抽取任务中的复杂问题: 重复嵌套,原文中…

使用openai-whisper 语音转文字

前言:最近由于ChatGPT 的大热,AI 应用领域再次进入大众的视线,今天介绍一款AI应用whisper 可以较为准确的将人声转换为文字(支持多国语言)一、安装安装有两种方式pip 和源码编译安装,这里介绍pip安装方式安…

欧盟砍伐森林法规和遵守情况 用Dimitra技术解决森林砍伐问题

两千年前,西欧有80%的地区被列为森林。今天,这个数字只有34%。森林砍伐影响着这个星球上的每个人。它造成了大约10%的全球变暖。如果不设法解决森林砍伐问题,就不可能应对全球变暖。 毁林是有目的的清除林地的行为。此外,工业化农…

cmd常用的操作命令

使用windows系统,通常在cmd中输入指令,会调用相应的一些程序或者执行一些功能,学会使用CMD中的命令,可以加快我们一些操作,省时省力。 ipconfig ------查询IP地址 gpedit.msc-----组策略 sndrec32-------录音机 Nsloo…

ClickHouse 合并树表引擎 MergeTree 索引与数据存储方式

目录 1. 一级索引 1.1 稀疏索引 1.2 索引粒度 1.3 索引数据的生成规则 1.4 索引的查询过程 2. 二级索引 2.1 granularity 与 index_granularity 2.2 跳数索引的生成规则

JVM从看懂到看开Ⅲ -- 类加载与字节码技术【上】

文章目录类文件结构魔数版本常量池访问标识与继承信息Field 信息Method 信息附加属性字节码指令初识javap工具图解方法执行流程通过字节码指令来分析分析 i问题条件判断指令循环控制指令构造方法cinit()Vinit()V方法调用多态原理异常处理try-catch多个single-catchfinallyfinal…

MDQ60-16-ASEMI三相整流模块MDQ60-16

编辑-Z MDQ60-16在MDQ封装里采用的4个芯片,是一款机床用三相可控整流模块。MDQ60-16的浪涌电流Ifsm为920A,漏电流(Ir)为5mA,其工作时耐温度范围为-40~150摄氏度。MDQ60-16采用GPP硅芯片材质,里面有4颗芯片组成。MDQ60-16的电性参…

TCP连接的状态详解以及故障排查(五)

同时打开 两个应用程序同时执行主动打开的情况是可能的,虽然发生的可能性较低。每一端都发送一个SYN,并传递给对方,且每一端都使用对端所知的端口作为本地端口。例如: 主机a中一应用程序使用7777作为本地端口,并连接到主机b 888…

WebDAV之葫芦儿·派盘+KMPlayer

KMPlayer 支持WebDAV方式连接葫芦儿派盘。 KMPlayer几乎可以播放您系统上所有的影音文件,支持几乎全部音视频格式。通过其强大的插件功能,可以支持层出不穷的新格式。软件还具有齐全的操控功能,支持捕获音频、捕获AVI、捕获画面、外挂字幕、自定义编辑设置,是视频爱好者的不…

Java NIO学习(二):Channel通道

2.1 Channel 概述Java NIO 的通道类似流,但又有些不同:既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个 Buffer,或者总是要从一个 Buffer 中写入。2.2 Ch…

应用监控以及告警实现

前言 一个Java应用 可以不优秀,但是一定不能没有监控方案。否则极大影响排查线上问题的效 以及系统故障的及时告警 。试想 核心应用挂了一个 但是没有配置告警 理想情况几个小时 被自己人发现了 但是万一自己人也没看到或者没关注 那难道让服务一直挂下去么 &#…

var const let

菜鸟学前端 本文:https://www.jianshu.com/p/b7116525273b 文章目录varlet和const写不动了参考说实话,在看到这个之前,我只知道 var,以前也只用过这玩意。 后面那俩都不知道是干啥用的。 感谢同桌的提示。 记! var v…

四 、QML常用控件的使用详解

在Qt Quick的世界里,window对象用于创建一个与操作系统相关的顶层窗口,而其他的元素,如Text Rectangle,Image等,都睡Windows提功能场景里面的显示对象,Window还有一个派生类,即是大名鼎鼎的Application Win…

ABAP 搜索帮助带出多个字段描述 更新屏幕字段

文章目录需求解析1-DYNP_GET_STEPL2-F4IF_INT_TABLE_VALUE_REQUEST3-获取返回值4-把相应字段更新到内表5-DYNP_VALUES_UPDATE代码需求 如图,当我点击责任工序的搜说帮助时, 同时会把责任人员的描述带出来. 解析 1-DYNP_GET_STEPL 这个方法就是获取当前的循环步骤 2-F4IF_I…