Skip to main content

执行 SOQL 和 SOSL 查询

学习目标

完成本单元后,您将能够:
  • 使用查询编辑器或在 Apex 代码中执行 SOQL 查询。
  • 使用查询编辑器或在 Apex 代码中执行 SOSL 搜索。
备注

备注

用中文(简体)学习?在中文(简体)Trailhead Playground 中开始挑战,用括号中提供的译文完成挑战。仅复制并粘贴英文值,因为挑战验证基于英文数据。如果在中文(简体)组织中没有成功通过挑战,我们建议您 (1) 将区域设置切换为美国,(2) 按此处说明将语言切换为英文,(3) 再次单击“检查挑战”按钮。

查看 Trailhead 本地化语言徽章详细了解如何利用 Trailhead 译文。

什么是 SOQL 查询?

SOQL 表示 Salesforce 对象查询语言。您可以使用 SOQL 读取存储在组织数据库中的信息。SOQL 在语法上类似于 SQL(结构化查询语言)。

您可以在 Apex 代码或 Developer Console 的查询编辑器中编写和执行 SOQL 查询。

执行 SOQL 查询

开始编写和执行查询之前,您需要在 Salesforce 组织中添加一些可以搜索的数据。让我们来添加三位控制工程师的联系方式,他们是任务控制中心派来引导您的飞船远离小行星 2014 QO441 的。
  1. 选择调试 | 打开执行匿名窗口
  2. 复制并粘贴以下代码并执行代码。此代码可以将三个控制工程师的联系方式添加到数据库中的“联系人”对象中。
    // Add first contact and related details
    Contact contact1 = new Contact(
       Firstname='Quentin',
       Lastname='Foam',
       Phone='(415)555-1212',
       Department= 'Specialty Crisis Management',
       Title='Control Engineer - Specialty - Solar Arrays',
       Email='qfoam@trailhead.com');
    insert contact1;
    // Add second contact and related details
    Contact contact2 = new Contact(
       Firstname='Vega',
       Lastname='North',
       Phone='(416)556-1312',
       Department= 'Specialty Crisis Management',
       Title='Control Engineer - Specialty - Propulsion',
       Email='vnorth@trailhead.com');
    insert contact2;
    // Add third contact and related details
    Contact contact3 = new Contact(
       Firstname='Palma',
       Lastname='Sunrise',
       Phone='(554)623-1212',
       Department= 'Specialty Crisis Management',
       Title='Control Engineer - Specialty - Radiators',
       Email='psunrise@trailhead.com');
    insert contact3;
    现在,我们可以使用查询编辑器编写并执行 SOQL 查询,来查找这些控制工程师。SOQL 查询会在特定对象中搜索数据。您可以在 WHERE 子句中添加可选条件,以缩小搜索范围。
  3. 在“查询编辑器”选项卡中输入以下查询。
    SELECT Name, Phone, Email, Title FROM Contact
                                     WHERE (Department = 'Specialty Crisis Management')
  4. 单击执行

结果将显示在特种危机管理部门工作的联系人的详细信息。

SOQL 查询结果

您可以使用另一个 SOQL 查询来查找其他部门的联系人,还可以查看是否有其他人员为更多控制工程师创建了记录。要重新运行查询,单击“查询结果”面板中的刷新网格

您使用 Apex 代码执行的 SOQL 查询称为内嵌式 SOQL 查询。我们来看看如何利用 Developer Console,使用内嵌式 SOQL 查询搜索在特种危机管理部门工作的联系人。

这一次,我们还会尝试按姓名字母顺序对结果进行排序。
  1. 选择调试 | 打开执行匿名窗口
  2. 输入以下代码。
    Contact[] theseContacts = [SELECT Name, Phone, Email, Description FROM Contact
                               WHERE (Department='Specialty Crisis Management')
                               ORDER BY Name];
    // Log a count of how many contacts were found
    System.debug(theseContacts.size() + ' contact(s) returned.');
    // Log all values in the array of contacts
    System.debug(theseContacts);
  3. 执行代码后,打开日志。
  4. 要仅查看 USER_DEBUG 消息,请选择仅调试。结果可以显示返回的客户数量以及按字母顺序排列的联系方式。

要深入研究 SOQL 查询,请查看 Apex 基本知识和数据库模块。

SOSL(Salesforce 对象搜索语言)是一种可以在记录中执行文本搜索的语言。与 SOQL 不同,SOSL 可以同时查询多种类型的对象。SOSL 还可以使用单词匹配来匹配字段,而 SOQL 则需要精确的短语。

使用“危机”一词对联系人记录运行 SOSL 搜索时,搜索会查看所有联系人字段并返回包含该词语的任何记录。但如果在 SOQL 查询中尝试相同的操作,则需要指定要搜索的字段以及要搜索的完整单词或短语。您还可以使用 LIKE 或通配符来缩小 SOQL 或 SOSL 搜索的范围。

  1. 在“查询编辑器”选项卡中,输入以下 SOSL 查询。请注意,查询中仅包含特种危机管理部门的部分名称。
    FIND {Crisis} IN ALL FIELDS RETURNING Contact(FirstName, LastName, Phone, Email, Title)
  2. 执行查询,然后在“搜索结果”窗格中观察结果。SOSL 查询结果
正如进行 SOQL 查询那样,您可以在 Apex 代码中执行 SOSL 搜索。
  1. 选择调试 | 打开执行匿名窗口
  2. 执行以下代码。
    List<List<sObject>> searchList = [FIND 'Crisis' IN ALL FIELDS 
                                      RETURNING Contact(FirstName, LastName,
                                      Phone, Email, Description)];
    Contact[] searchContacts = (Contact[])searchList[0];
    System.debug('Found the following contacts:');
    for (Contact c : searchContacts) {
       System.debug(c.LastName + ', ' + c.FirstName);
    }
  3. 打开日志,然后选择仅调试选项。

“执行日志”可以列出控制工程师的姓名。

要了解有关 SOSL 搜索的更多信息,请查看 Apex 基本知识和数据库模块。

当您在测试使用 SOQL 和 SOSL 操作时,您刚刚找到其联系方式的控制工程师们也已将飞船转舵到小行星的运行轨道之外。事实证明,指挥一艘飞船一点都不难:只要有一个好的控制台,并学会委派即可!

您已经成功避免了与小行星 2014 QO441 的碰撞,您决定降落在海王星空间站,好好休息一下。了解 Developer Console 的各种功能和特性后,您就可以指导组织成功完成许多任务。

在 Salesforce 帮助中分享 Trailhead 反馈

我们很想听听您使用 Trailhead 的经验——您现在可以随时从 Salesforce 帮助网站访问新的反馈表单。

了解更多 继续分享反馈