SQL Server’da CTE’leri Kullanmak

Herkese merhaba,

Bu yazıda SQL Server’da CTE’leri kullanmak ile ilgili bilgi vermeye çalışacağım.

SQL Server’da CTE (Common Table Expressions), geçici olarak bir SQL ifadesi içinde kullanılan ve sorguların daha okunaklı ve anlaşılır hale getirilmesine yardımcı olan bir yapıdır.

Tablo oluşturarak bir CTE örneği yapalım. Örneğimizde bir müzik şirketinin şarkı ve albüm verilerini içeren iki tablosu var: Songs ve Albums. Şimdi, CTE kullanarak, her albümdeki en popüler şarkıları bulalım.

Öncelikle, Songs ve Albums tablolarını oluşturalım:

CREATE TABLE Songs (
	SongID INT
   ,SongName VARCHAR(50)
   ,AlbumID INT
   ,Plays INT
);

INSERT INTO Songs
	VALUES (1, 'Shape of You', 1, 10000000);
INSERT INTO Songs
	VALUES (2, 'Castle on the Hill', 1, 8000000);
INSERT INTO Songs
	VALUES (3, 'Galway Girl', 1, 5000000);
INSERT INTO Songs
	VALUES (4, 'Perfect', 2, 12000000);
INSERT INTO Songs
	VALUES (5, 'Happier', 2, 6000000);
INSERT INTO Songs
	VALUES (6, 'New Man', 2, 4000000);
INSERT INTO Songs
	VALUES (7, 'Sweet Child O'' Mine', 3, 9000000);
INSERT INTO Songs
	VALUES (8, 'November Rain', 3, 7000000);
INSERT INTO Songs
	VALUES (9, 'Paradise City', 3, 6000000);

CREATE TABLE Albums (
	AlbumID INT
   ,AlbumName VARCHAR(50)
   ,Artist VARCHAR(50)
);

INSERT INTO Albums
	VALUES (1, '÷', 'Ed Sheeran');
INSERT INTO Albums
	VALUES (2, 'Divide', 'Ed Sheeran');
INSERT INTO Albums
	VALUES (3, 'Appetite for Destruction', 'Guns N'' Roses');

Şimdi, CTE kullanarak her albümdeki en popüler şarkıları bulalım:

WITH CTE_AlbumPopularity
AS
(SELECT
		AlbumID
	   ,MAX(Plays) AS MaxPlays
	FROM Songs
	GROUP BY AlbumID)
SELECT
	a.AlbumName
   ,s.SongName
   ,s.Plays
FROM CTE_AlbumPopularity p
INNER JOIN Songs s
	ON p.AlbumID = s.AlbumID
		AND p.MaxPlays = s.Plays
INNER JOIN Albums a
	ON s.AlbumID = a.AlbumID;

Yukarıdakş sorgu, her albümdeki en popüler şarkıları bulur ve şarkı adını, albüm adını ve dinlenme sayısını döndürür. Bu örnekte, CTE_AlbumPopularity adında bir CTE tanımlanmıştır. Bu CTE, Songs tablosundaki her albümün en yüksek dinlenme sayısını bulur ve her bir albüm için bir satır döndürür. Daha sonra, CTE_AlbumPopularity ile Songs tablosu içindeki AlbumID ve Plays alanlarını birleştirerek, her albümdeki en popüler şarkıyı bulan bir sorgu oluşturulmuştur.

CTE kullanmanın avantajları şunlardır:

  • Daha okunaklı ve anlaşılır sorgular yazmanıza yardımcı olur.
  • Karmaşık sorguları daha kolay yönetmenizi sağlar.
  • Performansı artırabilir, çünkü CTE’ler, sorguları daha iyi optimize etmek için kullanılabilir.

Ancak, CTE’lerin dezavantajı, büyük veri kümeleriyle çalışırken bellek kullanımının artmasıdır. Bu nedenle, büyük veri kümeleriyle çalışırken, CTE kullanmadan önce dikkatli bir şekilde düşünmelisiniz.

CTE (Common Table Expressions) yazarken aşağıdaki faktörleri göz önünde bulundurmak da önemlidir:

  1. CTE’nin amacını belirleyin: CTE’ler, sorgunuzu daha okunaklı ve anlaşılır hale getirmek veya karmaşık sorguları daha kolay yönetmek için kullanılır. CTE yazmadan önce, ne tür bir işlevi yerine getirmek istediğinizi belirleyin.
  2. CTE’yi doğru şekilde tanımlayın: CTE’ler, WITH anahtar kelimesi ile başlar ve SELECT ifadesinden önce tanımlanır. CTE’yi tanımlarken, geçici bir tablo oluşturduğunuzu ve bu tablodan sorgunuzu çalıştıracağınızı unutmayın.
  3. CTE’yi sorgunuzda doğru şekilde kullanın: CTE’yi sorgunuzda kullanırken, CTE’yi SELECT, INSERT, UPDATE veya DELETE ifadeleri ile birleştirebilirsiniz. CTE’yi sorgunuzda nasıl kullanacağınızı belirlerken, CTE’nin sonuç kümesinin nasıl kullanılacağına dikkat edin.
  4. CTE’nin performansını değerlendirin: CTE’ler, sorgunuzu daha optimize etmek için kullanılabilir. Ancak, büyük veri kümeleriyle çalışırken, CTE kullanmadan önce performansı dikkatli bir şekilde değerlendirmelisiniz.
  5. CTE’nin okunaklı olmasını sağlayın: CTE’ler, sorgunuzu daha okunaklı ve anlaşılır hale getirmek için kullanılır. Ancak, CTE’nin okunaklı olması için, CTE’yi olabildiğince açıklayıcı bir şekilde adlandırın ve tablo ve sütun isimlerini anlaşılır bir şekilde seçin.
  6. CTE’nin yeniden kullanılabilirliğini düşünün: CTE’ler, yeniden kullanılabilir kod parçaları oluşturmak için kullanılabilir. CTE’yi yeniden kullanmak isterseniz, CTE’nin amacını belirleyin ve CTE’yi yazarken okunaklı ve anlaşılır bir şekilde adlandırın.

CTE’leri yazarken, sorgunuzu daha okunaklı ve anlaşılır hale getirmek için kullanırken, performansı ve yeniden kullanılabilirliği de göz önünde bulundurmanız önemlidir.

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

112 Kez Okundu

Yavuz Selim Kart

Yazılım ve veri tabanında bildiklerimi anlatmaya gayret ediyorum. Halen birçok programlama dili üzerinde araştırmalar yaparak kendimi geliştiriyorum. Bunlar haricinde Grafik Tasarım ve Wordpress konularına da ilgim bulunmakta. SEO ve Sosyal medya yönetimleri hakkında da bilgim mevcuttur. Kısaca çok çalışmayı seven azimli biriyim.

You may also like...

Yazı kopyalamak yasaktır!