SQL Server में CROSS APPLY और OUTER APPLY क्या होता है? (With 5 Real-time Examples)
SQL Server में `APPLY` का उपयोग तब किया जाता है जब हम main table के हर row के लिए एक sub-query या table-valued function चलाना चाहते हैं।
`CROSS APPLY` और `OUTER APPLY` दोनों powerful tools हैं, लेकिन दोनों में थोड़ा फर्क होता है।
📌 CROSS APPLY vs OUTER APPLY – Basic Difference
| Apply Type | काम कैसा करता है? | NULL Row Support |
|---|---|---|
| CROSS APPLY | INNER JOIN जैसा | ❌ NULL rows exclude |
| OUTER APPLY | LEFT JOIN जैसा | ✅ NULL rows include |
🎯 Example 1: Student-wise Exam Result Summary
Step 1: Students Table
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
StudentName NVARCHAR(100)
);
INSERT INTO Students VALUES
(1, 'Amit Sharma'),
(2, 'Priya Verma'),
(3, 'Suman Joshi'),
(4, 'Rahul Meena');
Step 2: ExamResults Table
CREATE TABLE ExamResults (
ResultID INT PRIMARY KEY,
StudentID INT,
Subject NVARCHAR(50),
Marks INT
);
INSERT INTO ExamResults VALUES
(1, 1, 'Math', 35),
(2, 1, 'English', 60),
(3, 2, 'Math', 40),
(4, 2, 'Science', 70),
(5, 2, 'History', 30),
(6, 4, 'Math', 45),
(7, 4, 'English', 25);
🧪 CROSS APPLY Query
SELECT
S.StudentName,
R.TotalExams,
R.Passed,
R.Failed
FROM Students S
CROSS APPLY (
SELECT
COUNT(*) AS TotalExams,
SUM(CASE WHEN Marks >= 40 THEN 1 ELSE 0 END) AS Passed,
SUM(CASE WHEN Marks < 40 THEN 1 ELSE 0 END) AS Failed
FROM ExamResults E
WHERE E.StudentID = S.StudentID
) R;
Output: केवल वही Students आएंगे जिनका Result है (Suman Joshi नहीं आएंगे)
---🎯 Example 2: Product-wise Last 2 Orders (Using CROSS APPLY)
SELECT P.ProductName, O.OrderDate, O.Quantity
FROM Products P
CROSS APPLY (
SELECT TOP 2 *
FROM Orders O
WHERE O.ProductID = P.ProductID
ORDER BY O.OrderDate DESC
) O;
---
🎯 Example 3: Employee-wise Current Address (OUTER APPLY)
SELECT
E.EmployeeName,
A.City,
A.State
FROM Employees E
OUTER APPLY (
SELECT TOP 1 *
FROM Addresses A
WHERE A.EmployeeID = E.EmployeeID
ORDER BY A.AddressID DESC
) A;
---
🎯 Example 4: Customer with Last Support Ticket (CROSS APPLY)
SELECT
C.CustomerName,
T.TicketTitle,
T.CreatedDate
FROM Customers C
CROSS APPLY (
SELECT TOP 1 *
FROM Tickets T
WHERE T.CustomerID = C.CustomerID
ORDER BY CreatedDate DESC
) T;
---
🎯 Example 5: Department-wise Highest Paid Employee (CROSS APPLY)
SELECT
D.DepartmentName,
E.EmployeeName,
E.Salary
FROM Departments D
CROSS APPLY (
SELECT TOP 1 *
FROM Employees E
WHERE E.DepartmentID = D.DepartmentID
ORDER BY E.Salary DESC
) E;
APPLY (CROSS APPLY / OUTER APPLY) का असली जलवा Subqueries और Top-N selections में ही नज़र आता है। नीचे मैं आपको पूरे detail में समझाता हूँ: कैसे APPLY Subqueries या Top-N selection को powerful बना देता है।
✅ क्यों APPLY ज़रूरी है Subqueries या Top-N में?
🔹 JOINs से Subqueries नहीं चला सकते जो correlated हों और row-wise काम करें।
Traditional INNER JOIN, LEFT JOIN सिर्फ static joins होते हैं।
लेकिन जब हम हर row के लिए dynamic data चाहिए — जैसे Top N records per row, या aggregates per row, तो वहाँ JOINs fail हो जाते हैं।
➡️ यही काम APPLY कर सकता है — वो भी efficiently और elegantly!
🔍 Real-Life Example: हर Customer के Top 1 Last Order की Details चाहिए
SELECT
C.CustomerName,
O.OrderID,
O.OrderDate,
O.TotalAmount
FROM Customers C
CROSS APPLY (
SELECT TOP 1 *
FROM Orders O
WHERE O.CustomerID = C.CustomerID
ORDER BY O.OrderDate DESC
) O
⛔ बिना APPLY के यह query JOIN से संभव नहीं होती क्योंकि आप एक row-per-customer चाहते हैं, लेकिन Orders table में Multiple rows होती हैं।
APPLY सिर्फ SQL Server और Azure SQL में available है (MySQL/PostgreSQL में नहीं)
✅ Summary
- CROSS APPLY तब यूज़ करें जब आपको केवल वही rows चाहिए जिनका matching data हो।
- OUTER APPLY तब यूज़ करें जब आपको master table की सभी rows चाहिए चाहे detail मिले या ना मिले।
- Subqueries या Top-N selection में APPLY बहुत useful है।
0 Comments