💡 APPLY in Subqueries & Top-N Selection (SQL Server)
APPLY (CROSS APPLY / OUTER APPLY) SQL Server का एक powerful feature है, जो हमें per-row subqueries और Top-N selection करने में मदद करता है — जो कि traditional JOIN से possible नहीं है।
📘 MEMORY: APPLY क्या होता है?
- CROSS APPLY = INNER JOIN जैसा
- OUTER APPLY = LEFT JOIN जैसा
🎯 कब इस्तेमाल करें?
जब आपको हर row के लिए dynamically एक subquery चलानी हो — जैसे:
- हर customer का latest order
- हर student का highest scoring subject
- हर employee की last login details
🔍 Example 1: Top 1 Order per Customer
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
🧾 Output:
| CustomerName | OrderID | OrderDate | TotalAmount |
|---|---|---|---|
| Amit Verma | 105 | 2024-12-20 | ₹1,200 |
| Neha Singh | 112 | 2025-01-15 | ₹900 |
| Raj Kumar | 120 | 2025-02-02 | ₹2,450 |
🔍 Note: CROSS APPLY हर customer के लिए सिर्फ एक latest order लाएगा।
📊 Example 2: Order Summary using OUTER APPLY
SELECT
C.CustomerName,
O.TotalOrders,
O.TotalAmount
FROM Customers C
OUTER APPLY (
SELECT
COUNT(*) AS TotalOrders,
SUM(TotalAmount) AS TotalAmount
FROM Orders O
WHERE O.CustomerID = C.CustomerID
) O
🔥 Example 3: हर Product की Latest 3 Reviews
SELECT
P.ProductName,
R.ReviewText,
R.Rating
FROM Products P
CROSS APPLY (
SELECT TOP 3 *
FROM ProductReviews R
WHERE R.ProductID = P.ProductID
ORDER BY R.CreatedDate DESC
) R
🎯 कब CROSS और कब OUTER APPLY?
| Use Case | APPLY Type |
|---|---|
| सिर्फ वही rows जिनके पास matching detail हो | CROSS APPLY |
| हर row + NULLs भी चाहिए अगर detail न मिले | OUTER APPLY |
📌 APPLY vs JOIN
| Feature | JOIN | APPLY |
|---|---|---|
| Static join | ✅ | ✅ |
| Correlated subquery | ❌ | ✅ |
| Top N per row | ❌ | ✅ |
| Per row aggregation | ❌ | ✅ |
💬 Interview Question
Q: CROSS APPLY और INNER JOIN में क्या फ़र्क है?
Ans: INNER JOIN दो tables को static रूप से जोड़ता है, लेकिन CROSS APPLY हर row के लिए dynamic subquery को allow करता है — जिससे per-row logic possible होता है।
🧠 Conclusion
- JOINs simple static matching के लिए हैं
- APPLY powerful row-wise subqueries और Top-N selection के लिए best है
✅ Pro Tip: Performance के लिए indexes और filters सही से apply करें जब आप APPLY का इस्तेमाल करें।
0 Comments