﻿<?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’da Cross Apply &#8211; SQL Server Eğitimleri</title>
	<atom:link href="https://sqlserveregitimleri.com/etiket/sql-serverda-cross-apply/feed" rel="self" type="application/rss+xml" />
	<link>https://sqlserveregitimleri.com</link>
	<description>SQL Server ile ilgili her şey</description>
	<lastBuildDate>Thu, 22 Apr 2021 23:28:08 +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’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 fetchpriority="high" 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 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="(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>
