ํ์ค ๊ฐ์ฒด๋ก ๊ด๊ณ ์ฟผ๋ฆฌ ๋ง๋ค๊ธฐ
ํ์ต ๋ชฉํ
์ด ์ ๋์ ์๋ฃํ๋ฉด ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
- ๋ ๊ฐ์ง ์ ํ์ ๊ด๊ณ ์ฟผ๋ฆฌ์ ๋ํด ์ค๋ช
ํ ์ ์์ต๋๋ค.
- ๋ ๊ฐ์ฒด ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์๋ณํ ์ ์์ต๋๋ค.
- ์ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ ํ์-์์ ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- ๋ณด์กฐ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์์-ํ์ ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- ๋ณด์กฐ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํํฐ๋งํ ์ ์์ต๋๋ค.
Trail Together๋ก ํจ๊ป ๋ฐ๋ผํ๊ธฐ
์ด ๋จ๊ณ๋ฅผ ์ ๋ฌธ๊ฐ์ ํจ๊ป ์งํํ๊ณ ์ถ์ผ์ ๊ฐ์? Trailhead Live์ Trail Together ์๋ฆฌ์ฆ์ ํฌํจ๋ ์ด ๋น๋์ค๋ฅผ ์์ฒญํ์ธ์.
(๋ค๋ก ๋๋ ค ๋จ๊ณ๋ฅผ ์ฒ์๋ถํฐ ๋ค์ ๋ณด๊ณ ์ถ์ ๊ฒฝ์ฐ, ์ด ํด๋ฆฝ์ 36:18๋ถ ํ์์์ ์์๋๋ค๋ ๊ฒ์ ๊ธฐ์ตํ์ธ์.)
๊ด๊ณ ์ฟผ๋ฆฌ
Salesforce ๊ด๋ฆฌ์๋ก์ ์ฌ๋ฌ๋ถ์ ์ด๋ฏธ ๊ด๋ จ ๋ ์ฝ๋์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์์ ํ๋์ ์ต์ํ ๊ฒ์ ๋๋ค. ์ด์ ๊ฐ์ฒด ๊ด๊ณ์ ๋ํ ์ง์์ SOQL ์ฟผ๋ฆฌ ์์ฑ์ ์ ์ฉํ ์ ์์ต๋๋ค.
FROM ์ ์ ํ๋์ ๊ฐ์ฒด๋ก ์ ํ๋์ง๋ง ๊ด๊ณ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๊ฐ์ ๊ด๋ จ ๊ฐ์ฒด์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ๊ด๊ณ ์ฟผ๋ฆฌ๋ ์๋ก ๋ค๋ฅธ ๋ ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ์ ๋ฐ๋ผ ๋ ๊ฐ์ฒด ๋ชจ๋์์ ํ๋๋ฅผ ๋ฐํํฉ๋๋ค. ๊ต์ฐจ ๊ฐ์ฒด ์ฟผ๋ฆฌ๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
๋ค์ ์๊ตฌ ์ฌํญ์ ๊ณ ๋ คํ์ธ์.
'Get a list of all contacts with each contactโs account name.(๊ฐ ์ฐ๋ฝ์ฒ์ ๊ณ์ ์ด๋ฆ์ ์ฌ์ฉํด ๋ชจ๋ ์ฐ๋ฝ์ฒ ๋ชฉ๋ก์ ๊ฐ์ ธ์ต๋๋ค.)'
Contact(์ฐ๋ฝ์ฒ) ๊ฐ์ฒด๋ฅผ ์ฟผ๋ฆฌํ ์ ์์ง๋ง ์ฌ๊ธฐ์ Account Name(๊ณ์ ์ด๋ฆ) ํ๋๋ ์์ต๋๋ค. ๊ณ์ ์ด๋ฆ์ ์ค์ ๋ก Contact(์ฐ๋ฝ์ฒ)์ ๊ด๋ จ๋ Account(๊ณ์ )์ Name(์ด๋ฆ) ํ๋์ ๋๋ค. ์กฐ์ง์์๋ ์์ ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๊ด๋ จ ๊ฐ์ฒด์ ํ๋์ ์ก์ธ์คํฉ๋๋ค. Apex์์๋ ๊ด๊ณ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง๋ง ๊ด๊ณ ์ฟผ๋ฆฌ์ ์ ํ์ ๋ ๊ฐ์ฒด๊ฐ ์ด๋ป๊ฒ ๊ด๋ จ๋์ด ์๋์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
๋ ์ฝ๋๋ฅผ ์ป๋ ๋ฐฉ๋ฒ:
-
ํ์ ๊ฐ์ฒด์ ๋ํ ๋ ์ฝ๋๋ฅผ ์ป๊ณ ๊ด๋ จ ์์ ๊ฐ์ฒด์ ์๋ ํ๋๋ฅผ ํฌํจํ๋ ค๋ฉด ํ์-์์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
-
์์ ๊ฐ์ฒด์ ๋ํ ๋ ์ฝ๋๋ฅผ ์ป๊ณ ๊ด๋ จ ํ์ ๊ฐ์ฒด์ ์๋ ํ๋๋ฅผ ํฌํจํ๋ ค๋ฉด ์์-ํ์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ฌ์ฉํ ์ฟผ๋ฆฌ ์ ํ์ ๊ฒฐ์ ํ๋ ค๋ฉด ๋จผ์ ๋ ๊ฐ์ฒด์ธ Contact(์ฐ๋ฝ์ฒ)์ Account(๊ณ์ )๊ฐ ์ด๋ป๊ฒ ๊ด๋ จ๋์ด ์๋์ง ํ์ ํด์ผ ํฉ๋๋ค. ์ด๋ ์ชฝ์ด ์์์ด๊ณ ์ด๋ ์ชฝ์ด ํ์์ธ๊ฐ์?
๊ฐ์ฒด์ ๊ด๊ณ ์๋ณ
์ฌ๋ฌ๋ถ์ ๊ด๋ฆฌ์๋ก์ ์กฐ์ง์ ๋ง์คํฐ-์ธ๋ถ ์ ๋ณด ๊ด๊ณ์ ์ต์ํ ๊ฒ์ ๋๋ค. ๋ง์คํฐ-์ธ๋ถ ์ ๋ณด ๊ด๊ณ๋ ์์-ํ์ ๊ด๊ณ์ ๋๋ค. ๋ง์คํฐ ๊ฐ์ฒด๊ฐ ์์์ด๊ณ , ์ธ๋ถ ์ ๋ณด ๊ฐ์ฒด๊ฐ ํ์์ ๋๋ค. ์ฟผ๋ฆฌ์ ํฌํจํ ๋ ๊ฐ์ฒด๊ฐ ๋ง์คํฐ-์ธ๋ถ ์ ๋ณด ๊ด๊ณ์ธ ๊ฒฝ์ฐ ์ด๋ ์ชฝ์ด ์์์ด๊ณ ์ด๋ ์ชฝ์ด ํ์์ธ์ง ์์์ผ ํฉ๋๋ค.
์ฟผ๋ฆฌ์ ํฌํจํ ๋ ๊ฐ์ฒด์ ๋ํด ์ต์ํ์ง ์๊ฑฐ๋ ๋ ๊ฐ์ฒด๊ฐ ์ด๋ป๊ฒ ๊ด๋ จ๋์ด ์๋์ง ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ ๊ฐ์ฒด ๊ด๋ฆฌ์์์ ๊ฐ์ฒด๋ฅผ ์ดํด๋ณด์ธ์. ํ์์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ ๊ฐ์ฒด๋ถํฐ ์์ํด์ ํ๋ ๋ฐ ๊ด๊ณ๋ฅผ ์ดํด๋ด ๋๋ค. ์์ ๊ฐ์ฒด์ ์ฐ๊ฒฐํ ์ ์๋ ํ๋ ์ด๋ฆ์ ์ฐพ์ต๋๋ค.
์๋ฅผ ๋ค์ด Contact(์ฐ๋ฝ์ฒ)์๋ AccountId ํ๋์ Lookup(Account) ๋ฐ์ดํฐ ํ์์ด ์์ต๋๋ค. ์ฝ๋์๋ ํ๋ ๋ ์ด๋ธ(Account Name)์ด ์๋ ํ๋ ์ด๋ฆ(AccountId)์ด ํ์ํ๋ค๋ ์ ์ ๊ธฐ์ตํ์ธ์.

AccountId ํ๋์ ์ธ๋ถ ์ ๋ณด์์ Child Relationship Name(ํ์ ๊ด๊ณ ์ด๋ฆ)์ด Contacts(๋ณต์ํ)์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ค ๊ฐ์ฒด์ ๊ด๊ณ ์ด๋ฆ์ ํ์ ๊ฐ์ฒด ์ด๋ฆ์ ๋ณต์ ํ์์ ๋๋ค.

Child Relationship Name(ํ์ ๊ด๊ณ ์ด๋ฆ)์ ํตํด Contact(์ฐ๋ฝ์ฒ)๊ฐ Account(๊ณ์ )์ ํ์ ์์๋ผ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๋ํ ์์-ํ์ ์ฟผ๋ฆฌ์ ํ์ํ ๊ด๊ณ ์ด๋ฆ๋ ์ ์ ์์ต๋๋ค(์ด ์ ๋์ ๋ท๋ถ๋ถ์์ ์ค๋ช ).
ํ์-์์ ์ฟผ๋ฆฌ ๋ง๋ค๊ธฐ
์ด์ Contact(์ฐ๋ฝ์ฒ)์ Account(๊ณ์ )๊ฐ ํ์-์์ ๊ด๊ณ๋ผ๋ ์ ์ ์์์ต๋๋ค. Contact(์ฐ๋ฝ์ฒ)๊ฐ ํ์์ด๊ณ , Account(๊ณ์ )๊ฐ ์์์ ๋๋ค. ๋ชจ๋ ์ฐ๋ฝ์ฒ(ํ์) ๋ฐ ๊ฐ ์ฐ๋ฝ์ฒ์ ๊ณ์ (์์) ์ด๋ฆ์ ๋ฐํํ๋ ค๋ฉด ํ์-์์ ์ฟผ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
ํ์-์์ ์ฟผ๋ฆฌ์์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ํ์ ๊ฐ์ฒด๋ฅผ ์ฟผ๋ฆฌํ๊ณ ์์ ๊ฐ์ฒด์์ ํ๋๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
SELECT Name, Account.Name FROM Contact
์ด SELECT ๋ช
๋ น๋ฌธ์ Contact(์ฐ๋ฝ์ฒ) ๊ฐ์ฒด๋ฅผ ์ฟผ๋ฆฌํฉ๋๋ค. SELECT ์ ์์ Name(์ด๋ฆ)์ Contact(์ฐ๋ฝ์ฒ)์ Name(์ด๋ฆ) ํ๋์ด๊ณ Account.Name์ Contact(์ฐ๋ฝ์ฒ)์ ๊ด๋ จ๋ Account(๊ณ์ )์ Name(์ด๋ฆ) ํ๋์
๋๋ค.
ํ์-์์ ์ฟผ๋ฆฌ ์คํํ๊ธฐ
- Developer Console์ ์ฟผ๋ฆฌ ํธ์ง๊ธฐ์์ ๋ค์์ ์
๋ ฅํฉ๋๋ค.
SELECT Name, Account.Name FROM Contact
-
Execute(์คํ)๋ฅผ ํด๋ฆญํฉ๋๋ค.
๊ฒฐ๊ณผ์ ์ฒซ ์ฌ์ฏ ๊ฐ ํ์ด ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค.
์ฟผ๋ฆฌ ๊ฒฐ๊ณผ - ์ด ํ ์: 20 | |
|---|---|
์ด๋ฆ |
Account.Name |
Rose Gonzales |
Edge Communications |
Sean Forbes |
Edge Communications |
Jack Rogers |
Burlington Textiles Corp of America |
Pat Stumuller |
|
Andy Young |
Dickenson plc |
Tim Barr |
Grand Hotels & Resorts Ltd |
๋ ๋ฒ์งธ ์ด์๋ ์ฐ๋ฝ์ฒ์ ์์ ๊ณ์ ๊ฐ์ฒด์์ ๊ฐ์ ธ์จ ๊ณ์ ์ด๋ฆ์ด ํ์๋ฉ๋๋ค.
์์-ํ์ ์ฟผ๋ฆฌ ๋ง๋ค๊ธฐ
์ด์ ์์ ๊ฐ์ฒด๋ฅผ ์ฟผ๋ฆฌํ๊ณ ํ์ ๊ฐ์ฒด์์ ํ๋๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์์-ํ์ ์ฟผ๋ฆฌ์์๋ ๋ณด์กฐ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ ๊ฐ์ฒด์์ ํ๋๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ๋ณด์กฐ ์ฟผ๋ฆฌ๋ ๊ดํธ๋ก ๋๋ฌ์ธ์ฌ ๋ค๋ฅธ ์ฟผ๋ฆฌ ๋ด์ ์ค์ฒฉ๋ SELECT ๋ฌธ์ ๋๋ค.
์๊ตฌ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
'For every account, return the account name and the name of each related contact.(๋ชจ๋ ๊ณ์ ์ ๋ํด ๊ณ์ ์ด๋ฆ ๋ฐ ๊ด๋ จ๋ ๊ฐ ์ฐ๋ฝ์ฒ์ ์ด๋ฆ์ ๋ฐํํฉ๋๋ค.)'
'of each related(๊ด๋ จ๋ ๊ฐ)'์ด๋ผ๋ ๋ถ๋ถ์์ ๊ด๊ณ ์ฟผ๋ฆฌ๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. Contact(์ฐ๋ฝ์ฒ)๊ฐ Account(๊ณ์ )์ ํ์ ์์์ด๋ฏ๋ก ํ์ ๊ฐ์ฒด์ ๋ณด์กฐ ์ฟผ๋ฆฌ๋ฅผ ํฌํจํ๋ ์์-ํ์ ๊ด๊ณ ์ฟผ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.

์๊ตฌ ์ฌํญ์ ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ธ 'For every account, return the account name'์ด ๊ธฐ๋ณธ ์ฟผ๋ฆฌ๊ฐ ๋์ด ์ ์ฒด ์ฟผ๋ฆฌ์ ๋ฐ๊นฅ ๋ถ๋ถ์ ๊ตฌ์ฑํฉ๋๋ค. ์๊ตฌ ์ฌํญ์ ๋ ๋ฒ์งธ ๋ถ๋ถ์ธ 'the name of each related contact'๊ฐ ๊ธฐ๋ณธ ์ฟผ๋ฆฌ ๋ด์ ์ค์ฒฉ๋ ์์ชฝ ์ฟผ๋ฆฌ์ธ ๋ณด์กฐ ์ฟผ๋ฆฌ๊ฐ ๋ฉ๋๋ค.
์ฐ์ ๊ธฐ๋ณธ ์ฟผ๋ฆฌ๋ฅผ ์ ์ํฉ๋๋ค. SELECT Name FROM Account
๋ค์์ผ๋ก ๊ดํธ ์์ ๋ณด์กฐ ์ฟผ๋ฆฌ๋ฅผ ์ ์ํฉ๋๋ค. (SELECT Name FROM Contact)
๊ทธ๋ฐ ๋ค์ ๊ธฐ๋ณธ ์ฟผ๋ฆฌ์ ๋ ๋ฒ์งธ ํ๋์ธ ๊ฒ์ฒ๋ผ ๋ณด์กฐ ์ฟผ๋ฆฌ๋ฅผ ๋ฐฐ์นํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด Name ๋ค์ ์ผํ๋ฅผ ์ถ๊ฐํ๊ณ ๋ณด์กฐ ์ฟผ๋ฆฌ๋ฅผ ์ฝ์ ํฉ๋๋ค.

๋ณด์กฐ ์ฟผ๋ฆฌ ๋ด์์ ๊ด๋ จ ๊ฐ์ฒด์ ํ๋ ์ด๋ฆ ๋์ ํ์ ๊ด๊ณ ์ด๋ฆ์ ์ฌ์ฉํฉ๋๋ค. ๋ง์ง๋ง ๋จ๊ณ์์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ฒด ์ด๋ฆ์ธ Contact๋ฅผ ํ์ ๊ด๊ณ ์ด๋ฆ์ธ Contacts๋ก ๋ฐ๊ฟ๋๋ค.

์ด ์ฟผ๋ฆฌ๋ ๋ชจ๋ ๊ณ์ ์ ๊ณ์ ์ด๋ฆ๊ณผ ๋ชจ๋ ์ฐ๋ฝ์ฒ ์ด๋ฆ์ ๋ฐํํฉ๋๋ค. ์ธ๋ถ์ ์ผ๋ก ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ด ์ฟผ๋ฆฌ๋ ์ธ ๋ถ๋ถ์ผ๋ก ์คํ๋ฉ๋๋ค.
- ์ฟผ๋ฆฌ๊ฐ ๊ณ์ ์ ์ ํํ๊ณ ๊ณ์ Name(์ด๋ฆ) ํ๋๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ์ด๊ฒ์ด ๊ธฐ๋ณธ ์ฟผ๋ฆฌ(๋ฐ๊นฅ์ชฝ ์ฟผ๋ฆฌ)๊ฐ ๋ฉ๋๋ค.
- ๊ทธ๋ฐ ๋ค์, ์ฟผ๋ฆฌ๊ฐ ๊ณ์ ์ ๊ด๋ จ ์ฐ๋ฝ์ฒ๋ฅผ ์กฐํํ๊ณ ๊ฐ๊ฐ์ ๋ํ Name(์ด๋ฆ) ํ๋๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ์ด๊ฒ์ด ๋ณด์กฐ ์ฟผ๋ฆฌ(์์ชฝ ์ฟผ๋ฆฌ)๊ฐ ๋ฉ๋๋ค.
- ๊ทธ๋ฌ๋ฉด ๋ค์ ๊ณ์ ์ผ๋ก ์ด๋ํ๊ณ ๋ชจ๋ ๊ณ์ ์ ์ ํํ ๋๊น์ง ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค.
์์-ํ์ ์ฟผ๋ฆฌ ์คํ
- ์ฟผ๋ฆฌ ํธ์ง๊ธฐ์์ ๋ค์์ ์
๋ ฅํฉ๋๋ค.
SELECT Name, (SELECT Name FROM Contacts) FROM Account
-
Execute(์คํ)๋ฅผ ํด๋ฆญํฉ๋๋ค.
๊ฒฐ๊ณผ์ ์ฒซ ์ฌ์ฏ ๊ฐ ํ์ด ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค.
์ฟผ๋ฆฌ ๊ฒฐ๊ณผ - ์ด ํ ์: 12 | |
|---|---|
์ด๋ฆ |
์ฐ๋ฝ์ฒ |
Edge Communications |
[{"Name":"Rose Gonzalez"},{"Name":"Sean Forbes"}] |
Burlington Textiles Corp of America |
[{"Name":"Jack Rogers"}] |
|
[{"Name":"Pat Stumuller"}] |
Dickenson plc |
[{"Name":"Andy Young"}] |
Grand Hotels & Resorts Ltd |
[{"Name":"John Bond"},{"Name":"Tim Barr"}] |
|
[{"Name":"Arthur Song"},{"Name":"Avi Green"},{"Name":"Lauren Boyle"},{"Name":"Stella Pavlova"}] |
ํฅ๋ฏธ๋กญ๋ค์! Query Results(์ฟผ๋ฆฌ ๊ฒฐ๊ณผ) ์ฐฝ์ ๊ณ์ ์ด๋ฆ๊ณผ ๊ฐ ๊ณ์ ์ ์ฐ๊ฒฐ๋ ํ์ ์ฐ๋ฝ์ฒ ๋ ์ฝ๋ ์ปฌ๋ ์ ์ด ํ์๋ฉ๋๋ค. ์ด๋ฌํ ์ปฌ๋ ์ ์ ํ์ ๊ด๋ฆฌ์๋ฅผ ์ํ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋์์ ๋งต์ ์ดํด๋ดค๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ ์ต์ํ์ค ๊ฒ์ ๋๋ค.
๋งต์ ๋ํด ๊ธฐ์ตํ์ง ๋ชปํ์ ๋ ๊ด์ฐฎ์ต๋๋ค. ๋ค์ ํ์ธํด ๋ณผ๊ฒ์. ๋งต ์ปฌ๋ ์ ์ ์ผํ๋ก ๊ตฌ๋ถ๋ ํค-๊ฐ ์์ ํฌํจํฉ๋๋ค. ํค๋ Name(์ด๋ฆ)๊ณผ ๊ฐ์ ํ๋ ์ด๋ฆ์ ๋๋ค. ํค ๋ค์๋ Jake Llorrac ๋ฑ์ ๊ฐ์ด ๋ถ์ต๋๋ค. ํค ๊ฐ ์์ ๊ณ์ ๊ณผ ๊ด๋ จ๋ ์ฐ๋ฝ์ฒ๋ฅผ ์ฟผ๋ฆฌํ๋ ์ค์ฒฉ๋ SELECT ๋ฌธ์ ์ํด ๋ฐํ๋ฉ๋๋ค.
๋ณด์กฐ ์ฟผ๋ฆฌ๋ก ํํฐ๋งํ๊ธฐ
์ฑ์ด Forbes์ธ ๊ด๋ จ ์ฐ๋ฝ์ฒ๋ฅผ ๊ฐ์ง ๊ณ์ ๋ง ์ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๊ฒฝ์ฐ ํ์ ๊ฐ์ฒด์ธ Contact(์ฐ๋ฝ์ฒ)์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์์ ๊ฐ์ฒด์ธ Account(๊ณ์ )๋ฅผ ํํฐ๋งํด์ผ ํ๋ฏ๋ก ์์ ์ด ๊น๋ค๋กญ์ต๋๋ค. ๊ธฐ๋ณธ ์ฟผ๋ฆฌ ๋ด์ ๋ณด์กฐ ์ฟผ๋ฆฌ๋ฅผ ์ค์ฒฉํ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ธฐ๋ณธ ์ฟผ๋ฆฌ์ WHERE ์ ์์ (ํ์ ๊ฐ์ฒด์) ๋ณด์กฐ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ณด์กฐ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ ๊ธฐ๋ณธ ์ฟผ๋ฆฌ์ ํํฐ์ ๊ฐ์ ์ญํ ์ ํฉ๋๋ค. ๊ต์ฐจ ํํฐ์ ์ต์ํ๋ค๋ฉด ๋ณด์กฐ ์ฟผ๋ฆฌ์ WHERE ์ ์ ์ถ๊ฐํ๋ ๊ฒ์ ๋ณด๊ณ ์์์ ๊ต์ฐจ ํํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
๊ธฐ์กด ์ฟผ๋ฆฌ๋ถํฐ ์์ํฉ๋๋ค.
SELECT Name, (SELECT Name FROM Contacts) FROM Account
๊ทธ๋ฐ ๋ค์ Forbes๋ผ๋ ์ฑ์ ๊ฐ์ง ์ฐ๋ฝ์ฒ์์ AccountId ํ๋๋ฅผ ๊ฐ์ ธ์ค๋ ๋ณด์กฐ ์ฟผ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
(SELECT AccountId FROM Contact WHERE LastName = 'Forbes')
์ ์ฐ๋ฝ์ฒ์ AccountId ํ๋๊ฐ ํ์ํ์ง ๊ถ๊ธํดํ์ค ์ ์์ต๋๋ค. ์ฐ๋ฝ์ฒ์ AccountId ํ๋๋ฅผ ํ์ธํ์ฌ ๊ณ์ ๊ณผ ๊ด๋ จ๋ ์ฐ๋ฝ์ฒ๋ฅผ ์ฐพ์ต๋๋ค. Contact ๊ฐ์ฒด์ AccountId ํ๋์ Account ๊ฐ์ฒด์ Id ํ๋๊ฐ ๋์ผํ ๊ฐ(Contact.AccountId = Account.Id)์ ๊ฐ๋๋ค๋ฉด ์ฐ๋ฝ์ฒ๊ฐ ๊ณ์ ๊ณผ ๊ด๋ จ์ด ์๋ ๊ฒ์
๋๋ค. ๋ฐ๋ผ์ Contact ๊ฐ์ฒด๋ฅผ ์ฟผ๋ฆฌํ๋ฉด ํด๋น AccountId ๊ฐ์ด ๋ฐํ๋ฉ๋๋ค. ์ฐ๋ฝ์ฒ์ ๊ด๋ จ๋ ๊ณ์ ์ ์ ํํ๋ ค๋ฉด Id ํ๋์์ ํด๋น ๊ฐ์ ๊ฐ๋ ๊ณ์ ์ ์ฐพ์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ๊ธฐ๋ณธ ์ฟผ๋ฆฌ์ WHERE ์ ์ ์ถ๊ฐํฉ๋๋ค. ๋ณด์กฐ ์ฟผ๋ฆฌ์ ์ํด ๋ฐํ๋ Contact์ AccountId ํ๋์ Id๊ฐ ์๋ ๊ฒฝ์ฐ์๋ง Account ๋ ์ฝ๋๋ฅผ ์ ํํ๋ ค๊ณ ํฉ๋๋ค. ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด WHERE Id IN ๋ค์ ๋ณด์กฐ ์ฟผ๋ฆฌ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
SELECT Name, (SELECT Name FROM Contacts) FROM Account WHERE Id IN (SELECT AccountId FROM Contact WHERE LastName = 'Forbes')
์ด ์ฟผ๋ฆฌ๋ 4๊ฐ์ง ์์ ์ ์คํํฉ๋๋ค.
- ์ฟผ๋ฆฌ๊ฐ ์ฑ์ด Forbes์ธ ์ฐ๋ฝ์ฒ๋ฅผ ์ฐพ๊ณ ๊ฐ ์ฐ๋ฝ์ฒ์ AccountId ํ๋ ๊ฐ์ ๋ฐํํฉ๋๋ค. (WHERE ์ ๋ณด์กฐ ์ฟผ๋ฆฌ๊ฐ ์ด๋ฅผ ์คํํฉ๋๋ค.)
- ๋ค์์ผ๋ก ๊ณ์ ์ Id ํ๋์์ ํด๋น AccountId ๊ฐ์ ์ฐพ๊ณ ํด๋น ๊ณ์ ์ ์ด๋ฆ์ ๊ฐ์ ธ์ต๋๋ค. (๊ธฐ๋ณธ WHERE ์ ์ด ์ด๋ฅผ ์คํํฉ๋๋ค.)
- ๊ทธ๋ฐ ๋ค์ ์ฟผ๋ฆฌ๊ฐ ๊ณ์ ์ ๊ด๋ จ ์ฐ๋ฝ์ฒ๋ฅผ ์กฐํํ๊ณ ๊ฐ ์ฐ๋ฝ์ฒ์ ์ด๋ฆ์ ๊ฐ์ ธ์ต๋๋ค. (๊ธฐ๋ณธ ์ฟผ๋ฆฌ์ ๋ณด์กฐ ์ฟผ๋ฆฌ๊ฐ ์ด๋ฅผ ์คํํฉ๋๋ค.)
- ๋ง์ง๋ง์ผ๋ก ๊ธฐ๋ณธ ์ฟผ๋ฆฌ๊ฐ ์ฑ์ด Forbes์ธ ๊ด๋ จ ์ฐ๋ฝ์ฒ๋ฅผ ๊ฐ์ง ๊ฐ ๊ณ์ ์ ์ด๋ฆ๊ณผ ๊ฐ ๊ณ์ ์ ๋ํ ๋ชจ๋ ๊ด๋ จ ์ฐ๋ฝ์ฒ์ ์ด๋ฆ์ ๋ฐํํฉ๋๋ค.
ํํฐ๋ง๋ ์ฟผ๋ฆฌ ์คํ
- ์ฟผ๋ฆฌ ํธ์ง๊ธฐ์์ ๋ค์์ ์
๋ ฅํฉ๋๋ค.
SELECT Name, (SELECT Name FROM Contacts) FROM Account WHERE Id IN (SELECT AccountId FROM Contact WHERE LastName = 'Forbes')
-
Execute(์คํ)๋ฅผ ํด๋ฆญํฉ๋๋ค.
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค.

์์ฝ
์ง๊ธ๊น์ง ํ์ค ๊ฐ์ฒด์ ๋ํด ์ฌ๋ฐ๋ฅธ ์ ํ์ ๊ด๊ณ ์ฟผ๋ฆฌ๋ฅผ ์ ํํ๊ณ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ดค์ต๋๋ค. ๋ค์ ์ ๋์์๋ ์ฌ์ฉ์ ์ ์ ๊ฐ์ฒด์ ๊ด๊ณ ์ฟผ๋ฆฌ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
๋ฆฌ์์ค
- Salesforce ๊ฐ๋ฐ์ ๋ฌธ์: ๊ด๊ณ ์ด๋ฆ ์ดํด
- Salesforce ๊ฐ๋ฐ์ ๋ฌธ์: ๊ด๊ณ ์ฟผ๋ฆฌ ์ฌ์ฉ
- Salesforce ๋์๋ง: SOQL ์ฟผ๋ฆฌ์์ 5๊ฐ์ง ์์ค์ ์์-ํ์ ๊ด๊ณ ์ฟผ๋ฆฌ
- Salesforce ๊ฐ๋ฐ์: ๊ฒ์ ์ฟผ๋ฆฌ์ ๋ํ SOQL ๋ฐ SOSL ์ ํ
