28 Mayıs 2018 Pazartesi

Sql Server Tips 8-Cast ve Convert Arasındaki Farklar


Bu makalede, verileri bir türden diğerine dönüştürmek istediğimizde önemli bir farklılık olup olmadığını anlamak için CAST ve CONVERT işlevlerini inceleyeceğiz.

CAST ve CONVERT fonksiyonları çoğu durumda birbirinin yerine kullanılabilir olduğundan , birinin diğerinden daha iyi olup olmadığını merak ediyor olabilirsiniz.


CAST ve CONVERT Arasındaki Benzerlikler
Birçok yönden CAST ve CONVERT benzerdir. Her ikisi de verileri bir türden diğerine dönüştürmek için kullanılır. Sözdizimlerinin farklı olduğunu düşünürsek, her iki işlev de değerleri bir formasyondan diğerine dönüştürür.
İkisi arasında performans farkı yoktur

CAST ve CONVERT Arasındaki Farklar
ANSI-SQL belirtiminin bir parçasıdır; Oysa CONVERT değildir.

CONVERT en önemli farkı, biçimlendirme için kullanılan isteğe bağlı stil parametresini kabul etmesiyle yatmaktadır.
Aşağıdaki örnekte olduğu gibi, bir DateTime veri türünü Varchar'a dönüştürürken, YYYY/AA/GG veya AA/GG/YYYY gibi sonuç tarihlerini belirtebilirsiniz.

SELECT CONVERT(VARCHAR,GETDATE(),101) as MMDDYYYY,
       CONVERT(VARCHAR,GETDATE(),111) as YYYYMMDD

Aşağıdaki örnekte olduğu gibi, bir DateTime veri türünü Varchar'a dönüştürürken, YYYY/AA/GG veya AA/GG/YYYY gibi sonuç tarihlerini belirtebilirsiniz.

CAST veya CONVERT Hangisini Kullanmalıyım?
Dönüşüm esnasında özel bir formatlama ihtiyacı olmadıkça CAST kullanmaya devam etmeliyiz.
CAST Kullanımının performans açısından bir eksikliği yoktur.
CAST ANSI-SQL uyumlu olduğu için diğer veritabanlarında da kullanılmaya uygundur.

9 Mayıs 2018 Çarşamba

SQL Server Tips 7-SQL Server TABLE SCAN, INDEX SCAN VE INDEX SEEK Arasındaki Farklar


SQL Server'da datalar table üzerine kaydedilirken  tanımlama yapılmadığı sürece sıralı olarak diskte tutulmazlar. Bu tip tablelara Heap Table adı verilir. Heap Table üzerine yeni bir kayıt eklendiğinde rastgele data pageler üzerine yazılır. Heap table üzerinde herhangi bir kayıt arandığı zaman tüm dataya erişilip aranan kayıtla karşılaştırılır. Kayıt bulunsa bile başka kayıtlar bulunma ihtimali olduğu için table üzerindeki tüm kayıtlarla karşılaştırma işlemi yapılmak zorundadır.

Bu işleme TABLE SCAN işlemi denir. Çok yoğun dataların olduğu tablelarda bu arama işlemi çok maliyetli olacağı için kullanılmaz.

INDEX SCAN işleminde ise  tablo üzerinde index olmasına rağmen SQL Server kayıtlara TABLE SCANda olduğu gibi satır satır erişir.  SQL Serverın bu şekilde işlem yapmasının sebebi sorgu sonucunda çok fazla kayıt döndürüleceğine karar vermesinden dolayı  satır satır erişmenin daha karlı olacağına karar vermesinden dolayıdır.  Bu sebeble INDEX SCAN işlemi ile TABLE SCAN işlemi hemen hemen aynıdır.

INDEX SEEK işlemi ise veriye erişirken Clustered veya Non-clustered olan bir indexin kullanıldığını bu sayede sadece istenilen verilere eriştiğimizi göstermektedir. Bu nedenle Index Scan yerine Index Seek tercih edilir. Index Seek performans açısından en üst noktadır.

7 Mayıs 2018 Pazartesi

SQL Server Tips 6-UNION ve UNION ALL arasındaki fark nedir


Bazen birden çok tablodan veya viewden veriyi tek bir kapsamlı veri kümesine birleştirmeye ihtiyaç vardır. Bunlar aynı veritabanındaki benzer tablolar olabildiği gibi farklı veritabanlarındaki veya farklı serverlarda bulunan veritabanlarındaki tablolar arasında olabilir.

Biz burada UNION ve UNION ALL nasıl kullandığına ve arasındaki farklara bakacağız.

Temel olarak iki komutta birden çok veri kümesini bir veri kümesinde birleştirmeye yarasada aralarında bir fark vardır.

UNION komutunda iki tablonun benzer satırları birleştirilir. Satırlarda DISTINCT işlemi uygulanır. Yinelenen satırlar getirilmez.

UNION ALL komutunda ise yinelenen satırlar kaldırılmaz.  Yinelenen satırlar kaldırılmadığı için işlem hızlıdır.

  • Her sorguda aynı sayıda sütun bulunmalıdır.
  • Her sütun, uyumlu veri türlerine sahip olmalıdır.
  • Son sonuç kümesinin sütun adları ilk sorgudan alınır.
  • ORDER BY ve  COMPUTE cümleleri sadece her bir sonuç kümesinde değil, genel sonuç kümesi için yayınlanabilir.
  • GROUP BY ve HAVING cümleleri sadece her bir sonuç kümesi için verilebilir ve genel sonuç kümesi için geçerli değildir.

2 Mayıs 2018 Çarşamba

SQL Server Tips 5-SQL Sequence ile Identity Column Arasındaki Farklar


Bugünkü yazımda  sizlere SEQUENCE ile IDENTITY COLUMN arasındaki farklılıkları anlatmak istiyorum. Bircoğumuz SSMS açınca içinde SEQUENCE objesinin farkında değilizdir. Oracle uzun zamandan buyana var olan bu obje SQL Server 2012 ile hayatımıza girmiştir.

 SEQUENCE tanımlanan değerler arasında numeric ve sıralı  artan veya azalan sayılar üretilir. Bir SEQUENCE birden fazla tablo için birbirini takip eden sayılar üretilebilir.

CREATE SEQUENCE MySEQUENCE
    START WITH 1
    INCREMENT BY 1 ;
GO

SEQUENCE Kullanımı
SELECT NEXT VALUE FOR MySequence

IDENTITY Sütunlar ise otomatik artan sütunlardır.  SQL Serverda bir alana IDENTITY olarak özellik tanımladığımızda, ilgili tabloya herhangi bir satır eklediğimizde bu IDENTITY özelliği tanımlanmış sütun değeri otomatik olarak artacaktır.  IDENTITY SEED başlangıç miktarı , IDENTITY INCREMENT ise artış miktarıdır.

CREATE TABLE MyIndentity
(

 NameID int IDENTITY(1,1),
 FirstName varchar (25),
 MiddleInt char(1),
 LastName varchar(40)
);

INSERT MyIndentity
(FirstName, MiddleInt, LastName)
VALUES
('Joe', 'K', 'Smith');

INSERT MyIndentity
(FirstName, MiddleInt, LastName)
VALUES
('Jane', 'L', 'Doe');

SELECT * FROM MyIdentity

Nitelik
Sequence
Identity
Object Seviyesi
Database
Table
Limit
Limit Belirlenebilir
INT ve BIG INT Data Tipinde Limitlidir
Values
Uygulamalar NEXT VALUE FOR ile çağrılabilir
Bir tabloya INSERT olduğunda oluşur.
Miktar
Kurulumda INCREMENT olarak beyan edildi ve herhangi bir şey olabilir. Artan sayıların yerine dizinin alçalmasına neden olacak negatif bir sayı olabilir.
Kurulumda INCREMENT olarak beyan edildi ve herhangi bir pozitif sayı olabilir, sayılar yükselir
Kapsam
BirTransaction kapsamı dışında oluşturuldu
Bir Transaction Oluşturuldu
Numara Atama
Sıralar önceden tahsis edilebilir (örnek bana 1-25 atar)
Önceden ayrılamaz.
Boşluklar
Boşluklar Verilebilir
Boşluklar Verilebilir
Benzersizlik
Numaralar Sıfırlanıp yeniden kullanılabilir
Benzersizdir. Primary Key olarak kullanılabilir.

Sql Server DateTime Veri Tipindeki Datayı Türkçe Formatında Göstermek

  SQL'de tarihleri farklı formatlarda göstermek için FORMAT fonksiyonunu kullanabilirsiniz. Türkçe kısa tarih formatı genellikle "...