Ad Code

✨🎆 JOIN MERN, JAVA, PYTHON, AI, DEVOPS, SALESFORCE Courses 🎆✨

Get 100% Placement Oriented Program CLICK to new more info click

APEX Introduction

 APEX Introduction

It is Object oriented programming language that is used to provide custom code to create business logic and database operation.


Key Points

  • Similar to Java and C#

  • Runs on Salesforce server (cloud)

  • Used for automation, validation, integration


APEX is also used to create salesforce triggers that will work automatically , before and after database operation(Insert, Update, Delete).

Apex provide SOQL and SOSL to manage database operation.

2. Apex Syntax and Data Types

Primitive Data Types

  • Integer

  • Double

  • Boolean

  • String

  • Date

  • Datetime

Integer num = 10;

String name = 'Shiva';

Boolean isActive = true;

Date today = Date.today();

Operator in APEX:


In Apex, operators are symbols used to perform operations on variables and values. They are similar to operators in Java because Apex syntax is based on Java.


1. Arithmetic Operators

Used for mathematical calculations.

Operator Description Example

+ Addition a + b

- Subtraction a - b

* Multiplication a * b

/ Division a / b

% Modulus (remainder) a % b

2. Relational (Comparison) Operators

Used to compare two values. They return true or false.


Operator Meaning

== Equal to

!= Not equal to

> Greater than

< Less than

>= Greater than or equal

<= Less than or equal


Example


Integer a = 10;

Integer b = 5;


System.debug(a > b);   // true

System.debug(a == b);  // false

3. Logical Operators


Used to combine multiple conditions.


Operator Meaning

&& AND

`

! NOT


Example


Integer age = 20;


if(age > 18 && age < 60){

    System.debug('Eligible');

}

4. Assignment Operators


Used to assign values.


Operator Example

= a = 10

+= a += 5

-= a -= 3

*= a *= 2

/= a /= 2


Example


Integer a = 10;

a += 5;   // a = 15

5. Conditional (Ternary) Operator


Short form of if-else.


Syntax


condition ? value_if_true : value_if_false;


Example


Integer marks = 40;


String result = (marks >= 35) ? 'Pass' : 'Fail';

System.debug(result);

6. InstanceOf Operator


Used to check object type.


Example


Object obj = 'Hello';


if(obj instanceof String){

    System.debug('It is a String');

}


Conditional Statement in APEX:

1. If–Else in Apex


if-else is used when you want to execute code based on a condition.

Syntax

if(condition){

    // code if condition is true

}

else{

    // code if condition is false

}

Example

Integer marks = 70;


if(marks >= 35){

    System.debug('Student Passed');

}

else{

    System.debug('Student Failed');

}

Multiple Conditions (Else If)

Integer marks = 85;


if(marks >= 75){

    System.debug('Grade A');

}

else if(marks >= 60){

    System.debug('Grade B');

}

else{

    System.debug('Grade C');

}

2. Switch–Case in Apex


switch is used when you have multiple possible values of one variable.


⚠️ Available in newer versions of Apex.


Syntax

switch on variable {

    when value1 {

        // code

    }

    when value2 {

        // code

    }

    when else {

        // default code

    }

}

Example

String day = 'Monday';


switch on day {

    when 'Monday' {

        System.debug('Start of week');

    }

    when 'Friday' {

        System.debug('Weekend coming');

    }

    when else {

        System.debug('Normal day');

    }

}

3. Switch with Multiple Values

Integer number = 2;


switch on number {

    when 1,2,3 {

        System.debug('Small number');

    }

    when 4,5 {

        System.debug('Medium number');

    }

    when else {

        System.debug('Large number');

    }

}

Loop in APEX:

loops are used to execute a block of code repeatedly until a condition is met. They are very similar to loops in Java.

Apex mainly supports 4 types of loops.

1. For Loop

Used when the number of iterations is known.


Syntax

for(initialization; condition; increment/decrement){

    // code

}

Example

for(Integer i = 1; i <= 5; i++){

    System.debug('Number: ' + i);

}


Output:


Number: 1

Number: 2

Number: 3

Number: 4

Number: 5

2. While Loop


Runs as long as the condition is true.


Syntax

while(condition){

    // code

}

Example

Integer i = 1;


while(i <= 5){

    System.debug('Value: ' + i);

    i++;

}

3. Do-While Loop


Executes at least once, then checks the condition.


Syntax

do{

   // code

}

while(condition);

Example

Integer i = 1;


do{

    System.debug('Count: ' + i);

    i++;

}

while(i <= 5);

4. For-Each Loop (Used with Collections)


Used to loop through lists or sets.


Example

List<String> names = new List<String>{'Ram','Shyam','Mohan'};


for(String name : names){

    System.debug(name);

}


📘 Apex Arrays & Collections – Complete Tutorial


1. Introduction

In Apex, data structures are very important because Salesforce apps often deal with records, lists, and sets of data. Apex provides Collections to store and manipulate groups of values or objects.

👉 Collections in Apex:

  1. List (like an Array in Java/C#)

  2. Set

  3. Map

⚡ Note: Unlike Java/C#, there is no fixed-length array in Apex. Instead, List<T> is used as a dynamic array.


2. Arrays in Apex (List<T>)

What is an Array?

An Array (or List) is an ordered collection of elements, indexed starting at 0. You can store primitive types (Integer, String, Boolean), sObjects (Account, Contact, etc.), or custom objects inside it.


Syntax:

List<DataType> listName = new List<DataType>();

Example with Integers:

List<Integer> numbers = new List<Integer>(); numbers.add(10); numbers.add(20); numbers.add(30); System.debug('Array Elements: ' + numbers); System.debug('First element: ' + numbers[0]);

Output

Array Elements: (10, 20, 30) First element: 10

Shortcut Declaration:

List<String> fruits = new List<String>{'Apple','Banana','Mango'}; System.debug(fruits);

Important Methods in List:

MethodDescriptionExample
add(value)Add elementlist.add(50);
add(index,value)Insert at positionlist.add(1,100);
get(index)Get elementlist.get(0);
set(index,value)Replace elementlist.set(1,200);
size()Number of elementslist.size();
isEmpty()Checks if emptylist.isEmpty();
remove(index)Remove elementlist.remove(0);
clear()Remove alllist.clear();
contains(value)Check existencelist.contains('Mango');
clone()Copy listList<String> copy = fruits.clone();

List of sObjects Example:

List<Account> accList = new List<Account>(); // Adding Account records accList.add(new Account(Name='Google')); accList.add(new Account(Name='Amazon')); accList.add(new Account(Name='Microsoft')); insert accList; // Save into Salesforce DB System.debug('Accounts Inserted: ' + accList);

3. Set in Apex

What is Set?

  • Unordered collection of unique elements.

  • Prevents duplicates.

  • Useful in scenarios like removing duplicate IDs, filtering data, etc.

Example:

Set<String> cities = new Set<String>(); cities.add('Indore'); cities.add('Delhi'); cities.add('Indore'); // Duplicate not allowed System.debug(cities); // Output: {Indore, Delhi}

Important Methods:

  • add(value)

  • addAll(list/set)

  • remove(value)

  • contains(value)

  • size()

  • isEmpty()

  • clear()


4. Map in Apex

What is Map?

  • A key-value pair collection.

  • Keys are unique, values can be duplicate.

  • Think of it like a dictionary in Python or HashMap in Java.

Example:

Map<Integer, String> studentMap = new Map<Integer, String>(); studentMap.put(1, 'Rahul'); studentMap.put(2, 'Sneha'); studentMap.put(3, 'Amit'); System.debug(studentMap.get(2)); // Output: Sneha

Map with sObjects:

// Map Account Id with Name Map<Id, String> accMap = new Map<Id, String>(); for(Account acc : [SELECT Id, Name FROM Account LIMIT 5]){ accMap.put(acc.Id, acc.Name); } System.debug('Account Map: ' + accMap);

5. Real-Time Example (Mixing Collections)

👉 Scenario: You want to fetch all Contacts of Accounts and organize them.

// Step 1: Get Accounts List<Account> accList = [SELECT Id, Name FROM Account LIMIT 3]; // Step 2: Store Account IDs in a Set Set<Id> accIds = new Set<Id>(); for(Account acc : accList){ accIds.add(acc.Id); } // Step 3: Query related Contacts using IN List<Contact> conList = [SELECT Id, Name, AccountId FROM Contact WHERE AccountId IN :accIds]; // Step 4: Organize in a Map Map<Id, List<Contact>> accToConMap = new Map<Id, List<Contact>>(); for(Contact con : conList){ if(!accToConMap.containsKey(con.AccountId)){ accToConMap.put(con.AccountId, new List<Contact>()); } accToConMap.get(con.AccountId).add(con); } System.debug(accToConMap);



1. Class in Apex

Definition

A Class in Apex is a blueprint or template used to create objects. It contains variables (properties) and methods (functions) that define the behavior of an object.

A class groups related logic together and helps in modular, reusable, and maintainable code.

Syntax

public class ClassName {

// Variables
// Methods

}

Example

public class Student {

public String name;
public Integer age;

public void display(){
System.debug(name);
System.debug(age);
}
}

Why We Use Class

  • Code reusability
  • Maintainability
  • Structured programming
  • Encapsulation of logic

2. Object in Apex

Definition

An Object is an instance of a class.
It is used to access class properties and methods.

When we create an object, memory is allocated and the class becomes usable.

Syntax

ClassName objectName = new ClassName();

Example

Student s = new Student();

s.name = 'Shiva';
s.age = 25;

s.display();

Explanation

  • Student → Class
  • s → Object
  • new → Keyword to create object

3. Encapsulation

Definition

Encapsulation is the process of wrapping data (variables) and methods together into a single unit and restricting direct access to some components.

Encapsulation improves:

  • Security
  • Data hiding
  • Code maintainability

Encapsulation is achieved using:

  • private
  • public
  • protected
  • global

Example

public class Employee {

private Integer salary;

public void setSalary(Integer sal){
salary = sal;
}

public Integer getSalary(){
return salary;
}
}

Usage

Employee emp = new Employee();

emp.setSalary(50000);

System.debug(emp.getSalary());

Why Encapsulation?

  • Protect sensitive data
  • Prevent direct modification
  • Better control

4. Abstraction

Definition

Abstraction is the process of hiding implementation details and showing only essential functionality.

Apex supports abstraction using:

  • Abstract Class
  • Interface

Abstract Class

Definition

An Abstract class is a class that cannot be instantiated and may contain:

  • Abstract methods (without body)
  • Non-abstract methods (with body)

Abstract class must be inherited.


Example

public abstract class Animal {

public abstract void sound();

public void eat(){
System.debug('Animal eating');
}
}

Child Class

public class Dog extends Animal {

public override void sound(){
System.debug('Dog Bark');
}
}

Usage

Dog d = new Dog();
d.sound();
d.eat();

5. Interface

Definition

An Interface is a collection of abstract methods.
It contains only method declaration, no implementation.

Class must implement interface.


Example

public interface Animal {

void sound();
}

Implement Interface

public class Dog implements Animal {

public void sound(){
System.debug('Dog bark');
}
}

6. Inheritance

Definition

Inheritance is the process where child class acquires properties and methods of parent class.

Apex supports:

  • Single inheritance only

Keyword used:

extends

Example

Parent Class

public class Parent {

public void show(){
System.debug('Parent Class');
}
}

Child Class

public class Child extends Parent {

public void display(){
System.debug('Child Class');
}
}

Usage

Child c = new Child();

c.show();
c.display();

7. Polymorphism

Definition

Polymorphism means one method behaving differently in different situations.

Types:

  1. Method Overloading
  2. Method Overriding

Method Overloading

Definition

Same method name but different parameters

Example

public class Calculator {

public Integer add(Integer a,Integer b){
return a + b;
}

public Integer add(Integer a,Integer b,Integer c){
return a + b + c;
}
}

Method Overriding

Definition

Child class redefines parent class method

Example

Parent Class

public virtual class Animal {

public virtual void sound(){
System.debug('Animal sound');
}
}

Child Class

public class Dog extends Animal {

public override void sound(){
System.debug('Dog bark');
}
}

8. Constructor

Definition

Constructor is a special method that executes automatically when object is created.

Used for:

  • Initialization
  • Setting default values

Default Constructor

public class Student {

public Student(){
System.debug('Constructor Called');
}
}

Parameterized Constructor

public class Student {

public String name;

public Student(String n){
name = n;
}
}

Usage

Student s = new Student('Shiva');

9. Static Keyword

Definition

Static variables belong to class instead of object

Static method can be called without object


Example

public class Test {

public static Integer count = 0;

public Test(){
count++;
}
}

Usage

Test t1 = new Test();
Test t2 = new Test();

System.debug(Test.count);

10. Final Keyword

Definition

Final keyword prevents:

  • Method overriding
  • Variable modification

Example

public class Parent {

public final void show(){
System.debug('Final method');
}
}

11. Virtual Keyword

Definition

Virtual allows method overriding

Example

public virtual class Parent {

public virtual void show(){
System.debug('Parent');
}
}

12. Access Modifiers

Definition

Access modifiers control visibility of class, variables, methods

ModifierAccess
privateWithin class
publicWithin org
protectedChild class
globalOutside org

Apex Asynchronous Examples

In Salesforce, you can write async code in 4 main ways: Future Methods (@future) Batch Apex Queueable Apex
Scheduled Apex 1️⃣ Future Methods – Simple Async Execution Used when you want to run logic in background (e.g., callouts, heavy operations). Example: public class FutureExample { @future public static void sendEmailAsync(String email) { // Mock email sending System.debug('Sending email to: ' + email); } } // Usage from trigger or class FutureExample.sendEmailAsync('student@test.com'); ⚡ Notes: Must be static and void. Accepts only primitive parameters (Id, String, Boolean, etc.). Runs in its own execution thread. 2️⃣ Batch Apex – Process Large Records Used when you need to process millions of records in chunks. Example: global class BatchAccountUpdate implements Database.Batchable<SObject> { global Database.QueryLocator start(Database.BatchableContext bc) { return Database.getQueryLocator('SELECT Id, Name FROM Account'); } global void execute(Database.BatchableContext bc, List<Account> scope) { for(Account acc : scope){ acc.Name = acc.Name + ' - Updated'; } update scope; } global void finish(Database.BatchableContext bc) { System.debug('Batch Completed'); } } // Execute from Anonymous Window BatchAccountUpdate b = new BatchAccountUpdate(); Database.executeBatch(b, 100); // Batch size = 100 ⚡ Notes: start() → fetch records. execute() → logic on each batch. finish() → final action after completion. 3️⃣ Queueable Apex – Advanced Async with Chaining More flexible than @future. You can pass complex types and chain jobs. Example: public class QueueableExample implements Queueable { public void execute(QueueableContext context) { List<Contact> conList = [SELECT Id, LastName FROM Contact LIMIT 10]; for(Contact con : conList){ con.LastName = con.LastName + '_Updated'; } update conList; } } // Execute ID jobId = System.enqueueJob(new QueueableExample()); System.debug('Job ID: ' + jobId); ⚡ Notes: Supports non-primitive params. You can chain jobs like: System.enqueueJob(new QueueableExample()); 4️⃣ Scheduled Apex – Run on Timetable Used for cron jobs (e.g., nightly updates, weekly cleanups). Example: global class ScheduleExample implements Schedulable { global void execute(SchedulableContext sc) { System.debug('Scheduled Job Running...'); } } // Schedule via Setup → Apex Classes → Schedule Apex // OR via code: String cron = '0 0 22 * * ?'; // Every day at 10 PM System.schedule('Nightly Job', cron, new ScheduleExample()); ⚡ Cron Expression Format: Seconds Minutes Hours Day_of_month Month Day_of_week Year(optional) ✅ When to Use What? @future → Quick async, callouts, lightweight jobs. Queueable → Advanced async, chaining, complex params. Batch → Bulk data (millions of records). Schedule → Timed jobs (daily/weekly).

SOQL means salesforce Object Query Language and SOSL means salesforce  object search language,

APEX language syntax is similar to Java programming language, it will compile and execute code using Apex cloud compiler.

Salesforce provide developer option to create APEX class and execute option to execute APEX Code.

Syntax of Apex

public class Classname{

   public static retuntype Methodname() {

  }

  public retuntype Methodname() {

  }

}

Execute Apex code:-


Classname ref = new Classname();

ref.methodname();


Static method means it will store data under class memory that's why it would be call by Classname.

Instance Method means dynamic, it will store data under external memory space that's why first we create memory space using object after that we can call method.

to create dynamic memory space, we will create object.

Classname ref = new Classname();  // it is the syntax object.


ref means address of object, new means memory allocation and Classname() is the constructor that is used to create the memory space.


Now I am creating sample program to differentiate static and dynamic


public class Hello {

  public static void DisplayHello()

  {

      System.debug('hello world');

  }

  public void DisplayHello1()

  {

      System.debug('welcome in salesforce');

  }

}


Press Ctrl + e to open execute window and write followings code.

Hello.DisplayHello();

Hello obj = new Hello();

obj.DisplayHello1();

Now i am creating another program to perform addition and subtraction in APEX class, where addition method is static and subtraction method is dynamic.

Solution:-


public class Operation {

static integer a,b,c;

integer x,y,z;

public static void add()

{

    a=100;

    b=200;

    c=a+b;

    System.debug('result is '+c);

}

public void sub()

{

    x=100;

    y=200;

    z=x-y;

    System.debug('result is '+z);

}

}


Execute this program:-

Operation.add();

Operation obj = new Operation();

obj.sub();


Assignment:-

1)  Manage Employee Information with empid, empname, job, salary, joingdate, experience, dateofbirth with respective data type.

public class Employee {

private integer empid;

private string empname;

private string job;

private integer salary;

private double experience;

private date dob;

private date joiningdate;


public void Accept(integer empid,string empname,string job,integer salary,double experience,date dob,date joiningdate)

{

    this.empid=empid;

    this.empname=empname;

    this.job=job;

    this.salary=salary;

    this.experience=experience;

    this.dob=dob;

    this.joiningdate=joiningdate;

}


public void Display()

{

    System.debug('empid is '+empid + ' name is '+empname + ' job is '+job + 'salary is '+salary + 'experience is '+experience + ' dob is '+dob + ' Joining date is '+ joiningdate);

}

    

}


How to call it:-


Employee obj = new Employee();

obj.Accept(1001,'emp1','cleark',45000,2.5d,date.valueOf('1992-12-12'),date.valueOf('1992-12-12'));

obj.Display();


2)  Calculate Simple Interest using APEX Class

3)  WAP to swap two different numbers?

SOSL Query:


🔹 1️⃣ Search by Exact Keyword in All Fields

FIND 'Lucknow' IN ALL FIELDS RETURNING Branch__c(Id, Name)

🔍 Searches for the word “Lucknow” anywhere in all searchable fields of Branch__c.


🔹 2️⃣ Search by Prefix (Wildcard at End)

FIND 'Acc*' IN NAME FIELDS RETURNING Account(Id, Name)

🔍 Finds all Accounts whose Name starts with “Acc” (like “Accenture”, “AccountPro”).


🔹 3️⃣ Search by Suffix (Wildcard at Start)

FIND '*tech' IN ALL FIELDS RETURNING Account(Id, Name)

🔍 Finds records ending with “tech” (like “Innotech”, “Hightech”).


🔹 4️⃣ Search by Exact Phrase

FIND '"Sales Manager"' IN ALL FIELDS RETURNING Contact(Id, Name, Title)

🔍 Finds Contacts whose Title or other text fields contain the exact phrase “Sales Manager”.


🔹 5️⃣ Search Using Logical Operators

FIND 'Developer OR Tester' IN ALL FIELDS RETURNING Employee__c(Id, Name, Role__c)

🔍 Returns all employees who have either “Developer” or “Tester” in searchable fields.


🔹 6️⃣ Search Across Multiple Objects

FIND 'Delhi' IN ALL FIELDS RETURNING Branch__c(Id, Name), Account(Id, Name), Contact(Id, FirstName, LastName)

🔍 Searches Delhi in Branch__c, Account, and Contact — all at once.


🔹 7️⃣ Limit and Order Results

FIND 'Salesforce' IN ALL FIELDS RETURNING Course__c(Id, Name ORDER BY Name LIMIT 5), Student__c(Id, Name LIMIT 3)

🔍 Returns top 5 matching courses and top 3 students.


🔹 8️⃣ Use SOSL with Apex Variable (Bind Variable)

String searchKey = 'Python'; List<List<SObject>> results = [ FIND :searchKey IN ALL FIELDS RETURNING Course__c(Id, Name, Duration__c) ];

String a='Lucknow'; List<List<SObject>> lst = [ FIND :a IN ALL FIELDS RETURNING Branch__c(Id, Name) ]; // Extract the list of Branch__c records from the SOSL result List<Branch__c> branchList = (List<Branch__c>) lst[0]; // Check if any records were found if (branchList.isEmpty()) { System.debug('⚠️ No branches found for Lucknow.'); } else { System.debug('✅ Branches found: ' + branchList.size()); // Loop through the results and display each record for (Branch__c branch : branchList) { System.debug('Branch Id: ' + branch.Id + ', Branch Name: ' + branch.Name); } }

🔍 Uses a dynamic variable searchKey in Apex.


🔹 9️⃣ Use Wildcard to Return “All” Records with Text

FIND '*' IN ALL FIELDS RETURNING Branch__c(Id, Name)

🔍 Returns all Branch__c records that contain any text in searchable fields.


🔹 🔟 Use FIND with Specific Field Scope

FIND 'john@example.com' IN EMAIL FIELDS RETURNING Contact(Id, FirstName, LastName, Email)

🔍 Searches only email fields for the given email address.


🧩 Bonus — Combined Example in Apex

List<List<SObject>> searchList = [ FIND 'Salesforce' IN ALL FIELDS RETURNING Course__c(Id, Name, Duration__c), Student__c(Id, Name, Email__c), Trainer__c(Id, Name, Expertise__c) ]; List<Course__c> courses = (List<Course__c>) searchList[0]; List<Student__c> students = (List<Student__c>) searchList[1]; List<Trainer__c> trainers = (List<Trainer__c>) searchList[2]; System.debug('Courses found: ' + courses.size()); System.debug('Students found: ' + students.size()); System.debug('Trainers found: ' + trainers.size());

String a='Lucknow'; List<List<SObject>> lst = [ FIND :a IN ALL FIELDS RETURNING Branch__c(Id, Name),Course__c(Id,Name) ]; // Extract the list of Branch__c records from the SOSL result List<Branch__c> branchList = (List<Branch__c>) lst[0]; List<Course__c> cList = (List<Course__c>) lst[1]; // Check if any records were found if (branchList.isEmpty()) { System.debug('⚠️ No branches found for Lucknow.'); } else { System.debug('✅ Branches found: ' + branchList.size() + ' Courses Found' + cList.size()); // Loop through the results and display each record for (Branch__c branch : branchList) { System.debug('Branch Id: ' + branch.Id + ', Branch Name: ' + branch.Name); } for (Course__c c : cList) { System.debug('Course Id: ' + c.Id + ', Course Name: ' + c.Name); } }


Salesforce SOQL — In-Depth Guide With Real Examples

SOQL (Salesforce Object Query Language) ka use Salesforce database se records retrieve karne ke liye hota hai.

Ye SQL jaisa hota hai but Salesforce Objects pe kaam karta hai.

Example:

SELECT Id, Name FROM Account

1. Basic SOQL Query

List<Account> accList = [SELECT Id, Name FROM Account];

for(Account acc : accList){
System.debug(acc.Name);
}

Use Case:

  • Account records fetch karna
  • Data display karna

2. WHERE Clause Example

List<Account> accList =
[SELECT Id, Name
FROM Account
WHERE Name = 'Shiva Tech'];

Multiple Condition:

List<Account> accList =
[SELECT Id, Name
FROM Account
WHERE Name = 'Shiva Tech'
AND Industry = 'IT'];

3. LIMIT Example

List<Account> accList =
[SELECT Id, Name
FROM Account
LIMIT 5];

Use Case:

  • Top records fetch karna
  • Performance improve karna

4. ORDER BY Example

List<Account> accList =
[SELECT Id, Name
FROM Account
ORDER BY Name ASC];

Descending:

ORDER BY Name DESC

5. LIKE Operator Example

List<Account> accList =
[SELECT Id, Name
FROM Account
WHERE Name LIKE 'Shiva%'];

Use Case:

  • Search functionality

6. IN Operator Example

List<Account> accList =
[SELECT Id, Name
FROM Account
WHERE Industry IN ('IT','Banking')];

7. Aggregate Query Example

Count:

Integer total =
[SELECT COUNT() FROM Account];

Sum Example:

AggregateResult[] result =
[SELECT SUM(AnnualRevenue) total
FROM Account];

System.debug(result[0].get('total'));

8. Parent to Child Relationship Query

Account → Contact

List<Account> accList =
[SELECT Id, Name,
(SELECT Id, Name FROM Contacts)
FROM Account];

for(Account acc : accList){

for(Contact con : acc.Contacts){
System.debug(con.Name);
}
}

Use Case:

  • Account ke contacts fetch karna

9. Child to Parent Relationship Query

Contact → Account

List<Contact> conList =
[SELECT Id, Name, Account.Name
FROM Contact];

for(Contact con : conList){
System.debug(con.Account.Name);
}

Use Case:

  • Contact ka Account fetch karna

10. Dynamic SOQL Example

String query = 'SELECT Id, Name FROM Account';

List<Account> accList = Database.query(query);

Dynamic WHERE:

String name = 'Shiva';

String query =
'SELECT Id, Name FROM Account WHERE Name = :name';

List<Account> accList = Database.query(query);

11. SOQL in Loop

for(Account acc : accList){

List<Contact> con =
[SELECT Id FROM Contact
WHERE AccountId = :acc.Id];
}

This causes Governor Limit Issue


Correct Approach 

Set<Id> accIds = new Set<Id>();

for(Account acc : accList){
accIds.add(acc.Id);
}

List<Contact> conList =
[SELECT Id, AccountId
FROM Contact
WHERE AccountId IN :accIds];

12. Real Time Example — Search Account

public class AccountController{

public static List<Account> searchAccount(String name){

return [SELECT Id, Name, Industry
FROM Account
WHERE Name LIKE :('%'+name+'%')];
}
}

13. SOQL With Date Example

List<Account> accList =
[SELECT Id, Name
FROM Account
WHERE CreatedDate = TODAY];

Other Date Filters:

  • TODAY
  • YESTERDAY
  • LAST_WEEK
  • LAST_MONTH

14. SOQL Governor Limits (Important 🚨)

LimitValue
SOQL Queries100
Records Returned50,000
Query Rows50,000

15. Best Practices

✅ Avoid SOQL inside loop
✅ Use selective fields
✅ Use LIMIT
✅ Use Relationship Queries
✅ Bulkify queries


Interview Questions

Q1: Difference between SOQL & SOSL

SOQL
→ One Object Query

SOSL
→ Multiple Object Search


Q2: Why avoid SOQL in loop?

Because:

  • Governor limit exceed
  • Performance issue

Real Project Example

Lead Assignment

List<Lead> leadList =
[SELECT Id, Name, Status
FROM Lead
WHERE Status = 'Open'];

for(Lead l : leadList){
l.Status = 'Working';
}

update leadList;

What is Group by & Having in SOQL:

Group By Clause:

it is used to logically subdivide the table data into multiple subgroup based on column.

group column  should not be primary and unique key because for grouping duplicate data is required.

in case of group we can select only group column or aggregate function.

Student
rno name coursename
1   st   java
2   st1  apex
3   st2  java
4   st4  apex
5   st5  js

.........................

I want to display coursenme and number of student.

select coursename,count(*) from student group by coursename;


having: it is used to apply condition after group by then we prefer Having clause

Get course which contains more than two students exclude java course.

select coursename,count(*) from student where coursename!=java group by coursename having count(*)>2;

Get course which contains more than two students exclude java course and display in asc order based on coursename.

select coursename,count(*) from student where coursename!=java group by coursename having count(*)>2 order by coursename;


Example in Apex:
List<AggregateResult> st =[Select coursename__c,count(Id) total 
                           from stugroup__c 
                           where coursename__c!='java' 
                           group by coursename__c
                           having count(Id)>=1
                           order by coursename__c desc];
for(AggregateResult o:st)
{
    System.debug(o.get('coursename__c') + ','+o.get('total'));
}



APEX Join:

APEX or SOQL not support SQL style join , because it provide relationship between objects without this salesforce not provide object implementation.

Salesforce has two relationship 
1) parent to child:

   We will use subquery to get child record from parent record.

e.g Account is the parent object and Contact is the child object , we can directly get data of contact under Account object.

List<Account> acc = [select Id,Name, (Select Id,Name from Contacts) from Account Limit 10];

for(Account o:acc)
{
   System.debug('Account info'+ o.Id + ','+o.Name);
   for(Contact c:o.Contacts)
   {
      System.debug('contact info' + c.Id + ','+c.Name);

   }
}





2) child to parent:

it is basically used to implement join operation from many to one relationship.


e.g we have Account and Contact object and we want to get data from contact object to account then we use this.

List<Contact> obj = [Select Id,Name, Account.Name from Contact];
for(Contact c:obj)
{
    System.debug(' Person Name' + c.Name + ' Account Name' + C.Account.Name);
}


🧠 


Quick Summary of Common Scopes

ScopeDescription
IN ALL FIELDSSearches all searchable fields
IN NAME FIELDSOnly in name-type fields (Account.Name, Contact.Name)
IN EMAIL FIELDSOnly email fields
IN PHONE FIELDSOnly phone fields
IN SIDEBAR FIELDSSame as global search scope

Read about What is Salesforce?




Post a Comment

0 Comments