APPLY işlecini kullanma

Tamamlandı

SQL Server, iki kümedeki satırları birleştirmeye veya karşılaştırmaya alternatif olarak, diğer kümedeki her satıra bir kümeden tablo ifadesi uygulamak için bir mekanizma sağlar. APPLY işleci, ikinci giriş kümesini tanımlayan ifadeye göre bir giriş kümesindeki satırları değerlendiren sorguları etkinleştirir. APPLY aslında bir tablo işlecidir, küme işleci değildir ve FROM yan tümcesinin bir parçasıdır. APPLY, iki uyumlu sonuç kümesinde çalışan bir küme işleci yerine JOIN'e benzer.

Kavramsal olarak APPLY işleci, bir tablodaki her satıra bağıntılı tablo ifadesi uygulayan bağıntılı bir alt sorguya benzer. Ancak, APPLY işlevi skaler veya çok değerli bir sonuç yerine tablo değerli bir sonuç döndürür. Örneğin, tablo ifadesi tablo değerli bir işlev olabilir. Sol satırdaki öğeleri giriş parametresi olarak tablo değerli işlevine geçirebilirsiniz.

APPLY'in iki biçimi vardır:

  • ÇAPRAZ UYGULA
  • OUTER APPLY

APPLY söz dizimi aşağıdaki gibidir:

SELECT <column_list>
FROM left_table_source { CROSS | OUTER } APPLY right_table_source 

Bu en iyi şekilde bir örnekle açıklanmıştır. İlk örnekte, aşağıdaki tablolardan sütun döndürmek için INNER JOIN kullanılır:

  • SalesLT.SalesOrderHeader.
  • SalesLT.SalesOrderDetail.

Aşağıdaki kod örneğinde tablolar INNER JOIN kullanılarak birleştirilir:

SELECT oh.SalesOrderID, oh.OrderDate,od.ProductID, od.UnitPrice, od.Orderqty 
FROM SalesLT.SalesOrderHeader AS oh 
INNER JOIN SalesLT.SalesOrderDetail AS od 
ON oh.SalesOrderID = od.SalesOrderID;

Aşağıdaki kod örneğinde, CROSS APPLY sol tablo kaynağındaki her satıra doğru tablo kaynağını uygular. Yalnızca hem sol hem de sağ tabloda sonuçları olan satırlar döndürülür. INNER JOIN deyimlerinin çoğu CROSS APPLY deyimleri olarak yeniden yazılabilir.

SELECT oh.SalesOrderID, oh.OrderDate,
od.ProductID, od.UnitPrice, od.Orderqty 
FROM SalesLT.SalesOrderHeader AS oh 
CROSS APPLY (SELECT productid, unitprice, Orderqty 
        FROM SalesLT.SalesOrderDetail AS od 
        WHERE oh.SalesOrderID = SalesOrderID
              ) AS od;

Her iki durumda da sonuç kümesi aynıdır:

A screenshot showing the result set from the CROSS APPLY operator.