작성일자 : 2023-09-17
Ver 0.1.1
1. SOQL이란?
SOQL은 Salesforce Object Query Language의 줄임말로 Salesforce Objects에서 Record를 다루는 언어이다.
문법은 SQL과 크게 다르진 않지만, 그렇다고 완전하게 SQL과 동일하진 않다.
Salesforce를 데이터 원본으로 하는 Tableau 대시보드를 여럿 만들어 봐서 이제는 제법 SOQL이 익숙해졌지만, 여전히 모르는 부분은 많이 있다.
그때마다 위 공식 문서를 통해 새로운 내용을 접하곤 한다.
2. SQL과 SOQL의 차이점 및 SOQL 특징
그렇다면 비교적 널리 알려진 SQL과 SOQL과의 차이점은 어떤것이 있을까?
필자는 SOQL에 대해서 하나도 알지 못했다가. Salesforce를 데이터 원본으로 Tableau 대시보드를 만드는 프로젝트를 하게 되면서 SOQL을 처음으로 접하게 되었다.
큰 틀에서는 SQL 기반이지만, 사용하다보니 제약사항들이 있었고, SOQL에 대해서 알려주는 사람이 없어 공식 문서를 보면서 독학을 했었다.
일반적으로 알려진 차이점과 내가 겪었던 차이점에 대해 정리해보자면 아래와 같다.
- SOQL에서는 DDL문(INSERT, UPDATE, DELETE)이 없다.
- SOQL에서는 쿼리를 수행하는데 있어서 오직 SELECT문만 사용가능하다.
- SOQL에서는 모든 필드를 조회하는 '*'를 사용할 수 없다.
- 이는 SOQL이 Salesforce 데이터를 반환하는 해당 데이터 모두 '데이터베이스를 공유'하는 일종의 다중 테넌트 환경에 상주하기에, *와 같은 경우 문제를 일으킬 수 있기 때문이다.
- 이에 Inspector에서는 Ctrl + Spacebar를 통해 모든 컬럼을 한번에 불러와 조회할 수 있다.
- SOQL에서는 JOIN 문법이 지원되지 않는다.
- SOQL에서는 테이블간 결합을 하는 'JOIN' 문법을 사용할 수 없다.
- 다른 테이블과 결합하여 쿼리를 작성하고 싶다면, '관계 쿼리'를 작성해야한다.
- 부모-자식 관계 혹은 상위-하위 관계의 관계를 가진 테이블들은 JOIN을 사용하지 않고 아래와 같은 쿼리로 조회를 할수 있다.
-- 일반 SQL JOIN
SELECT c.FirstName, c.LastName, a.Name
FROM Account a
RIGHT JOIN Contact c
ON (c.AccountId = a.Id)
-- SOQL
SELECT FirstName, LastName, Account.Name
FROM Contact
- SFDC의 System 관련 Date 레코드들에는 9시간을 더해야 한국 시간과 동일하다.
- Salesforce에는 레코드 생성시 자동으로 생성되는 Field들 (CreatedDate,LastModifiedDate, Owner 등등)이 있다. 이중에서 특히 CreatedDate를 가지고 Tableau 개발을 많이 하는데, 이때 9시간을 더해야 한국 시간과 맞출 수 있다.
- Salesforce의 System Field들은 국제표준시간(UTC)를 기준으로 기록되기에 9시간을 더해야한다.
- 날짜 조건을 통해 쿼리문을 작성할때는 이를 고려하여 쿼리를 작성해야 원하는 결과가 나올 수 있다.