16 Temmuz 2017 Pazar

EXCEPT ve INTERSECT Operatörleri

Bu bu iki operatör iki sorgunun sonuçlarını karşılaştırarak farklı değerleri döndürür.

INTERSECT operatörü iki sorgu sonucu karşılaştırırak kesişimini verir.

USE AdventureWorks2014;
GO
SELECT ProductID
FROM Production.Product
INTERSECT
SELECT ProductID

FROM Production.WorkOrder ;

EXPECT operatörü ise iki farklı sorgu sonucunun karşılaştırırken intersect operatöründen farklı olarak sadece ilk sonuç setinde olup ikici sorgu sonucunda olmayan kayıtları listelememizi sağlamaktadır.

USE AdventureWorks2014;
GO
SELECT ProductID
FROM Production.Product
EXCEPT
SELECT ProductID

FROM Production.WorkOrder ;

12 Temmuz 2017 Çarşamba

UNION ve UNION ALL Operatörleri


UNION operatoru iki veya daha fazla SELECT deyiminin sonuc kümesini birleştirmek için kullanılır

Her SELECT deyimi aynı sayıda kolon içermelidir ve sutunlarda benzer veri tipleri olmalıdır. Her SELECT deyiminde aynı sıra ile olmalıdır.


UNION operatörü varsayılan olarak yalnızca farklı değerleri seçer. Yani yinelenen değerlerden sadece bir tanesini getirir. Yinelenen değerlere izin vermek için UNION ALL kullanılmaktadır.

-- Uses AdventureWorks 

IF OBJECT_ID ('dbo.Gloves', 'U') IS NOT NULL 
DROP TABLE dbo.Gloves; 
GO 
-- Create Gloves table. 
SELECT ProductModelID, Name 
INTO dbo.Gloves 
FROM Production.ProductModel 
WHERE ProductModelID IN (3, 4); 
GO 

-- Here is the simple union. 
-- Uses AdventureWorks 

SELECT ProductModelID, Name 
FROM Production.ProductModel 
WHERE ProductModelID NOT IN (3, 4) 
UNION 
SELECT ProductModelID, Name 
FROM dbo.Gloves 
ORDER BY Name; 

GO  

7 Temmuz 2017 Cuma

sp_msforeachdb Stored Procedure Kullanarak Tüm Databaselerin CheckDB Yapılması

sp_msforeachdb stored prosedürü master veritabanı altında bulunan oldukça yararlı bir stored prosedürdür. Bu stored prosedür ile tüm DBlerin içinde dönebilir ve istediğiniz işlemi tüm dbler üzerinde yapabiliriz.

Aşağıdaki scriptte tüm databaselerin üzerindeki tüm nesneler  üzerinde dolaşarak  mantıksal ve fiziksel veri bütünlüğü  kontrolü yapabiliriz.

exec sp_MSforeachDB 'DBCC CHECKDB (?) WITH ALL_ERRORMSGS, EXTENDED_LOGICAL_CHECKS, DATA_PURITY'

6 Temmuz 2017 Perşembe

OFFSET ve FETCH NEXT Özelliğinin Kullanımı

Bugünkü yazımda sizlere SQL Server 2012 ile yeni gelen özelliklerden birisi olan  OFFSET  ve FETCH NEXT özelliğinden bahsetmek istiyorum. Bu özellikler verileri sayfalamak (paging) için kullanılır.

OFFSET-FETCH kullanımındaki kısıtlamalar

  • OFFSET-FETCH yalnızca ORDER BY yan tümcesi ile kullanılabilir.
  • FETCH ile OFFSET maddesi zorunludur. ORDER BY ... FETCH OFFSET olmadan kullanılamaz.
  • TOP, aynı sorgu ifadesinde OFFSET ve FETCH ile birleştirilemez.

ÖRNEK1  Sıralama edilen sonuç kümesinden ilk 10 satırı atlanır ve kalan satırları döndür.

SELECT FirstName + ' ' + LastName FROM  [Person].[Person] ORDER BY FirstName  OFFSET 10 ROWS;

ÖRNEK2  Sıralama edilen sonuç kümesinden ilk 10 satırı atlanır ve kalan 5 satırı döndür.

SELECT FirstName + ' ' + LastName FROM  [Person].[Person] ORDER BY FirstName  OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY;

OFFSET  ve FETCH NEXT Özelliğinin Kullanımı 

5 Temmuz 2017 Çarşamba

ISNULL, NULLIF ve COALESCE Fonksiyonları

SQL Server'ın ISNULL () fonksiyonu, NULL değerlerine nasıl davranılmasını istediğinizi belirtmek için kullanılır. Aşağıdaki örnekte MaxQty NULL ise 0 olarak değer döndürmesi sağlanmıştır.

USE AdventureWorks2014; 
GO 
SELECT Description, DiscountPct, MinQty, ISNULL(MaxQty, 0.00) AS 'Max Quantity' 
FROM Sales.SpecialOffer; 
GO 

NULLIF fonksiyonunda ise iki değer birbirine eşit ise  NULL değer döndürecektir.

USE AdventureWorks2014; 
GO 
SELECT ProductID, MakeFlag, FinishedGoodsFlag,  
   NULLIF(MakeFlag,FinishedGoodsFlag)AS 'Null if Equal' 
FROM Production.Product 
WHERE ProductID < 10; 
GO 
COALESCE  ise birden fazla parametreyle çalışır ve eğer kolon null ise null olmayan ilk parametreyi getirir.

USE AdventureWorks2014; 
GO 
SELECT Name, Class, Color, ProductNumber, 
COALESCE(Class, Color, ProductNumber) AS FirstNotNull 

FROM Production.Product

TRY_CONVERT, TRY_PARSE ve PARSE Fonksiyonları

Bugünkü yazımda sizlere SQL Server 2012 ile gelen TRY_CONVERT, TRY_PARSE ve PARSE fonksiyonlardan bahsetmek istiyorum

TRY_CONVERT fonksiyonu bir veri tipinden diğer veri tipine dönüşüm için kullanılır. CAST ve CONVERT fonksiyonlarından farkı ise belirtilen veri tipine dönüştürme gerçekleşmez ise fonksiyon hata vermez. Null değer döndürür.

SELECT
    CASE WHEN TRY_CONVERT(float, 'test') IS NULL
    THEN 'Cast failed'
    ELSE 'Cast succeeded'
END AS Result;
GO

TRY_PARSE fonksiyonu TRY_CONVERT gibi çalışır. TRY_PARSE fonksiyonu string fonksiyonundan diğer fonksiyonlara çevrim yapar.

SELECT
    CASE WHEN TRY_PARSE('Aragorn' AS decimal USING 'sr-Latn-CS') IS NULL
        THEN 'True'
        ELSE 'False'
END
AS Result


PARSE fonksiyonu, CAST ve CONVERT fonksiyonlarından farklı olarak sadece string dataları girdi olarak kabul eder. Bir string değeri  tam sayı, date ve time  veri tiplerine dönüştürmek için kullanılır.  Bu dönüşümde kültür kodu parametre olarak verilebilir.

SELECT PARSE('Monday, 06 august 2012' AS Datetime2  USING 'tr-TR') AS [PARSE Function Result]

GO

CAST ve CONVERT Fonksiyonları

Cast ve Convert Fonksiyonları SQL Serverda Tür dönüşümü için kullanılan fonksiyonlardır.  Her ikisininde yaptığı iş aynıdır. Sadece Convertte stilini değiştirebiliriz.

CAST için Syntax aşağıdaki gibidir.
CAST ( expression AS data_type [ ( length ) ] )

CONVERT için Syntax ise aşağıdaki gibidir.

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

-- CAST Kullanımı
USE AdventureWorks2014;
GO
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice
FROM Production.Product
WHERE CAST(ListPrice AS int) LIKE '3%';
GO

-- CONVERT Kullanımı
USE AdventureWorks2014;
GO
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice
FROM Production.Product
WHERE CONVERT(int, ListPrice) LIKE '3%';
GO

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