SQL SERVER etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
SQL SERVER etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

5 Kasım 2016 Cumartesi

2. SQL Server 2012 ve Yeni Analitik Fonksiyonlar - LAG() Fonksiyonu

  • LAG() fonksiyonu 2012 ile gelen 8 yeni analitik fonksiyondan biridir.
  • Bu fonksiyon extra bir join yapmadan bir önceki satırdaki verileri mevcut satırda işlememize imkan verir. LEAD() fonksiyonu mantığı ile çalışır sadece terse işlemektedir.
Daha iyi anlamak için aşağıdaki örneklerimizi inceleyebiliriz.

Kullanımı;

LAG( scalar_expression [ ,offset ] , [ default ] )
    OVER ( [ partition_by_clause ] order_by_clause )


Örnek Veri tabanımız;


Örnek 1;

Açıklama 1;
İlk örneğimizde en basit anlamda LAG() fonksiyonunun kullanımını gördük. Mevcut satırımızda bir önceki satırda istediğimiz değerini gösteriyoruz. Eğer değer yok ise NULL olarak gözükmekte.

Örnek 2;

   Açıklama 2;
Bu örneğimizde ufak bir değer ataması yaptık. Bir önceki satırdaki Value değişkeni ile mevcut satırdaki Value değerini birbirinden çıkarıyoruz. Bunun gibi satır kontrollerini farklı değerler ve satırlar üzerinde de yapabiliriz. Böylece elimizdeki sorgudaki istediğimiz alanları extra join işlemi yapmadan karşılaştırabiliriz.

Örnek 3;
   Açıklama 3;
Bu örneğimizde kaç satır önceki değerler ile karşılaştırma yapıp mevcut satırda kullanacağımızı gösterdik. Bu değeri daha da arttırabilirsiniz. Böylece mevcut satırda istediğiniz n. satır önceki değerleri çağırıp istediğiniz gibi kullanabilirsiniz. 3 satır önceki değer yok ise NULL gelmekte.

Örnek 4;

   Açıklama 4;
Bu örneğimizde bir önceki kayıt eğer yok ise LAG() fonksiyonu getiremediği için NULL ataması yapıyordu. Bu tarz durumlarda NULL ise hangi değeri atayacağımız belirledik. Örneğimizde de NULL değerlere 0.00 ataması yapıldı.

Örnek 5;
   Açıklama 5;
Son örneğimizde ise dikkat ederseniz PARTITION kullandık. Böylece hem hızlı hem performanslı olan bu yapıda istediğimiz LAG() işlemini hangi alan üzerinden yapacağımız belirtiyoruz. Tabi bu durumda NULL değerlerimiz bir hayli fazla olmakta. Çünkü partition yaptığımız Name değerinde satırların sayısı az.

20 Ocak 2013 Pazar

SQL Server da Temp(Geçici) ve Değişken(Variable) Tabloların Kullanılması

  • SQL Serverda Geçici tablo oluştururken iki seçeneğimiz bulunmakta. Bunlar kullanım şeklinize göre farklılık gösterebilir.
  • Birinci kullanım şeklimiz geçici tabloları (Temporary tables).
  • İkinci kullanım şeklimiz değişken tablolar (Table variables). 
  • Bu iki yönteminden birbirlerine karşı avantaj ve dezavantajları bulunmaktadır.
1-) Geçici Tablolar (Temporary Tables)
  • Temp Tabloların normal tablolardan başlıca farklı system database lerden olan tempdb içinde tutuluyor olmalarıdır.
  • Oluşturduğumuz tablonun temp table olduğunu SQL Servera bildirmek için başına '#' işareti koyarız.
  • SQL Serverda geçici tablolara sadece bulundukları ortamlardan erişilebilir. Eğer temp table a global olarak diğer ortamlardan da erişilmesini istiyorsak o zaman global temp table kullanmamız gerekmektedir.
  • Global temporary tables (Genel geçici tablolar) tanımlamak için temp table dan farklı olarak CREATE TABLE dediktenden sonra tablomuzun ismini vermeden önce '##' (2 adet) koyarız.
  • Global temporary tables ın bütün özellikleri temp table ile aynıdır.
  • Ayrıca oluşturduğumuz tabloyu kullanıdıktan sonra silmeyi unutmayalım. Unutsak dahi oturum kapandığında SQL Server otomatik bütün temp table ları silecektir. 
SÖZ DİZİMİ:

CREATE TABLE #TemporaryTable(
     number INT PRIMARY KEY,
     name NVARCHAR(50),
     surname NVARCHAR(50)
)





--Direk sorgu sonucu gelen listeyi temp tabloya eklemek için;

SELECT * INTO #TemporaryTable FROM Person


--Tablomuzu silmek için;
DROP TABLE #TemporaryTable  

NOT: SQL Serverda '#' ile başlayan tablolar SQL Server durduğu ana kadar saklanır. Fakat tablolarımızı tempdb.. altına kendimiz normal tablo ekler gibi eklersek tablolarımız SQL Server kapatılana kadar orda saklanır. SQL Server kapatıldığında temp tablolarımızın silinmesini istiyorsak bu yapıyı kullanabiliriz.


  1-) Değişken Tablolar (Table Variables)

  •  Değişken tablolarda aslında geçici tablolara benzemektedir. Fakat fark olarak oluşturduğumuz tablonun bir kısmı tempdb de bir kısmında Sunucu olarak kullanıdığımız SQL Server belleğinde tutulmaktadır.
  • Değişken tablolarda da geçici tablo gibi bir yapı vardır. Değişken tablo oluşturduğumuz zaman tablo isminin başına '@' işareti koyarız.
  • Değişken tablolara erişim geçici tablolara göre daha hızlı olmaktadır. Fakat değişken tablolara fazla veri yüklemek belleği dolduracağından performans kaybına da yol açabilir.
  • Değişken tablolar, kullanıcı tanımlı fonksiyonlar (User Defined Functions) içinde kullanılabilirken, geçici tabloların UDF içinde kullanımı mümkün değildir. 
  • Stored Procedure ler içinde 2 tablo yapımızıda kullanabiliriz.
  • Değişken tablolar üzerinde index tanımı yapamayız fakat geçici tablolar üzerinde yapabiliriz.
  • Değişken tablolar tanımlandıktan sonra (declare) alter table ile değiştiremeyiz.
 SÖZ DİZİMİ:

DECLARE @TemporaryTable TABLE (
     number INT PRIMARY KEY,
     name NVARCHAR(50),
     surname NVARCHAR(50)
)

1 Aralık 2012 Cumartesi

T-SQL'de sp_rename System Prosedürünün Kullanılması

  •  SQL de nesnelerimizin adlarını değiştirmek için sp_rename sistem procedürünü kullanılırız.
SÖZ DİZİMİ:

exec sp_rename @object_name, @new_object_name, @object_type

1-) Tablo adının değiştirilmesi 

SELECT object_id('Birds')
exec sp_rename  'Birds','Kuslar'


SELECT object_id('Birds')
SELECT * FROM Birds
Invalid Object Name 'Birds' hatası döndürecektir.

SELECT * FROM Kuslar
Sorgusunu çalıştırarsınız, Birds tablosundan taşıdığımız kolonları göreceksiniz.
İçerisinde data olduğu için kayıtlı verileri görebilirsiniz.



2-) Kolon adının değiştirilmesi : 

  • Biraz önce create ettiğimiz ve adını Kuslar olarak değiştirdiğimiz tablonun name kolonunu Adı olarak değiştirelim..
  • sp_rename prosedürünün bizim şimdiye kadar kullanmadığımız, default u 'object' olan bir parametresi daha var.  
  • Kolonlar, sysobjects de yer almazlar ve birer database objesi değillerdir ve tablo ismi olmadan da birşey ifade etmezler. 
  •  x tablonun y kolonu diye saklanırlar ve çağırılırlar.  Bu yüzden ismini değiştirdiğimiz nesnenin kolon tipinde olduğunu ve hangi tabloya ait olduğunu  da söylememiz gerekir.
exec sp_rename 'Kuslar.Name','Adı','COLUMN'

Kuslar tablomuza ait olan name isimli kolonu Adı olarak değiştirdik.

SELECT * FROM Kuslar
sorgusunu çağırarak kolon adının değiştiğini görebiliriz.


3-) Index değerinin değiştirilmesi
  • sp_rename ile indexleri de yeniden adlandırabiliriz.
 exec sp_rename 'Kuslar.BirdId', 'KusNo','INDEX'


NOT: sp_rename ile syscomments de bulunan text alanındaki nesne ismini değiştiremeyiz.
Bu yüzden 'function','stored procedure','trigger' ve 'view' gibi programlanabilir nesneler için sp_rename i kullanmamalıyız.
Bu tür nesneler için sp_rename yerine önce bu nesleri drop(silme) edip sonra istediğimiz yeni isim ile yeniden create(oluşturma) edebiliriz.

NOT: Oluşturulan her bir nesne nin bir id si vardır ve sql serverda nesneler id leri ile saklanırlar.
object_id system function ını kullanarak objenin id sini öğrenebilir ve varolup olmadığından da böylecek emin olabiliriz.
object_id (objectname) null döndürüyorsa o isimde nesne ilgili database de yok demektir.

6 Eylül 2012 Perşembe

50. PRINT Kullanımı

  • Değişkenlerin değerlerini, dönen hataları vb. diğer ihtiyaç duyulan sonuçların direk ekranda gisterilmesinde PRINT Komutu kullanılır.
  • Özellikle Debug işlemlerinde ihtiyaç duyulur.
Söz Dizimi: PRINT 'sqltr.blogspot.com'


Ders 51' e geçebilirsiniz.

49. DECLARE & SET Kullanımı

  • SQL'de değişken tanımlamalarında DECLARE komutu kullanılır.
  • Tanımlıdığımız değişken değer atama işlemlerinde SET komutu kullanılır.
Söz Dizimi: DECLARE @<Değişken_Adı> <Değişken_tipi>



Ders 50'ye geçebilirsiniz.

12 Ağustos 2012 Pazar

SQL Server'da Stored Procedure

  • SQL ifadeleri SQL Serverda Stored Procedure olarak saklanmaktadır. 
  • Basit örneklemek gerekirse " SELECT * FROM Birds " ifadesini saklayabiliriz. Ama büyük yapılarda kullanılan Stored Procedureler daha komplekstir. 
  • Stored Procedure'ler birden fazla tablonun farklı JOIN işlemleri ile bağlanmasıyla ve parametreli veya parametresiz değerlerin WHERE koşullarıyla kısıtlanmasıyla istenilen sonuça hızlı ve sade bir şekilde ulaşmamızı sağlar.

ÖRNEK:
CREATE PROCEDURE Person_Selection
@yas INT

AS

IF(Yas> 19)
SELECT * FROM Person WHERE Yas > @yas ORDER BY Yas
ELSE
SELECT * FROM Person WHERE Yas> @yas and Eriskin=1 ORDER BY Yas

GO