SQL Server’da Outer Apply Kullanımı

Herkese merhaba,

Bu yazıda size SQL Server’da Outer Apply kullanımından bahsedeceğim.

SQL Server’da ikinci bir tabloyla join işlemi yapmak istiyoruz ve eşleşen kayıtlarda son iki kaydın gelmesini istiyorsak bu gibi durumlarda Top 2 ifadesini kullanamayız. Böyle işlemlerde Outer Apply kullanımı işimize yarayacaktır. Outer Apply ifadesini fonksiyonlar ile de kullanabiliyoruz. Örnek kodları aşağıda görmektesiniz.

--OuterApply ile ilgili database oluşturma

CREATE DATABASE OuterApplyOrnekDatabase
GO
USE OuterApplyOrnekDatabase
GO


--Müşteriler tablosu oluşturma

CREATE TABLE Musteriler
    (
      MusteriID INT ,
      MusteriAd VARCHAR(50)
    )
GO

--Müşteriler tablosuna veri ekleme

INSERT  INTO Musteriler
        ( MusteriID, MusteriAd )
VALUES  ( 1, 'Yavuz' ),
        ( 2, 'Pelin' ),
        ( 3, 'Fevziye' )
GO

--Sipariş tablosu oluşturma

CREATE TABLE Siparisler
    (
      SiparisID INT ,
      MusteriID INT ,
      Ucret MONEY ,
      SiparisTarihi DATETIME
    )
GO

--Siparişler tablosuna veri ekleme

INSERT  INTO Siparisler
        ( SiparisID, MusteriID, Ucret, SiparisTarihi )
VALUES  ( 100, 1, 100.0, GETDATE() - 30 ),
        ( 101, 1, 200.0, GETDATE() - 20 ),
        ( 103, 1, 300.0, GETDATE() - 10 ),
        ( 104, 2, 150.0, GETDATE() )   
GO

--Müşterinin son iki siparişini gösteren fonksiyon oluşturmak

CREATE FUNCTION dbo.MusterininSonIkiSiparisi
( @MusteriID AS INT )  
RETURNS TABLE
AS
RETURN ( 
        SELECT TOP 2 * 
        FROM dbo.Siparisler s
        WHERE s.MusteriID = @MusteriID
        ORDER BY s.SiparisTarihi DESC
    )

--1 numaralı müşteri idsinin son iki siparişi

SELECT * FROM dbo.MusterininSonIkiSiparisi(1) 


--Müşteriler ve siparişlerinin listelenmesi

SELECT *
FROM Musteriler M
        LEFT OUTER JOIN dbo.Siparisler S
		       ON M.MusteriID = S.MusteriID


--Outer Apply kullanarak müşteriler ve siparişlerin listelenmesi

SELECT *
FROM Musteriler M
  OUTER APPLY (SELECT * 
               FROM dbo.Siparisler S
               WHERE M.MusteriID = S.MusteriID) T


--Outer Apply ile fonksiyon Kullanarak son iki siparişin listelenmesi

SELECT *
FROM dbo.Musteriler M
      OUTER APPLY 
        dbo.MusterininSonIkiSiparisi(M.MusteriID) O


--Outer Apply ile fonksiyon kullanılmadan son iki siparişin listelenmesi

SELECT *
FROM dbo.Musteriler M
    OUTER APPLY (SELECT TOP 2 * 
             FROM Siparisler S 
             WHERE M.MusteriID = S.MusteriID 
             ORDER BY S.SiparisTarihi DESC) T

Yukarıdaki kodlarda müşteri ve sipariş tabloları oluşturduk. Bu iki tablo MusteriID ile birbirine bağlı. Müşterilerin verdiği son iki siparişi göstermek istiyoruz. Bu işlem için tablolarımızı birbirine bağlamamız gerekli. Left Outer Join ile bu işlemi yapınca her bir müşteri için siparişler listelendi. Son iki sipariş için ise Top ifadesini kullanmamız gerekli. Burada kodumuzu revize ederek Outer Apply ifadesini kullanıyoruz. Alt sorgu biçiminde ikinci sorgumuzu Outer Apply ifadesinden sonra yazıyoruz. MüşteriID kısımları ile sorgumuza Join işlemi yaptığımız zaman her bir müşteri için yapılmış olan son iki siparişin listelendiğini göreceksiniz. Sorguyu direkt yazabileceğiniz gibi bir fonksiyon oluşturup fonksiyonu sorgu içinde kullanarak da Outer Apply işlemini gerçekleştirebilirsiniz.

Outer Apply kullanımını daha çok örnek ve uygulama yaparak pekiştirebilirsiniz.

Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.

SQL Server Eğitimleri Kanalına Abone Olun

Şunlar makaleler de hoşunuza gidebilir