SOQL 查询入门
学习目标
完成本单元后,您将能够:
- 用必选的子句构建一条有效的 SOQL 查询。
- 使用多个条件筛选查询结果。
- 对查询结果进行排序。
如果这是您的掌握 Apex 编程技能学习路径的第一站,您太超前了。请往后退,先获得管理员 Apex 基础和管理员面向对象的编程徽章,然后再继续学习本模块。
已经获得那些徽章了?太棒了!既然您已经对如何创建类、变量和 sObjects 有了基本了解,现在是时候学习 Salesforce 对象查询语言 SOQL 了(读作 sockle)。
什么是 SOQL?
SOQL 是一种语言,从 Salesforce 数据库获取记录数据。在管理员面向对象的编程中您学过可以用 Data Manipulation Language (DML) 语句来插入、更新和删除记录。但是如果您想获得数据库中已经存在的数据,该怎么做呢?SOQL 使提取数据更简单。
创建 SOQL 查询类似于创建报表。当您创建报表时,您回答诸如此类的问题:
- 您想显示什么字段?
- 那些字段在哪里?
创建 SOQL 查询时,您需要问同样的问题。在查询中,这些问题的答案是字段和对象。
这条查询包含 SOQL 关键词(SELECT
和 FROM
)、记录字段(Name
和 Email
)以及一个对象(标准 Contact
对象)。
这个查询做什么?它检索(获取)数据库中关于联系人记录的特定信息。我们来学习这些片段如何结合在一起,并练习编写一些查询。首先,我们来看一条 SOQL 查询的必选部分。
必选 SOQL 子句
SELECT
SOQL 查询的基础是两个子句:SELECT 子句和 FROM 子句。可以把子句想成是一道谜语。它是一条完整查询的一部分。
每个 SOQL 查询都有一个 SELECT 子句,以关键词 SELECT
开头。SELECT 子句指定 Salesforce 记录中的一个或多个字段(以逗号隔开)。这条查询示例返回两个字段:Name
和 Email
。
关于字段名称的备注:作为管理员,当您跟另一位管理员谈话时,您很可能以字段标签来指称一个字段。但是在代码中,开发人员用的是 API 名称。所以在您的 SOQL 查询中,总是要使用字段的 API 名称,而不是字段标签。如果您不确定字段的 API 名称是什么,不要担心,总会有办法搞清楚的。本模块后文中将继续讨论。
FROM
创建一条 SOQL 查询需要的第二个子句是 FROM 子句。
以关键词 FROM
开头,FROM 子句指定您的 Salesforce 数据库中的某个对象。在这个例子中,我们需要来自 Contact
对象的数据。我们看一下当我们运行这条查询时数据看起来是什么样的。
跟随 Trail Together 进行学习
进行这一步骤时,想要跟随专家一起学习吗?查看此视频,它是 Trailhead Live 上 Trail Together 系列的一部分。可以在“资源”部分找到完整内容的链接。
准备上手实践 SOQL 了吗?
在本单元中,我们向您展示在 Developer Console 的查询编辑器中编写 SOQL 查询的步骤。本单元中没有任何实践挑战,但如果您想跟着做并尝试这些步骤,可以创建新的 Trailhead Playground。请参考 Trailhead Playground 管理模块学习如何操作。Salesforce 创建 Trailhead Playground 通常需要 3 到 4 分钟。需要完成本模块中后面的实践挑战时,您也可以使用这个 Playground。
用查询编辑器编写查询
- 在您的 Trailhead Playground 中,单击 并选择 Developer Console。
- 单击文件 | 打开 | 对象 | 联系人。
- 单击打开。
联系人对象打开,列示与之关联的所有字段的名称和类型。 - 在底部面板中,选择查询编辑器选项卡。(如果看不到这个选项卡,单击窗口底部的向上箭头。)
查询编辑器有三个部分。左上方 (1) 显示查询。您可以在那里编辑查询。左下方 (2) 显示报错。右边 (3) 保存执行过的 SOQL 查询的历史。 - 用 CTRL + 单击 (Windows) 或 CMD + 单击 (Mac),选择 Email、Name 和 Languages__c 字段。
- 单击查询。
该 SOQL 查询根据您选择的对象和字段显示在查询编辑器中。请注意,当您在查询生成器中选择某个字段时,查询生成器自动把该字段的 API 名称插入到 SOQL 查询中。有了这个工具,无需记住 API 名称或去搜索它们。 - 单击执行。
执行该查询后,结果准确地显示请求的内容。另外,当您使用查询编辑器时,附带的好处是返回 Id 。真是太酷了!
可选 SOQL 子句
SELECT 子句和 FROM 子句是必选的,但是 SOQL 也有可选子句来细化您的查询。
您在 Trailhead Playground 中创建的查询示例返回的记录数量比较少。最后一条查询返回 20 条记录。但是如果有数千条记录呢?处理那些数据所需的算力将是巨大的。如果 SOQL 有办法返回所有记录的一个子集,那不是很好吗?实际上,它可以。
WHERE
WHERE 子句设定选中并返回记录必须满足的条件。WHERE 子句的用法跟您用筛选条件来限制列表视图或报表中显示的数据一样。比如,如果我们在查找名字是 Stella 的联系人,我们可以在查询的末尾加上 WHERE FirstName = 'Stella'
,如下所示:
SELECT Name, Email FROM Contact WHERE FirstName = 'Stella'
您也可以定义 WHERE 子句,通过多个条件来筛选。有多种方法来这么做,使用三个运算符:AND、OR 和 IN。我们来考虑一些例子。
AND |
用 AND 返回同时满足两个条件的记录。这条查询返回名字是 Stella 且姓是 Pavlova 的所有记录。SELECT Name, Email FROM Contact WHERE FirstName = 'Stella' AND LastName = 'Pavlova' |
OR |
用 OR 返回满足两个条件之一的记录。这条查询返回姓是 James 或姓是 Barr 的记录。SELECT Name, Email FROM Contact WHERE LastName = 'James' OR LastName = 'Barr' |
IN |
用 IN 返回满足三个或三个以上条件中至少一个的记录。IN 子句通常用来返回选项列表的值,或 LIST 或 SET 的值。IN 简化查询,否则会有许多 OR 条件。这条查询返回姓是 James、Barr、Nedaerk 或 Forbes 的所有记录。SELECT Name, Email FROM Contact WHERE LastName IN ('James', 'Barr', 'Nedaerk', 'Forbes') |
LIMIT
LIMIT
关键词设定返回的最大记录数目。当您在测试,不想等一个查询处理大量数据时,LIMIT 很有用。随着您越来越了解 SOQL,您会发现更多有用的方法来避免返回太多记录,不过在那之前,LIMIT 是一个简单的解决办法。我们来尝试给查询添加一个限制条件。
- 请回到 Developer Console 的查询编辑器。
- 在查询末尾,输入
LIMIT 5
,它看起来是这样的:SELECT Email, Name FROM Contact LIMIT 5
- 单击执行。
“查询结果”窗格显示五条结果。
ORDER BY
现在您已经可以控制结果数量,那您如何排列那些结果呢?使用 ORDER BY
子句按特定字段的值对结果进行排序。或者,在一个 ORDER BY 子句中使用一个限定符来指定升序(默认)或降序,跟电子表格中一样。最后,如果您有许多空的字段值,使用 NULLS 限定符把所有空值一起放在最前面(默认)或最后面。
语法 |
描述 |
示例 |
ASC |
以升序返回结果 |
SELECT Name, Email FROM Contact ORDER BY Name ASC LIMIT 5 |
DESC |
以降序返回结果 |
SELECT Name, Email FROM Contact ORDER BY Email DESC LIMIT 5 |
NULLS FIRST | LAST |
在开头 (NULLS FIRST) 或末尾 (NULLS LAST) 返回空记录。 |
SELECT Name, Email FROM Contact ORDER BY Email NULLS LAST |
在 ASC 例子中,SELECTName, Email FROM Contact ORDER BY Name ASC LIMIT 5
返回五个联系人的 Name
和 Email
字段,按姓名升序排序。
在 NULLS 例子中,SELECT Name, Email FROM Contact ORDER BY Email NULLS LAST
按电子邮件升序排序返回姓名和电子邮件(因为升序是默认排序方式)。没有电子邮件地址的记录全部放在最后面。
学习 SOQL 的功能介绍后,您现在可以提取大量数据、设定限制获得非常具体的结果,并且根据您的需要排列返回的数据。非常好。