SQL Server 2005 T-SQL
TSQL, veri sorgulama ve veritabanını yönetmemizi kolaylaştıran ifadeleri içeren bir komut kümesidir. DML, DDL ve DCL adında 3 temel unsur içerir. Makale içerisinde de DML sorguları üzerinde yoğunlaşacağım.
DML Data Manipulation Language yani veri manipulasyon işlemleri, bizim sıklıkla kullandığımız SELECT, INSERT, UPDATE ve DELETE ifadelerini içermektedir. SQL Server 2005 ile gelen yenilikleri bu sorgular için anlatıyor olacağım.
T-SQL ifadelerine eklenen yeni deyimlerle birlike bu bahsettiğim DML deyimlerinin kapsamı biraz daha genişlemiş durumdadır. Bunları kategoriler halinde incelersek
- Derecelendirme İfadeleri
- Geliştirilmiş TOP Operatörü
- CTE (Common Table Expressions)
Derecelendirme İfadeleri
Derecelendirme ifadelerinin temel amaçlarını sıralamak gerekirse veriyi daha verimli analiz edebilme ve daha az kod yazarak daha hızlı sorgular çalıştırabilme olarak sıralayabiliriz. Bu derecelendirme fonksiyonarından bazılarını sıralamak gerekirse;
-ROW_NUMBER
-RANK
-DENSE_RANK
-NTILE
ROW_NUMBER
Bu ifade, sıralama yapısı oluşturarak, bu sıralamaya göre her kaydın değerini sorgu sonucuna ekler.
Örnek:
SELECT ROW_NUMBER() OVER (ORDER BY ad)AS satir, ad, soyad
FROM ornek
ORDER BY ad

Bu sorgu ile,döndürülen her bir kayıt için ayrı bir kolon içerisinde satır numarasını görüntüledik.
ROW_NUMBER ifadesi satır numarası göstereceğimiz gibi, veri üzerinde sayfalama işlemleri için de rahatlıkla kullanabiliriz.
Örnek:
SELECT *
FROM (SELECT ROW_NUMBER() OVER (ORDER BY ad)AS satir,ad,soyad FROM ornek) X
WHERE satir BETWEEN 2 AND 4

Burada satır numarası 2 ile 4 arasında bulunan tüm kayıtların listesini getirdik. Buradaki 2 ve 4 değerlerini dinamikleştirerek, kayıtlarımızı rahatlıkla sayfalayabiliriz.
Bölüştürülmüş Sıra Numaraları Oluşturma
Sıra numaraları, bölüştürülmüş biçimde de rahatlıkla sorgu ifadesinde gösterilebilir. Bu işlem için PARTITION BY deyimini kullanacağız
SELECT ROW_NUMBER() OVER (PARTITION BY soyad ORDER BY ad)as satirno,ad,soyad
FROM ornek
ORDER BY soyad,ad

RANK ve DENSE_RANK
Bu iki ifade, ROW_NUMBER ile temelde benzer işleve sahiptir. Ancak sıralama yapılan kolonun aynı değerleri için sıra numarasının da aynı olmasını sağlar. İki ifade arasındaki tek fark, RANK ifadesinde kayıt sırasına göre, DENSE_RANK ifadesinde ise grup sırasına göre değer verilir.
Örnek:
SELECT ad, soyad,
RANK() OVER(ORDER BY soyad DESC) AS derece,
DENSE_RANK() OVER(ORDER BY soyad DESC) AS grupderece
FROM ornek
ORDER BY soyad DESC

NTILE
Sorgu sonucunda dönen kayıt kümesini, herhangi bir kolonun değerine bakarak bölüştürme işlemi yapabilirsiniz. Bu işlem için NTILE ifadesini kullanacağız. Yapacağımız işlem, öğrenci notlarını içeren kolonun değerine bakarak, öğrencilerin seviyesini (1,2,3,4,5) şeklinde rakamsal olarak başka bir kolon içerisinde göstermek olacak.
SELECT ad, soyad, sonuc,
NTILE(5) OVER (ORDER BY sonuc)as seviye
FROM ornek
ORDER BY sonuc

Son değineceğim konu da TOP operatöründeki yenilikler olacak
TOP Operatöründeki Yenilikler
Daha önceki kullanımıyla tablodan ilk n kayıdın getirilmesini ya da kayıtların belli bir yüzdelik kısmının getirilmesini sağlayabiliyorduk. Bu operatörün varolan özellikleri korunmakla birlikte üzerine yenilikler ekleyip kapsamı genişletmiş durumdadır.
TOP operatörü için istediğimiz kayıt sayısını ya da listelenecek kayıt yüzdesi miktarını artık parametrik değerler ile de kullanabileceğiz. Bununla birlikte dilediğimiz gibi prosedürümüzde parametre olarak bir değer verip, prosedürden dönecek satır sayısını, kayıt yüzdesini dinamik olarak değiştirmemizi sağlayabilecek.
Örnek:
DECLARE @n int
SET @n = 3
SELECT TOP (@n) ad,soyad FROM ornek
ORDER BY ad

Bu sorgu ifadesiyle ilk 3 kayıdın sorgudan sonuç olarak getirilmesini sağladık.
Bu operatörle gelen yeniliklerden diğeri de operatörün INSERT, UPDATE DELETE işlemleri için de kullanılabilmesidir.
Özet
Bu makalede SQL Server 2005 ile gelen T-SQL yenilikleri inceledik. SQL Server 2005 T-SQL yenilikleri ile artık daha az kod yazarak daha hızlı sorgular oluşturabileceğiz.
Umarım faydalı olmuştur. Her türlü görüş ve önerileriniz için bana ulaşabilirsiniz
Volkan UÇARKAYA
Etiketler : 2005, server, sql, t