﻿<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SQL Server Outer Apply &#8211; SQL Server Eğitimleri</title>
	<atom:link href="https://sqlserveregitimleri.com/etiket/sql-server-outer-apply/feed" rel="self" type="application/rss+xml" />
	<link>https://sqlserveregitimleri.com</link>
	<description>SQL Server ile ilgili her şey</description>
	<lastBuildDate>Sun, 09 Apr 2023 21:30:35 +0000</lastBuildDate>
	<language>tr</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.1</generator>
	<item>
		<title>SQL Server&#8217;da OUTER APPLY Kullanmak</title>
		<link>https://sqlserveregitimleri.com/sql-serverda-outer-apply-kullanmak</link>
		
		<dc:creator><![CDATA[Yavuz Selim Kart]]></dc:creator>
		<pubDate>Mon, 03 Apr 2023 10:18:55 +0000</pubDate>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[OUTER APPLY Kullanımı]]></category>
		<category><![CDATA[SQL OUTER APPLY]]></category>
		<category><![CDATA[SQL Server Outer Apply]]></category>
		<guid isPermaLink="false">https://sqlserveregitimleri.com/?p=15931</guid>

					<description><![CDATA[Herkese merhaba. Bu yazıda SQL Server’da OUTER APPLY kullanmak ile ilgili bilgi paylaşacağım. SQL Server&#8217;da OUTER APPLY, bir tablodan veya sorgudan elde edilen verileri diğer...]]></description>
										<content:encoded><![CDATA[<p>Herkese merhaba. Bu yazıda SQL Server’da OUTER APPLY kullanmak ile ilgili bilgi paylaşacağım.</p>
<p>SQL Server&#8217;da OUTER APPLY, bir tablodan veya sorgudan elde edilen verileri diğer bir tablo veya sorgu üzerinde uygulama işlemine olanak tanıyan bir JOIN operatörüdür. OUTER APPLY, CROSS APPLY gibi SQL Server&#8217;ın T-SQL dilinde yer alan APPLY operatörlerinden biridir.</p>
<p>SQL Server&#8217;da OUTER APPLY, bir JOIN türüdür ve genellikle bir alt sorgu veya bir tablo değerli fonksiyon (TVF) ile kullanılır. OUTER APPLY, sorgunun her bir satırı için, sağ tarafındaki alt sorgu veya TVF&#8217;yi uygular ve eşleşen sonuçları döndürür. Eğer eşleşme yoksa, LEFT OUTER JOIN&#8217;da olduğu gibi, NULL değerleri döndürür.</p>
<p>SQL Server&#8217;da OUTER APPLY kullanımı, özellikle bir tablonun her bir satırı için bir alt sorgunun veya TVF&#8217;nin (Tablo Değerli Fonksiyon) uygulanması gerektiğinde yararlıdır. Bu, özellikle karmaşık sorgularda kullanıcı tarafından oluşturulmuş fonksiyonların veya alt sorguların kullanımıyla oldukça yararlıdır.</p>
<p>SQL Server&#8217;da OUTER APPLY&#8217;ı anlamak için aşağıdaki tabloyu oluşturup sorguyu inceleyelim.</p>
<pre class="line-numbers"><code class="language-sql">CREATE TABLE Calisanlar (
	CalisanID INT PRIMARY KEY
   ,Adi VARCHAR(50) NOT NULL
   ,Soyadi VARCHAR(50) NOT NULL
   ,DepartmanID INT NOT NULL
   ,Maas DECIMAL(10, 2) NOT NULL
);

CREATE TABLE Departmanlar (
	DepartmanID INT PRIMARY KEY
   ,DepartmanAdi VARCHAR(50) NOT NULL
);

INSERT INTO Calisanlar (CalisanID, Adi, Soyadi, DepartmanID, Maas)
	VALUES (1, 'Ahmet', 'Yilmaz', 1, 5000.00);

INSERT INTO Calisanlar (CalisanID, Adi, Soyadi, DepartmanID, Maas)
	VALUES (2, 'Mehmet', 'Kaya', 1, 6000.00);

INSERT INTO Calisanlar (CalisanID, Adi, Soyadi, DepartmanID, Maas)
	VALUES (3, 'Ayse', 'Ozturk', 2, 4500.00);

INSERT INTO Calisanlar (CalisanID, Adi, Soyadi, DepartmanID, Maas)
	VALUES (4, 'Fatma', 'Aydin', 2, 5500.00);

INSERT INTO Departmanlar (DepartmanID, DepartmanAdi)
	VALUES (1, 'Muhasebe');

INSERT INTO Departmanlar (DepartmanID, DepartmanAdi)
	VALUES (2, 'Insan Kaynaklari');

SELECT
	D.DepartmanAdi
   ,DA.OrtalamaMaas
FROM Departmanlar D
OUTER APPLY (SELECT
		AVG(Maas) AS OrtalamaMaas
	FROM Calisanlar C
	WHERE C.DepartmanID = D.DepartmanID) DA</code></pre>
<p><img fetchpriority="high" decoding="async" class="alignnone wp-image-15935 size-full" src="https://sqlserveregitimleri.com/wp-content/uploads/2023/04/sql-serverda-outer-apply-kullanmak-1.png" alt="SQL Server'da OUTER APPLY Kullanmak" width="700" height="485" srcset="https://sqlserveregitimleri.com/wp-content/uploads/2023/04/sql-serverda-outer-apply-kullanmak-1.png 700w, https://sqlserveregitimleri.com/wp-content/uploads/2023/04/sql-serverda-outer-apply-kullanmak-1-315x218.png 315w, https://sqlserveregitimleri.com/wp-content/uploads/2023/04/sql-serverda-outer-apply-kullanmak-1-433x300.png 433w, https://sqlserveregitimleri.com/wp-content/uploads/2023/04/sql-serverda-outer-apply-kullanmak-1-195x135.png 195w" sizes="(max-width: 700px) 100vw, 700px" /></p>
<p>Yukarıdaki sorgu, her bir departmanın adını ve ortalama maaşını döndürür. OUTER APPLY, her bir departmanı &#8220;Departmanlar&#8221; tablosu ile birleştirir ve her bir departman için bir alt sorgu çalıştırır. Bu alt sorgu, aynı departmanda çalışan diğer çalışanların maaşlarının ortalama değerini hesaplar. Eğer bir departmanda hiç çalışan yoksa, OrtalamaMaas NULL olarak döndürülür.</p>
<p>Yukarıdaki sorgu biraz karmaşık gelebilir. Bunu da tablo döndüren fonksiyon kullanarak aşabiliriz. İlk olarak aşağıdaki fonksiyonu oluşturalım.</p>
<pre class="line-numbers"><code class="language-sql">CREATE FUNCTION GetOrtalamaMaas (@DepartmanID INT)
RETURNS DECIMAL(10, 2)
AS
BEGIN
	DECLARE @OrtalamaMaas DECIMAL(10, 2)
	SELECT
		@OrtalamaMaas = AVG(Maas)
	FROM Calisanlar
	WHERE DepartmanID = @DepartmanID
	RETURN @OrtalamaMaas
END</code></pre>
<p>Şimdi bu fonksiyonu OUTER APPLY ifadesi ile birlikte kullanalım.</p>
<pre class="line-numbers"><code class="language-sql">SELECT
	D.DepartmanAdi
   ,dbo.GetOrtalamaMaas(D.DepartmanID) AS OrtalamaMaas
FROM Departmanlar D</code></pre>
<p><img decoding="async" class="alignnone wp-image-15937 size-full" src="https://sqlserveregitimleri.com/wp-content/uploads/2023/04/sql-serverda-outer-apply-kullanmak-2.png" alt="SQL Server'da OUTER APPLY Kullanmak" width="700" height="505" srcset="https://sqlserveregitimleri.com/wp-content/uploads/2023/04/sql-serverda-outer-apply-kullanmak-2.png 700w, https://sqlserveregitimleri.com/wp-content/uploads/2023/04/sql-serverda-outer-apply-kullanmak-2-315x227.png 315w, https://sqlserveregitimleri.com/wp-content/uploads/2023/04/sql-serverda-outer-apply-kullanmak-2-416x300.png 416w, https://sqlserveregitimleri.com/wp-content/uploads/2023/04/sql-serverda-outer-apply-kullanmak-2-187x135.png 187w" sizes="(max-width: 700px) 100vw, 700px" /></p>
<p>Yukarıdaki sorgu, her bir departmanın adını ve ortalama maaşını döndürür. OUTER APPLY yerine fonksiyon kullanarak da benzer bir sonuç elde edebiliriz. Fonksiyon, SQL Server&#8217;da özellikle karmaşık sorgularda kullanıcıya birçok fayda sağlar ve tekrar tekrar kullanılabilir bir bileşen olarak kullanılabilir.</p>
<p>SQL Server&#8217;da OUTER APPLY, özellikle alt sorgu veya tablo değerli fonksiyonlar ile çalışırken kullanılabilir. Fonksiyon veya alt sorgu sonuçlarını, ana sorgu sonucu ile birleştirerek, sonuçları daha anlamlı ve daha okunaklı bir şekilde sunabilir.</p>
<p>SQL Server&#8217;da OUTER APPLY operatörü, birleştirme yapmak istediğimiz ana tabloya (sol taraf) ve birleştireceğimiz tablo değerli fonksiyon veya alt sorguya (sağ taraf) ihtiyaç duyar. RIGHT OUTER JOIN ve CROSS APPLY operatörleri de OUTER APPLY gibi çalışır, ancak farklı kullanım durumlarına sahiptir.</p>
<p>SQL Server&#8217;da OUTER APPLY, aşağıdaki senaryolarda kullanılabilir:</p>
<ul>
<li>Alt sorgu veya tablo değerli fonksiyon (TVF) sonuçlarının her bir ana sorgu satırına uygulanması gerektiğinde.</li>
<li>Ana sorgunun sonuç kümesinde NULL değerleri olan satırların da döndürülmesi gerektiğinde.</li>
<li>Sorgunun performansını artırmak için TVF (Tablo Değerli Fonksiyon) veya alt sorgu kullanımı gerektiğinde.</li>
</ul>
<p>Özellikle karmaşık sorgularda OUTER APPLY kullanmak, sorgunun daha okunaklı, anlaşılır ve sürdürülebilir hale gelmesine yardımcı olabilir. Ayrıca, ana tablo ve tablo değerli fonksiyon veya alt sorgu arasında doğru birleştirme yaparak, sonuçların beklenen şekilde döndürülmesini sağlar.</p>
<p>SQL Server&#8217;da OUTER APPLY operatörü, SQL sorgularında daha okunaklı, anlaşılır ve sürdürülebilir kodlar yazmamıza yardımcı olur. Özellikle, alt sorgular veya tablo değerli fonksiyonlar ile birleştirme yapmak zorunda kaldığımız karmaşık sorgularda OUTER APPLY, kullanım kolaylığı sağlar.</p>
<p>Sonuç olarak, OUTER APPLY, SQL Server sorgularında kompleks hesaplama ve filtreleme işlemleri için kullanışlı bir JOIN operatörüdür. Ancak, doğru kullanımı önemlidir ve performansı etkilememesi için sorgularda dikkatli bir şekilde kullanılmalıdır.</p>
<p>Linkteki kaynağı da okuyabilirsiniz : <a href="https://www.c-sharpcorner.com/UploadFile/f0b2ed/cross-apply-and-outer-apply-in-sql-server/">https://www.c-sharpcorner.com/UploadFile/f0b2ed/cross-apply-and-outer-apply-in-sql-server/</a></p>
<p>Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.</p>
<div class='epvc-post-count'><span class='epvc-eye'></span>  <span class="epvc-count"> 679</span><span class='epvc-label'> Kez Okundu</span></div>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SQL Server’da Outer Apply Kullanımı</title>
		<link>https://sqlserveregitimleri.com/sql-serverda-outer-apply-kullanimi</link>
		
		<dc:creator><![CDATA[Yavuz Selim Kart]]></dc:creator>
		<pubDate>Sat, 24 Mar 2018 20:27:54 +0000</pubDate>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server Outer Apply]]></category>
		<category><![CDATA[SQL Server’da Outer Apply Kullanımı]]></category>
		<category><![CDATA[SQL Server’da Outer Apply Kullanımı Nasıldır]]></category>
		<guid isPermaLink="false">http://sqlserveregitimleri.com/?p=5166</guid>

					<description><![CDATA[Herkese merhaba, Bu yazıda size SQL Server&#8217;da Outer Apply kullanımından bahsedeceğim. SQL Server&#8217;da ikinci bir tabloyla join işlemi yapmak istiyoruz ve eşleşen kayıtlarda son iki kaydın gelmesini...]]></description>
										<content:encoded><![CDATA[<p>Herkese merhaba,</p>
<p>Bu yazıda size SQL Server&#8217;da Outer Apply kullanımından bahsedeceğim.</p>
<p>SQL Server&#8217;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.</p>
<pre class="lang:default decode:true ">--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
</pre>
<p>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.</p>
<p>Outer Apply kullanımını daha çok örnek ve uygulama yaparak pekiştirebilirsiniz.</p>
<p>Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.</p>
<div class='epvc-post-count'><span class='epvc-eye'></span>  <span class="epvc-count"> 1.921</span><span class='epvc-label'> Kez Okundu</span></div>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
