Основни разлики при заявки към базата данни на Salesforce

SOQL (Salesforce Object Query Language) е езикът, използван за запитване на данни от вашата Salesforce организация. Софтуерните инженери или анализатори с опит в SQL може да намерят SOQL за синтактично познат, но има няколко ключови разлики, които трябва да знаете, преди да започнете.

За какво можете да използвате SOQL?

За разлика от SQL, SOQL е език изключително за заявки към базата данни, а не за модифициране на данни, както в традиционния SQL. Няма оператори INSERT или UPDATE. Промяната на данните се извършва с помощта на потребителския интерфейс на Salesforce или Apex DML, част от собствения език за програмиране на Salesforce. В SOQL обектите на Salesforce са представени като SQL таблици.

ИЗБЕРЕТЕ

Клаузата SELECT на SOQL заявка е подобна на SQL с едно значително изключение: SELECT * не е разрешено; трябва да посочите полетата за избор. Например, заявката в

SQL:

SELECT * FROM Lead

Трябва да бъде по-конкретно.

SOQL:

SELECT Id, Name, Company, Industry FROM Lead

ПРИСЪЕДИНЯВАНЕ

Най-съществената разлика при използването на SOQL е обработката на JOIN. Ключовата дума JOIN всъщност не съществува в SOQL. Освен това, само свързани обекти могат да бъдат запитвани заедно.

Взаимоотношенията родител-към-дете или дете-родител са най-честите и ясни взаимоотношения в Salesforce. Ще демонстрираме концепцията за SOQL „съединения“, използвайки връзката между акаунт (родител) и контакт (дете).

От дете към родител

Запитването за връзка дете-родител използва проста нотация с точка. Нека сравним тези заявки, които изпълняват едно и също действие.

SQL:

SELECT Contact.Name, Contact.Email, Account.Name 
FROM Contact 
LEFT JOIN Account ON (Contact.AccountId = Account.Id)

SOQL:

SELECT Name, Email, Account.Name FROM Contact

Можем дори да преминем през няколко релации, използвайки тази нотация с точки, еквивалентно на свързване на повече от две таблици.

SQL:

SELECT Contact.Name, Contact.Email, Account.Name, Owner.Name 
FROM Contact 
LEFT JOIN Account ON (Contact.AccountId = Account.Id)
LEFT JOIN User ON (Account.OwnerId = User.Id)

SOQL:

SELECT Id, Name, Account.Name, Account.Owner.Name FROM Contact

От родител към дете

Отношенията родител-към-дете се запитват, като се използва формата за множествено число на дъщерния обект и подзаявка в клаузата SELECT.

SQL:

SELECT Account.Name, Contact.Name, Contact.Email 
FROM Account 
LEFT JOIN Contact ON (Account.Id = Contact.AccountId)

SOQL:

SELECT Name, (SELECT Name, Email FROM Contacts) FROM Account

Агрегатни функции

Агрегираните функции се използват в SOQL подобно на традиционния SQL. Наличните агрегатни функции са COUNT(), MIN (), MAX (), AVG (), SUM () и COUNT_DISTINCT().

Има малка разлика в преброяването на всички записи.

SQL:

SELECT COUNT(*) FROM Account

SOQL:

SELECT COUNT() FROM Account

А функцията COUNT_DISTINCT ви позволява лесно да идентифицирате броя на различните стойности за дадено поле.

SQL:

SELECT COUNT(DISTINCT MailingCountry) FROM Contact

SOQL:

SELECT COUNT_DISTINCT(MailingCountry) FROM Contact

Други ключови думи

Други често използвани ключови думи в SQL — WHERE, LIMIT, OFFSET, GROUP BY, HAVING, LIKE, AND, OR и др. — се поддържат и форматират като традиционния SQL.

SQL:

SELECT MailingCountry, Count(Id)
FROM Contact
WHERE MailingCountry IS NOT NULL
GROUP BY MailingCountry 
HAVING Count(Id) > 1
LIMIT 10

SOQL:

SELECT MailingCountry, Count(Id)
FROM Contact
WHERE MailingCountry != NULL
GROUP BY MailingCountry 
HAVING Count(Id) > 1
LIMIT 10

Къде да направите заявка

Има няколко различни опции за писане на SOQL заявки. Можете да използвате редактора на заявки на конзолата за програмисти в рамките на Salesforce, Salesforce Workbench или Inline SOQL в кода на Apex. Предпочитам Workbench пред Query Editor, защото показва всички обекти и полета, които могат да бъдат заявени, и ви позволява бързо да експортирате резултати в CSV файл. Workbench също така предоставя опция за писане на заявки декларативно, което е полезно за начинаещи без много опит в SQL.

Повече полезна информация за изграждане на SOQL заявки може да бъде намерена в документация и в Trailhead.