﻿<?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>Cross Apply Kullanımı &#8211; SQL Server Eğitimleri</title>
	<atom:link href="https://sqlserveregitimleri.com/etiket/cross-apply-kullanimi/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>
		<item>
		<title>SQL Server’da Cross Apply Kullanımı</title>
		<link>https://sqlserveregitimleri.com/sql-serverda-cross-apply-kullanimi</link>
		
		<dc:creator><![CDATA[Yavuz Selim Kart]]></dc:creator>
		<pubDate>Fri, 19 Jan 2018 12:00:26 +0000</pubDate>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Cross Apply Kullanımı]]></category>
		<category><![CDATA[SQL Server’da Cross Apply]]></category>
		<category><![CDATA[SQL Server’da Cross Apply Kullanımı]]></category>
		<guid isPermaLink="false">http://sqlserveregitimleri.com/?p=4011</guid>

					<description><![CDATA[Herkese merhaba, Bu yazıda size SQL Server&#8217;da Cross Apply kullanımından bahsedeceğim. SQL Server&#8217;da ikinci bir tabloyla join işlemi yapmak istiyoruz ve eşleşen ilk kaydın gelmesini istiyorsak bu...]]></description>
										<content:encoded><![CDATA[<p>Herkese merhaba,</p>
<p>Bu yazıda size SQL Server&#8217;da Cross Apply kullanımından bahsedeceğim.</p>
<p>SQL Server&#8217;da ikinci bir tabloyla join işlemi yapmak istiyoruz ve eşleşen ilk kaydın gelmesini istiyorsak bu durumda Top 1 ifadesini kullanamazsınız. Böyle işlemlerde Cross Apply kullanımı işimize yarayacaktır. Cross Apply ifadesini fonksiyonlar ile de kullanabiliyoruz. Örnek kodları aşağıda görmektesiniz.</p>
<pre class="lang:default decode:true ">--Birinci Örnek

--Tablo oluşturulması

CREATE TABLE Bolumler( 
   BolumID [int] NOT NULL PRIMARY KEY, 
   BolumAd VARCHAR(250) NOT NULL, 
) 

--Tablo içerisine veri eklenmesi

INSERT Bolumler (BolumID, BolumAd)  
VALUES (1, N'Mühendis') 
INSERT Bolumler (BolumID, BolumAd)  
VALUES (2, N'Yönetici') 
INSERT Bolumler (BolumID, BolumAd)  
VALUES (3, N'Satış') 
INSERT Bolumler (BolumID, BolumAd)  
VALUES (4, N'Pazarlama') 
INSERT Bolumler (BolumID, BolumAd)  
VALUES (5, N'Finans') 
GO 

--Tablo oluşturulması

CREATE TABLE Calisanlar( 
   CalisanID [int] NOT NULL PRIMARY KEY, 
   Ad VARCHAR(250) NOT NULL, 
   Soyad VARCHAR(250) NOT NULL, 
   BolumID [int] NOT NULL REFERENCES Bolumler(BolumID), 
) 
GO

--Tablo içerisine veri eklenmesi
 
INSERT Calisanlar (CalisanID, Ad, Soyad, BolumID) 
VALUES (1, N'Yavuz', N'Selim', 1 ) 
INSERT Calisanlar (CalisanID, Ad, Soyad, BolumID) 
VALUES (2, N'Selim', N'Yavuz', 2 ) 
INSERT Calisanlar (CalisanID, Ad, Soyad, BolumID) 
VALUES (3, N'Bilge', N'Nuray', 3 ) 
INSERT Calisanlar (CalisanID, Ad, Soyad, BolumID) 
VALUES (4, N'Hasan', N'Bilge', 3 )

--Cross Apply Kullanımı (Inner Join'e benzeyen bir yapı, temel Kullanım bu şekilde)

SELECT * FROM Bolumler B 
CROSS APPLY 
   ( 
   SELECT * FROM Calisanlar C
   WHERE C.BolumID = B.BolumID 
   ) A 
GO

--Inner Join Kullanımı

 
SELECT * FROM Bolumler B
INNER JOIN dbo.Calisanlar C ON B.BolumID = C.BolumID 
GO  

--Bir miktar daha veri ekleyelim
INSERT Calisanlar (CalisanID, Ad, Soyad, BolumID) 
VALUES (5, N'Meral', N'Bilmez', 1 ) 
INSERT Calisanlar (CalisanID, Ad, Soyad, BolumID) 
VALUES (6, N'Ayhan', N'Çalışkan', 2 ) 
INSERT Calisanlar (CalisanID, Ad, Soyad, BolumID) 
VALUES (7, N'Suna', N'Karışmaz', 3 ) 
INSERT Calisanlar (CalisanID, Ad, Soyad, BolumID) 
VALUES (8, N'Mehtap', N'Gün', 3 )
INSERT Calisanlar (CalisanID, Ad, Soyad, BolumID) 
VALUES (9, N'Kaya', N'Yılmaz', 1 ) 
INSERT Calisanlar (CalisanID, Ad, Soyad, BolumID) 
VALUES (10, N'Süha', N'Durmaz', 2 ) 
INSERT Calisanlar (CalisanID, Ad, Soyad, BolumID) 
VALUES (11, N'Mustafa', N'Kalmaz', 3 ) 
INSERT Calisanlar (CalisanID, Ad, Soyad, BolumID) 
VALUES (12, N'İsmail', N'Bilmez', 3 )

--Bölümlere göre ilk sıradaki kayıtları çekme ihtiyacı oldu diyelim

SELECT B.BolumAd,A.Ad FROM Bolumler B 
CROSS APPLY 
   ( 
   SELECT TOP 1 *  FROM Calisanlar C
   WHERE C.BolumID = B.BolumID 
   ) A 
GO

--Bölümlere göre ilk sıradaki kayıtları çekme ihtiyacı oldu diyelim 
--Ad kısmına göre tersten yani Z'den A'ya sıralama için 
--(Fotoğrafı inceleyin ve fotoğrafın altındaki kodları çalıştırarak anlamaya çalışın) 

SELECT B.BolumAd,A.Ad FROM Bolumler B 
CROSS APPLY 
   ( 
   SELECT TOP 1 *  FROM Calisanlar C
   WHERE C.BolumID = B.BolumID 
   ORDER BY C.Ad DESC
   ) A 
GO

<img decoding="async" class="alignnone wp-image-4014 size-full" src="http://sqlserveregitimleri.com/wp-content/uploads/2018/01/sql-serverda-cross-apply-kullanimi-1.jpg" alt="" width="700" height="528" srcset="https://sqlserveregitimleri.com/wp-content/uploads/2018/01/sql-serverda-cross-apply-kullanimi-1.jpg 700w, https://sqlserveregitimleri.com/wp-content/uploads/2018/01/sql-serverda-cross-apply-kullanimi-1-315x238.jpg 315w, https://sqlserveregitimleri.com/wp-content/uploads/2018/01/sql-serverda-cross-apply-kullanimi-1-398x300.jpg 398w, https://sqlserveregitimleri.com/wp-content/uploads/2018/01/sql-serverda-cross-apply-kullanimi-1-179x135.jpg 179w" sizes="(max-width: 700px) 100vw, 700px" />

--Sıralamayı anlamak için bu sorgu ile üstteki sorguyu beraber çalıştırın

SELECT * FROM Bolumler B 
CROSS APPLY 
   ( 
   SELECT * FROM Calisanlar C
   WHERE C.BolumID = B.BolumID 
   ) A 
GO

--Fonksiyonlu şekilde de yazabiliriz.
--Bölümlere göre ilk sıradaki kayıtları çekme ihtiyacı oldu diyelim

Create FUNCTION BolumlereGoreIlkKayıt(@BolumID int)
RETURNS TABLE AS 
RETURN 
  SELECT TOP 1 B.BolumID,B.BolumAd,c.Ad FROM Bolumler B
   INNER JOIN dbo.Calisanlar C ON C.BolumID = B.BolumID
   WHERE b.BolumID=@BolumID
  
 GO

--Kullanımı aşağıdaki şekilde. Bölümlere göre ad soyad çekme işlemini bu şekilde yaptık

SELECT * FROM Bolumler

SELECT *
FROM Bolumler 
CROSS APPLY dbo.BolumlereGoreIlkKayıt(BolumID) as Sonuc

--Anlamak için aşağıdaki kodu inceleyelim. 
--Görüldüğü gibi yukarıdaki kod aşağıdaki kodun dinamik şekli gibidir.

 SELECT TOP 1 B.BolumID,B.BolumAd,c.Ad FROM Bolumler B
   INNER JOIN dbo.Calisanlar C ON C.BolumID = B.BolumID
   WHERE b.BolumID=1
UNION
 SELECT TOP 1 B.BolumID,B.BolumAd,c.Ad FROM Bolumler B
   INNER JOIN dbo.Calisanlar C ON C.BolumID = B.BolumID
   WHERE b.BolumID=2
   UNION
 SELECT TOP 1 B.BolumID,B.BolumAd,c.Ad FROM Bolumler B
   INNER JOIN dbo.Calisanlar C ON C.BolumID = B.BolumID
   WHERE b.BolumID=3
</pre>
<p>Yukarıdaki kodlarda görüldüğü üzere Cross Apply kullanarak bölümlere göre ilk sıradaki kayıtları çekmiş olduk ve bu işlemi fonksiyon ile de yapma imkanı bulabildik. Cross Apply, Cross Apply&#8217;dan dönen sonuçları kolonları ile beraber diğer tablo içine transfer etmede kullanılır. Aşağıdaki fotoğrafta bunu ayrıntılı görebilirsiniz.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-4015 size-full" src="http://sqlserveregitimleri.com/wp-content/uploads/2018/01/sql-serverda-cross-apply-kullanimi-2.jpg" alt="" width="700" height="364" srcset="https://sqlserveregitimleri.com/wp-content/uploads/2018/01/sql-serverda-cross-apply-kullanimi-2.jpg 700w, https://sqlserveregitimleri.com/wp-content/uploads/2018/01/sql-serverda-cross-apply-kullanimi-2-315x164.jpg 315w, https://sqlserveregitimleri.com/wp-content/uploads/2018/01/sql-serverda-cross-apply-kullanimi-2-577x300.jpg 577w, https://sqlserveregitimleri.com/wp-content/uploads/2018/01/sql-serverda-cross-apply-kullanimi-2-260x135.jpg 260w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Cross 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"> 2.713</span><span class='epvc-label'> Kez Okundu</span></div>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
