﻿<?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 CROSS APPLY &#8211; SQL Server Eğitimleri</title>
	<atom:link href="https://sqlserveregitimleri.com/etiket/sql-server-cross-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:55 +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 CROSS APPLY Kullanmak</title>
		<link>https://sqlserveregitimleri.com/sql-serverda-cross-apply-kullanmak</link>
		
		<dc:creator><![CDATA[Yavuz Selim Kart]]></dc:creator>
		<pubDate>Mon, 03 Apr 2023 08:11:43 +0000</pubDate>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[CROSS APPLY]]></category>
		<category><![CDATA[Cross Apply Kullanımı]]></category>
		<category><![CDATA[SQL Server CROSS APPLY]]></category>
		<guid isPermaLink="false">https://sqlserveregitimleri.com/?p=15921</guid>

					<description><![CDATA[Herkese merhaba. Bu yazıda SQL Server’da CROSS APPLY kullanmak ile ilgili bilgi paylaşacağım SQL Server&#8217;da CROSS APPLY, bir tablodan veya sorgudan elde edilen verileri diğer...]]></description>
										<content:encoded><![CDATA[<p>Herkese merhaba. Bu yazıda SQL Server’da CROSS APPLY kullanmak ile ilgili bilgi paylaşacağım</p>
<p>SQL Server&#8217;da CROSS 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. CROSS APPLY, OUTER APPLY gibi SQL Server&#8217;ın T-SQL dilinde yer alan APPLY operatörlerinden biridir.</p>
<p>SQL Server&#8217;da CROSS APPLY operatörü, JOIN operatörüne benzer bir şekilde, iki tablo arasında bir ilişki kurar. Ancak, CROSS APPLY operatörü, JOIN operatöründen farklı olarak, sağ tablodaki her kaydı sol tablodaki her kayıtla eşleştirir. Bu nedenle, sol tablodaki her kayıt, sağ tablodaki eşleşen kayıtlarla birlikte gösterilir.</p>
<p>SQL Server&#8217;da CROSS APPLY, özellikle bir tablonun her bir satırına bağlı olan bir alt sorgu veya fonksiyon kullanırken yararlıdır. Örneğin, bir tablodaki her bir satırın bir hesaplama veya dönüştürme işlemine tabi tutulması gereken bir senaryoda CROSS APPLY kullanılabilir. Bu işlemi gerçekleştirmek için, bir tablodaki her bir satırı almak üzere bir sorgu yazılır ve bu sorgu, diğer bir tabloya uygulanır.</p>
<p>SQL Server&#8217;da CROSS APPLY operatörü, bir tablodan elde edilen verileri, diğer bir tablo veya sorguda kullanmak için uygulama işlemi yapar. Bu operatör, JOIN operatörüne benzer bir şekilde çalışır, ancak her kaydı diğer tablodaki her kayıtla eşleştirir. Bu nedenle, CROSS APPLY, özellikle bir tablonun her bir satırıyla ilgili olan işlemler yaparken yararlıdır.</p>
<p>SQL Server&#8217;da CROSS APPLY, genel olarak bir tabloyu tablo değerli bir ifadeyle veya tablo döndüren kullanıcı tanımlı bir fonkiyonla birleştirmek için kullanılabilen güçlü bir işleçtir. Karmaşık hesaplamalar yapmanızı, verilerin özetini çıkarmanızı ve tabloları daha verimli bir şekilde birleştirmenizi sağlar.</p>
<p>CROSS APPLY&#8217;ı anlamak için aşağıdaki tabloyu oluşturup sorguyu inceleyelim.</p>
<pre class="line-numbers"><code class="language-sql">CREATE TABLE Musteriler (
	MusteriID INT PRIMARY KEY
   ,MusteriAdi NVARCHAR(50)
   ,MusteriSoyadi NVARCHAR(50)
   ,Sehir NVARCHAR(50)
);

CREATE TABLE Siparisler (
	SiparisID INT PRIMARY KEY
   ,MusteriID INT
   ,SiparisTarihi DATE
   ,FOREIGN KEY (MusteriID) REFERENCES Musteriler (MusteriID)
);


INSERT INTO Musteriler (MusteriID, MusteriAdi, MusteriSoyadi, Sehir)
	VALUES (1, 'Ali', 'Yilmaz', 'Istanbul'),
	(2, 'Ayse', 'Demir', 'Ankara'),
	(3, 'Mehmet', 'Ozturk', 'Istanbul'),
	(4, 'Zeynep', 'Ozkan', 'Izmir'),
	(5, 'Mustafa', 'Gunes', 'Ankara');

INSERT INTO Siparisler (SiparisID, MusteriID, SiparisTarihi)
	VALUES (1, 1, '2022-03-01'),
	(2, 1, '2022-03-05'),
	(3, 2, '2022-03-07'),
	(4, 4, '2022-03-10'),
	(5, 3, '2022-03-12'),
	(6, 2, '2022-03-15'),
	(7, 1, '2022-03-17'),
	(8, 5, '2022-03-20');

SELECT
	M.MusteriAdi
   ,M.MusteriSoyadi
   ,S.SiparisTarihi
FROM Musteriler AS M
CROSS APPLY (SELECT TOP 2
		*
	FROM Siparisler AS S
	WHERE S.MusteriID = M.MusteriID
	ORDER BY SiparisTarihi DESC) AS S;</code></pre>
<p><img fetchpriority="high" decoding="async" class="alignnone wp-image-15927 size-full" src="https://sqlserveregitimleri.com/wp-content/uploads/2023/04/sql-serverda-cross-apply-kullanmak-1.png" alt="SQL Server'da CROSS APPLY Kullanmak" width="700" height="469" srcset="https://sqlserveregitimleri.com/wp-content/uploads/2023/04/sql-serverda-cross-apply-kullanmak-1.png 700w, https://sqlserveregitimleri.com/wp-content/uploads/2023/04/sql-serverda-cross-apply-kullanmak-1-315x211.png 315w, https://sqlserveregitimleri.com/wp-content/uploads/2023/04/sql-serverda-cross-apply-kullanmak-1-448x300.png 448w, https://sqlserveregitimleri.com/wp-content/uploads/2023/04/sql-serverda-cross-apply-kullanmak-1-201x135.png 201w" sizes="(max-width: 700px) 100vw, 700px" /></p>
<p>Yukarıdaki, sorgu, Musteriler tablosundaki her bir müşteri için son iki siparişi listeleyecektir. CROSS APPLY operatörü, her bir müşterinin son iki siparişini belirlemek için bir alt sorgu kullanır. Bu alt sorgu, Siparisler tablosundan müşteriye ait son iki siparişi getirir ve bu siparişleri tarihe göre tersten sıralar. Daha sonra, CROSS APPLY operatörü, Musteriler tablosundaki her bir müşteriyle bu alt sorguyu birleştirir ve sonuç olarak her bir müşterinin son iki siparişi listelenir.</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 dbo.fnGetOrders (@musteriID INT)
RETURNS TABLE
AS
	RETURN
	(
	SELECT TOP 2
		SiparisID
	   ,MusteriID
	   ,SiparisTarihi
	FROM Siparisler
	WHERE MusteriID = @musteriID
	ORDER BY SiparisTarihi DESC
	);</code></pre>
<p>Şimdi bu fonksiyonu CROSS APPLY ifadesi ile birlikte kullanalım.</p>
<pre class="line-numbers"><code class="language-markup">SELECT
	M.MusteriAdi
   ,M.MusteriSoyadi
   ,S.SiparisTarihi
FROM Musteriler AS M
CROSS APPLY dbo.fnGetOrders(M.MusteriID) AS S;</code></pre>
<p><img decoding="async" class="alignnone wp-image-15928 size-full" src="https://sqlserveregitimleri.com/wp-content/uploads/2023/04/sql-serverda-cross-apply-kullanmak-2.png" alt="SQL Server'da CROSS APPLY Kullanmak" width="700" height="565" srcset="https://sqlserveregitimleri.com/wp-content/uploads/2023/04/sql-serverda-cross-apply-kullanmak-2.png 700w, https://sqlserveregitimleri.com/wp-content/uploads/2023/04/sql-serverda-cross-apply-kullanmak-2-315x254.png 315w, https://sqlserveregitimleri.com/wp-content/uploads/2023/04/sql-serverda-cross-apply-kullanmak-2-372x300.png 372w, https://sqlserveregitimleri.com/wp-content/uploads/2023/04/sql-serverda-cross-apply-kullanmak-2-167x135.png 167w" sizes="(max-width: 700px) 100vw, 700px" /></p>
<p>Yukarıdaki sorgu da, Musteriler tablosundaki her bir müşteri için son iki siparişi listeleyecektir. CROSS APPLY operatörü, dbo.fnGetOrders fonksiyonunu her bir müşteri için çağırarak sonuçları döndürür. Bu fonksiyon, Siparisler tablosundan müşteriye ait son iki siparişi getirir ve bu siparişleri tarihe göre tersten sıralar. Daha sonra, CROSS APPLY operatörü, Musteriler tablosundaki her bir müşteriyle bu fonksiyonu birleştirir ve sonuç olarak her bir müşterinin son iki siparişi listelenir.</p>
<p>SQL Server&#8217;da CROSS APPLY, her bir kaydı bir tablodan diğer tabloya bağımlılığı olan bir işlem veya alt sorgu üzerinden işleme izin veren bir JOIN operatörüdür. CROSS APPLY genellikle, bir sorgu içinde bir alt sorgu kullanarak, ana sorgu sonuç kümesini daha fazla işlemek veya genişletmek için kullanılır. Bu alt sorgu, CROSS APPLY operatörü tarafından her kayıt için ayrı ayrı çalıştırılır ve sonuçları ana sorguya döndürülür.</p>
<p>SQL Server&#8217;da CROSS APPLY operatörü, INNER JOIN ve OUTER JOIN operatörleriyle benzerlik gösterir, ancak bu işlemlerden farklı olarak, her bir kayıt için alt sorgunun çalıştırılması zorunlu olduğu için performans açısından daha yüksek bir maliyeti olabilir. Sorgu sonuçlarınızın performasını inceleyerek maliyeti ve performansı analiz edebilirsiniz.</p>
<p>SQL Server&#8217;da CROSS APPLY, bir tablodan diğer tabloya bağımlı olan karmaşık sorguların yazılmasına izin verir. Örneğin, bir tablodaki her bir kayıtın başka bir tablodaki bir veya daha fazla ilgili kayıtla birleştirilmesi gerektiğinde kullanılabilir. Ayrıca, alt sorgularda kullanılan fonksiyonlar gibi işlevlerin kullanımını da içerebilir.</p>
<p>SQL Server&#8217;da CROSS APPLY genellikle, veritabanı tasarımında oluşturulmuş karmaşık yapıları işlemek için kullanılır ve özellikle büyük veri kümeleri üzerinde çalışırken daha etkilidir.</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"> 512</span><span class='epvc-label'> Kez Okundu</span></div>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
