[Salesforce] Apex Basics & Database - SOQL 쿼리 작성하기
2026, Apr 26
목차
SOQL 쿼리 작성하기
https://trailhead.salesforce.com/ko/content/learn/modules/apex_database/
SOQL(Salesforce Object Query Language)
- 표준 SQL 언어와 유사하지만 Salesforce 플랫폼에 맞게 사용자 정의됨
- SOQL 쿼리를 Apex 코드에 포함시켜 간편하게 결과를 조회 (인라인 SOQL)
- [] 안에 SOQL 구문 작성, return은 sObjects
Account[] accts = [SELECT Name,Phone FROM Account];
Query Editor

- 이렇게 실행하면 됨~
다른 SQL과의 차이
- 모든 필드 조회하려면
*이 아닌FIELDS(STANDARD),FIELDS(CUSTOM),FIELDS(ALL)사용해야함 - ID 필드는 항상 반환되기 때문에 생략 가능 (ID만 조회할 땐 명시 필요)
- 문자열 비교 시 대소문자 구분하지 않음
실습
바인딩
String targetDepartment = 'Wingo';
Contact[] techContacts = [SELECT FirstName,LastName
FROM Contact WHERE Department=:targetDepartment];
관련 레코드 조회
- Salesforce 레코드는 lookup 관계 또는 master-detail 관계로 이어짐
- Contact는 Account와 lookup 관계
SELECT Name, (SELECT LastName FROM Contacts) FROM Account WHERE Name = 'SFDC Computing'Account[] acctsWithContacts = [SELECT Name, (SELECT FirstName,LastName FROM Contacts) FROM Account WHERE Name = 'SFDC Computing']; // Get child records Contact[] cts = acctsWithContacts[0].Contacts; System.debug('Name of first associated contact: ' + cts[0].FirstName + ', ' + cts[0].LastName);
- Contact는 Account와 lookup 관계
Contacts라는 sObjects 가져온걸로 첫번째 데이터 조회한 결과
Contact[] cts = [SELECT Account.Name FROM Contact
WHERE FirstName = 'Carol' AND LastName='Ruiz'];
Contact carol = cts[0];
String acctName = carol.Account.Name;
System.debug('Carol\'s account name is ' + acctName);
Account.Name과 같이.을 사용해서 자식객체에서 부모객체 가져올 수 있음
루프를 통해 일괄 처리 하기
for (variable : [soql_query]) {
code_block
}
for (variable_list : [soql_query]) {
code_block
}
- 루프는 sObject 200개마다 한번씩 배치 수행
Hands-on
- input : Last Name, Mailing Postal Code
- output : Contact List
- input 비교해서 매칭되는 contact 1건 조회
public class ContactSearch {
public static Contact[] searchForContacts(String lastName, String postalCode) {
Contact[] contacts = [SELECT Name FROM Contact
WHERE (LastName=:lastName AND MailingPostalCode=:postalCode)
LIMIT 1];
System.debug(contacts);
return contacts;
}
}