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:
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.