SQL Update Join Kullanımı



Merhaba bu yazımızda çok işinize yaracak bir Update kullanım şeklini anlatacağım.

Bizim kadar çok kayıt düzeltmesi yapıyorsanız kesinlikle ihtiyacınız olacak ve hayat kurtaracaktır.
Sorgularda kullandığımız Join syntax ı aynen geçerlidir. Önce syntax ı verelim sonra da örnekle bitiririz.

Kullanımı:

UPDATE 
table1  SET kolon1 = ifade 
FROM tablo1  
INNER JOIN tablo2 ON tablo1.kolon1 = tablo2.kolon1
WHERE kriter


Örnek:

Bu örnekte Sipariş tablosundaki Sevk Tarihi ile Sevkıyat  tablosundaki tarihlerin uyumsuz olanları eşitledik

UPDATE 
Siparis SET SevkTarihi = Sevkiyat.Tarih 
FROM Siparis
INNER JOIN Sevkiyat ON Siparis.ID = Sevkiyat.SiparisID
WHERE Sevkiyat.SevkTarihi != Sevkiyat.Tarih


Konu bu kadar kolay.

SQL Hata Çözümü - Cannot open user default database. Login failed. Login failed for user



Arkadaşlar merhaba;

Bu yazımızda SQL ile ilgili çok sık olmasa karşılaşabileceğimiz bir hatanın çözümüne bakacağız.

"Cannot open user default database. Login failed. Login failed for user" 



      SQL Hatası derken baştan söyleyelim bu hatanın sebebi yüksek ihtimalle bizden kaynaklıdır.
Yani kullanıcı ya varsayılan olarak atanan Database in silinmesinden kaynaklı bir hata.

Çözümüne gelecek olursak hızlıca anlatalım.

1. Adım: Kullanıcı giris ekranının da Options (Seçenekler) butonuna basıyoruz.


2. Adım: Connetion Properties (Bağlatı Özellikleri) sekmesine gidiyoruz.

,
3. Adım: Data sonra database listesinden istediğiniz bir database i seçebilirsiniz. Ben gelde  master veya msdb veritabanlarından birini seçiyorum.



4. Adım: Son olarak Login (Giriş)  yapabilirsiniz. 

İşlem tamam... umarım işinize yarar.





SQL Server da Tablolar Arası Veri Transferi

SQL SELECT INTO - INTO SELECT


Arkadaşlar merhaba bu yazımız da sql server da, sql komutlarıyla veri transferi konusuna bakacağız.

Bilindiği gibi sql serverda veri taşımanın bir çok yolu var bunların en çok kullanılanları şüphesiz Management Studio nun export/import araçlarıdır.

Ama biz bugün daha öncede bahsettiğim gibi sql scriptleriyle halledebilmenin yollarına bakacağız.
Evet bunun için iki şekilde yapabiliriz
Önce kendimize tablo oluşturarak işe başlayalım.

CREATE TABLE [dbo].[Musteri](
[id] [int] IDENTITY(1,1) NOT NULL,
[Adi] [varchar](50) NULL,
[Soyadi] [varchar](50) NULL,
[Telefon] [varchar](20) NULL
) ON [PRIMARY]

Tablomuzu oluşturduk sıra veri girmeye geldi.

INSERT INTO [dbo].[Musteri] ([Adi],[Soyadi],[Telefon])
VALUES ('Ahmet','CAN','0532988888')

Siz dilediğiniz sayıda kayıt ekleyebilirsiniz.

Şimdi hazırlıklar tamamlandığına göre data transferine başlayabiliriz.

I. Yöntem:
SELECT * INTO Yeni_Musteri FROM Musteri

Bu yöntem de Musteri tablosunda ki kayıları select eder ve Yeni_Musteri adında yeni bir tablo oluşturur ve select ten gelen veriyi insert eder.

Burada SELECT işlemi bildiğimiz sorgulama işlemidir. Belli kriterlere sahip veriyi aktarmak isteyebilirsiniz bunun için WHERE yazmamız yeterli olacaktır.

II. Yöntem:

INSERT Yeni_Musteri2 (Musteri_Adi, Musteri_Soyadi)  SELECT Adi,Soyadi FROM [Musteri] 

Bu yöntemde de zaten var olan bir tablonun içine belli alanları eşleyerek insert yapıyoruz. Yine Select kısmına filtre uygulayabiliriz.
 Burada dikkat edilecek bir husus var.  Eşleştirilecek kolonlar aynı sırayla yazılması gerekiyor yani kaynak alan ve hedef alan aynı sırada olmalı. 

Diğer bir önemli noktada; dikkat ederseniz biz bu yöntemde ID alanlarını taşımadık. Bildiğiniz gibi IDENTITY alanlara kayıt yapamıyor ve düzenleyemiyoruz. 
Peki ID numaralarıyla birlikte taşımak istersek ne yapmamız gerekiyor?

Çözüm:

IDENTITY alanlarının müdahaleye açık hale getiriyoruz.

SET IDENTITY_INSERT Yeni_Musteri2 ON 
            INSERT Yeni_Musteri2 (ID, Musteri_Adi,Musteri_Soyadi)  SELECT ID, Adi,Soyadi  FROM [Musteri] 
SET IDENTITY_INSERT Yeni_Musteri2 OFF


Son olarak bir tavsiye de bulunmak istiyorum. Bu transfer işlemlerinde transaction çalıştırarak yapın. Bir sıkıntı oluşacak olursa uzun aktarım işlemi tekrardan yapmak zorunda kalmazsınız ve veri tutarlılığını korumuş olursunuz. Transaction konusunu da ayrıca ele almayı düşünüyorum.

Faydalı olması dileğiyle.


SQL COALESCE Kullanımı


Merhaba arkadaşlar zaman buldukça yine bir şeyler paylaşmaya çalışacağım.
Bu yazımızda da sql COALESCE fonksiyonundan  çok kısa bir şekilde bahsetmek istiyorum.

Bildiğiniz gibi sql de boşla NULL aynı şey değil. Bazı durumlarda kolonun kesinlikle bir değer döndürmesini isteriz. Bunun için Null kontrolü yapmak zorunda kalırız. Bunlardan en bariz örneği olarak matematiksel işleri verebiliriz. Hata almamak işlemin durumuna göre kontrol ederek uygun bir değerin gelmesini sağlarız.
Peki bugüne kadar ISNULL yöntemini kullandık farkı nedir?
Farkı şudur arkadaşlar; ISNULL() makalesinde de gördüğünüz gibi  iki parametreyle çalışır, COALESCE  ise birden fazla parametreyle çalışır ve eğer kolon null ise null olmayan ilk parametreyi getirir.
Hemen bir örnekle konuyu toparlayalım.

Kullanımı:
SELECT COALESCE (KoloAdi,'Null sa gelecek bir değer-1 ','Parametre-1 Null sa gelecek bir değer-2',...devam eder...,)

Örnek:
SELECT COALESCE(MusteriKodu,PeroselKodu,'yok')  FROM [dbo].[StokHareket] 

Eğer MusteriKodu null ise PersonelKodunu getirir oda null ise yok yazar. Bu şekilde birden çok kolona göre kontrol yapabilirsiniz ve bazen hayat kurtarır.

Son olarak performans dan da bahsederek bitirmek istiyorum yazıyı.
Tabiki diğer fonksiyonlar gibi sorugulara maliyet yüklüyor ve isnull() fonksiyonuna göre biraz daha yavaş olduğunu gözlemledim. Yanılıyorsam burada doğru sonuçları paylaşabilirsiniz.

Sonra ki bir yazımda görüşmek üzere...


Sql Pivot

Merhabalar bu kez sql de az bilinen bir operatörü yani Pivot komutunu incelecegiz.

Pivot komutu Oracle ve Ms Sql gibi SQL tabanlı databaselerin hepsinde vardır.
Normalizasyon kurallarında içinde tasarlanmış tablolar olap şeklinde sorgulamalara izin vermeyebilir. Bu tür durumlar devreye pivot sorgulama girer ve detaylı analiz imakanı verir.

Pivot kısaca ne yapar ?? Tablo da yapısı geregi alt alta sıralanmış olan kayıları yanyana yani sütunlar şeklinde göstermeye yarar.

Sorgu yazmaya başlamadan önce bir konuda sizi uyarmak isterim. Database üzerine pivot sorgu uyğulayabilmek için bir tane prosedürü çalıştırmanız gerekiyor.

sp_dbcmptlevel 'veritabanı_Adı, '90'İsterseniz Prosedürü çalıştırmadan önce isterseniz sorguyu uygulayın nasıl tepki vereceğini, hangi hatayı döndüreceğini görün. Bu size ilerde konuyla ilgili hata çözümünde yardımcı olacaktır.

İsterseniz şimdi sorgumuzu yazalım.

SELECT *
FROM (
SELECT
YEAR(TARIH) [Yıl],
MONTH(TARIH) [Ay],
TOPLAM
FROM SATIS
) TableDate
PIVOT (
SUM (TOPLAM)
FOR [AY] IN (
[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]
)
) PivotTable


Sorgumuzu yazdık şimdi kısaca açıklayalım.
Satır halinde olan satışları listeler. Satış tarihini ay ve yıl olarak ayırdık. Pivot kısmında da Toplam alanını topladık ve toplamları aylara bölerek gösterdik.

Konuyu biraz araştırırsanız bu işlemin tersini uygulayan UnPivot komutunuda kolayca kavrarsınız.

Artık istedigimiz zaman OLAP mantıgında sorgular çekebilir kullanıcılara daha okunur daha ayrıntılı raporlar sunabilirsiniz.

Umarım faydalı olmuştur.

Sql String Fonksiyonları

Merhabalar bu makalemizde sıkca kullandığımız Ms Sql string ifadeleri bir araya toplayarak
ne işe yaradıklarını birer örnekle kısaca anlatmak istedim.

Sql tarafında işleri ne kadar iyi çözümlersek yazılım dilleri trafında kodlar o kadar sadeleşiyor ve olası basit değişiklikler söz konusu olduğunda maliyeti oldukca düşürüyor.

LEFT String ifadeden soldan verilen sayı kadarını gösterir.
SELECT LEFT('ŞEBNEM FERAH',3)
Sonuç:ŞEB

RIGHT Stringten sağdan verilen sayı kadarını gösterir.
SELECT RIGHT('ŞEBNEM FERAH',5)
Sonuç:FERAH

LEN Verilen stringin karakter sayısını döndürür. Buna boşluk karakteride dahildir.
SELECT LEN('ŞEBNEM FERAH')
Sonuç:12

UPPER Küçük harfli verilen stringi büyük harflere çevirir.
SELECT UPPER('fatih')
Sonuc: FATİH

LOWER Büyük harfli verilen stringi küçük harflere çevirir.
SELECT LOWER('FATİH')
Sonuç: Fatih

SUBSTRING Verilen stringten parça almak için kullanılır.
Örnekte verilen parametrelere göre 2 den başlayrak 3 tane karakter al demiş olduk.
SELECT SUBSTRING('FATİH',2,3)
Sonuç: ATİ

REPLACE Verilen karakterleri biribiriyle değiştirir.
Örnekte MAKİNİST kelimelerini PİLOT olarak değiştir dedimiş olduk.
SELECT REPLACE('MAKİNİST AHMET','MAKİNİST','PİLOT')
Sonuç:PİLOT AHMET

STUFF 4 paremetre olarak çalışan bu fonksiyon replace fonksiyonu gibi çalışır ama fark olarak karakter olarak değil verilen indexlere göre değiştirme yapar.
SELECT STUFF('Audi hh',5,3,'TT')
Sonuç:AudiTT

LTRIM Soldan boşlukları alır.
SELECT LTRIM(' RAMBO')
Sonuç:RAMBO

RTRIM Sağdan boşlukları alır.
SELECT RTRIM('RAMBO ')
Sonuç:RAMBO

REVERSE stringi ters çevirir.
SELECT REVERSE('RAMBO')
Sonuç:OBMAR

QUOTENAME Verilen string ifadeyi köşeli parantez [] içine almayı sağlar.
SELECT QUOTENAME ('SELECT')
Sonuç:[SELECT]

REPLICATE Verilen string ifadeyi parametre geçilen sayı kadar tekrarlar.
SELECT REPLICATE('0',10)
Sonuç:0000000000

Faydalı olması umuduyla...

SQL Procedure ile Excel den Sql e Aktarımı

Arkadaşlar bu makalemizde SQL Proc ile excel den sql e SQL veri aktarımını incelicez.

Bir çok konuda oldugu gibi bu konuda da bi kaç farklı yöntem uygulanabilir.
Benim ihtiyacım olduduğunda kullandığım yöntemi sizinle paylaşmak istedim.

OPENROWSET teknigini kullanmak için sql serverinizde ikitane servisin aktif halde olması gerekiyor bunlar 'show advanced options' ve 'Ad Hoc Distributed Queries' servisleridir.

Aşagıda gördüğünüz komutları sql çalıştırırak yada Menüden SQL SERVER 2005/Configration Tools altından resimde gödüğünüz gibi tik işaretli olması gerekiyor.



sp_configure 'show advanced options', 1
reconfigure
go
sp_configure 'Ad Hoc Distributed Queries', 1
reconfigure

Ayarlarımızı yaptıktan sonra sıra geldi proceduremizi yazamaya.

CREATE PROC XLS_AKTARIM
ASDECLARE @KOMUT NVARCHAR(500)
SET @KOMUT='SELECT * INTO Sayfa1$ FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'',''Excel 8.0;Database=C:\test.xls'', [Sayfa1$])'
EXEC( @KOMUT)

Sonuç olarak açıklamamız gerekirse ;
OPENROWSET yöntemini kullanarak Microsoft.Jet.OLEDB.4.0 araçılıgıyla C:\test.xls yolunda ki excele bağlandık ve sanki tabloymuş gibi Sayfa1 deki verileri okuduk.
Select Into ile Sayfa1$ isminde bir tablo oluşturup içine aktardık.

Burda;
Yöntemimiz: OPENROWSET
Sağlayıcımız :Microsoft.Jet.OLEDB.4.0 (Diğer versiyonlar için değişebilir ben office 2003 kullandım.)
Excel versiyonu: Excel 8.0 (Diğer versiyonlar için değişir uygun olanına bakın)
Kaynak Sayfa : [Sayfa1$] (Diğer sayfalar için [Sayfa2$]... olarak değişir)
Hedef Oluşacak Tablo : Sayfa1$ (Siz istediğiniz ismi verebilirsiniz. Ancak veritabanında bu isim varsa zaten kullanımda diye hata verecektir.)

Siz bunu biraz daha geliştirip excel yolunu ve sayfa isimlerini parametre olarak yollayıp daha kullanışlı bir hale getirebilirsiniz.
Konunun sade kalabilmesi için ben o kısmına girmedim.

Umarım faydalı olmuştur.

SQL Procedure ile Dinamik TOPN Sorgusu

Arkadaşlar merhaba;

Bir süredir makale yazmıyordum. Tekrardan bir SQL makale ile giriş yapmak istedim.
Bu yazımızda TOPN komutunun Procudureler aracılığıyla ile parametrik olarak uyğulanmasını işleyeceğiz.

Öncelikle kısaca bir sorgu üzerinde TopN komutu nedir ondan bahsedelim.

SELECT TOP 10 * FROM MUSTERILER
Kullanım şekli böyle olan TOP komutu bize ilk 10 kaydı getirir. TOP 100 yazsaydık ilk 100 kaydı getirirdi.
Peki nerede işimize yarar; ilk aklıma gelen sitemize üye olan ilk 10 kişi kimdir? gibi sorulara cevap verir. Sadece 10 kayıt için bütün kayıtları çekmek çok mantıklı olmayacaktır.

İlk 10 (100) kayıt dedik ama bu herhangi bir ordery by komutu kullanılmazsa ASC yani artan sıralama ile çalışır. Bu durumda ilk N kaydı, order by DESC kullanılırsa son N kaydı getirir.

Bu kadar bilgiden sonra asıl konumuz olan TOPN komutunu parametrik olarak nasıl alınır sorusunu cevaplayalım.

Önce Proceduremizi yazalım:

CREATE PROC TOPN
@ROWCOUNT VARCHAR(10),
@SORTING VARCHAR(3)
AS
DECLARE @KOMUT VARCHAR(MAX)
SET @KOMUT='SELECT TOP '+ @ROWCOUNT +' * FROM MUSTERI ORDER BY ID '+ @SORTING

EXEC (@KOMUT)

Bu kadar olan Procuderemiz iki tane parametre alır.
Birincisi TOP için getirmek istediğiniz kayıt sayısı diğeri ise sıralama yönüdür (ASC veya DESC)

Önceden de bahsettiğim gibi asc kullanırsanız ilk girilen kayıtları desc kullanırsanız son girilen kayıtları getirir.
Query Analyzer da test etmek için
EXEC TOPN 5,'ASC'

Faydalı olması umuduyla... hatıram olsun...

SQL CharIndex Kullanımı

Merhaba arkadaşlar;

SQL üzerinde çalışmalarımız devam ediyor. İlerde komplex procudereler yazarken bizlere lazım olabilecek elemanları yavaş yavaş oluşturmaya başladık.

Şimdi sıra CharIndex() kullanımında. Kullanımı çok basit olan CharIndex() adında anladıgımız gibi bir string ifade içinde başka bi string ifade aramak için ve index no yakalamak için kullanılır.

Hemen bir örnek verecek olursak

SELECT CharIndex('a','fatih')
Eğer aranan karakter( yada karakterler) bulunursa index no, bulunamazsa da 0 dönecektir.
Bu örneğe göre dönecek olan değerimiz dönecek olan değerimiz 2 dir.
(Eğer birden fazla yerde bulunursa ilk bulunan index dönecektir...)
C# VB.NET vs. diller tarafında butür indexlemeler 0 dan başlar ama SQL de direk 1 den başladıgını farketmişsinizdir. Yani bu işlemi .net tarafında karşılıgını yapmış olsaydık dönecek değer 1 oludu.
Biraz daha detaylı bir örnek verecek olursak

DECLARE @returnValue int

SELECT @returnValue=CHARINDEX('a','ADANA')
IF(@returnValue=0)
print 'Aranılan Karakteri içermiyor...'
ELSE
print 'Karakter Index='+ Convert(varchar(10),@returnValue)


SELECT PATINDEX('%T%','FATİH') <-- amaca="" ayn="" eder...="" hizmet="" span="">

Artık lazım olması durumunda nasıl kullanılacagını biliyoruz. Bir süre daha T-SQL üzerine gitmeyi planlanlıyorum.

Şimdilik hoşcakalın...

SQL Trigger (Tetikleyici) Kullanımı

Merhabalar;

T-SQL üzerine gitmeye devam ediyoruz.
Bugün ki konumuz TRIGGER kullanımı.

Sql de veri tutarlıgını sağlamak ve işlemleri otomatikleştirmek amacıyla kullanılan bir yapıdır Trigger.
Kelime anlamı Tetikleyici olan Trigger adına yakışır aynı güzellikde hareket etmektedir ataması yapılan tablodaki hareketleri takip ederek otomatik olarak çalışır.

Triggerler aslında Procudurelerin daha da fonksiyonelleştirilmiş halidir.
Ataması yapılan tabloda INSERT,DELETE,UPDATE olmak
üzere 3 farklı trigger kullanılabilir. SELECT işleminde kayıtlarda değişiklik olmadıgı için çalışmaz. Ayrıca Create, Alter, Drop işlemlerinde de çalışmaz.Bunların dışında View,Temp_table ler de de Trigger kullanılamaz.
Önemli husus daha var Triggerlere dışardan Parametre yollanamaz.


Tabloların maruz kaldıkları işlemlere göre trigerler geçici tablolar oluştururlar bunlar DELETE işlemi için DELETED, INSERT işlemi için INSERTED dir. Bunlar çalışma anında oluşturulur ve işlem biter bitmez silinir. Daha sonra oluşmanız münkün değildir. Burda UPDATE değinilmedigini biliyorum UPDATED diye bi tablomuz yok. Updateleri yakalamak için hem DELETED hemde INSERTED tablosundan faydalanacagız onun için ayrıca ögner yazacagım.

Aşagıda ki Trigerimizde STOK ve STOK2 adında 2 tablomuz var. Şuan için pek mantıklı bir işlemiş gibi görünsede STOK tablosundan sildigimiz kayıtları bir yerde saklama geregi duyabiliriz ve örnekler çogaltılabilir. İşde Trigerimizde bu amaca hizmet etmekte.



ALTER TRIGGER DENEME_TRIGGER --Trigerimiz tanımladık
ON STOK --hangi tabloda çalışacak

FOR DELETE
--hangi işlem için (FOR INSERT,DELETE,UPDATE aynı anda olabilir)AS

INSERT INTO STOK2 (KODU,ADI,BIRIMREF) SELECT KODU,ADI,BIRIMREF FROM DELETED

Giriş seviyesi için sanırım bu örnek yeterli daha sonra farklı örneklerle detaya inecegiz.

Şimdilik hoşcakalın...

CURSOR KULLANIMI

Merhabalar Sql başlıca kullanılan işlemlerden biride Cursor ler dir.
Cursor ler kayıt kümesi üzerinde satır satır hareket etmemizi sağlar.
Nisbeten performans gerektiren bir işlem oldugundan dikkatli kullanılmasında fayda var.

Bu cursor blogunu herhangi procedure içinde rahatca kullanabiliriz.
Yaptıgı işlem ise bi tablodan çektigi verileri diger bi taboya insert yapıyor.

"ee zaten bunu cursor kullanmadan da yapabilirim hemde daha kısa ve kolay..." diyen arkadaşlarım olabilir, biliyoruz bunun çok çok faklı yollarıda var burda asıl amaç Cursor yazımını kavramak.

declare @code varchar(11)
declare @unvani nvarchar(50)

DECLARE DENEME_CURSOR CURSOR FOR -- cursor umuzu tanımlıyoruz
SELECT CODE, DEFINITION_ FROM CL

OPEN DENEME_CURSOR
--kullanıma açtık
FETCH NEXT FROM DENEME_CURSOR INTO @code, @unvani

WHILE @@FETCH_STATUS<>-1
--kayıtlar üzerinde hareket etmeye başladıkBEGIN
insert into CLC Values(@code,@unvani)
--insert yapıyoruz...
FETCH NEXT FROM DENEME_CURSOR INTO @code, @unvani
END

CLOSE DENEME_CURSOR
-- işi biten cursor kapatılmalıDEALLOCATE DENEME_CURSOR --Bellekde haliyle yer kaplayacagı için cursor le ilgili herşeyi temizledik...
CURSOR kullanımı oldukca kolay ve keyflidir. Artık cursor mantıgını ve yazımını kavradıgımız için gerekli hallerde hemen devreye sokarak işlerimi halledebiliriz.

Bir süre daha T-SQL üzerine gidecegim. Adım adım ilerleyerek en sonlarında senaryolarla ögrendigimiz konuları pekiştirmeyi hedefliyorum.
Bir sonra ki yazmızda görüşmek üzere hoşçakalın...

SQL ISNULL() Kullanımı

SQL de degerlerin null olup olmama durumlarını kontrol etmemiz gerekebilir. Sorgudan dönen deger matematiksel bir işlem sokuluyorsa hata verecektir. Kullanım sebebleri çogaltalabiliriz

Kullanımı: isnull(alanadı,'null sa') --isnull(ADI,'ismiyok') ADI alanı null sa yerine ismiyok yazar

Konunun mantıgını anladık şimdi örneklere geçelim.

SELECT (ISNULL(MAAS,1)*1.10) AS ZAMLI FROM YMusteri

SELECT ISNULL(LAST_NAME,'--') AS CDG FROM CustomerInfo

Daha sorgular konusunda çok yolumuz var bir adım daha atmış olduk.

SQL Select Case When Kullanımı

Merhabalar;
Bir çogumuz sql sorgularında dönen kayıtlar üzerinde seçim işlemi
yapma gereği duymuşuzdur. Cinsiyet alanına kadın / erkek yazdırmak yerine litaratürde gösterilen şekliyle .T. / .F. yada 0/1 gibi kodlamalar kullanırız. 0 ise kadın 1 ise erkek olarak göster dememiz lazım. Bunun en pratik yolu yazdıgımız programlama dilini kullanmadan sql in kendine yaptırmaktır. Sorgumuzu görünce ne demek istedigimi daha iyi anlayacaksınız.
Hadi ozaman buyrun.

Genel yapısı :

SELECT KolonBaslıgı =
CASE SecilecekALAN
WHEN 'D' THEN 'DÜŞÜNCE'
WHEN 'E' THEN 'EGLENCE'
WHEN 'R' THEN 'RENK'
WHEN 'Y' THEN 'YAŞAM'
WHEN 'A' THEN 'AMAÇ'
ELSE 'Yoksa Neye Yarar Dünya '
END, DigerAlanlar
FROM TabloAdı

Genel kullanımını bu şekilde gösterdikten sonra isterseniz birkaç farklı örnek yapalım.

Müşteri tiplerini kodlara ayırdık. Hangi müşteri hangi statüde bilmek istiyoruz ve yazılım aşamasında verdiğimiz kodların hangisinin hangi manada oldugunu göstermek istiyoruz.

SELECT MUSTIPI=
CASE TIPI
WHEN '1' THEN 'ÜST DÜZEY' WHEN '2' THEN 'ORTA DÜZEY' WHEN '3' THEN 'ALT DÜZEY'
ELSE 'BELİRSİZ MÜŞTERİ TİPİ'
END,ADI As MUSTERI
FROM Musteri

Burda yaptıgımız işlemde sorgu çektik müşterilerin tamamı için müşteri kodlarına baktık 1 ise bunu yaz 2 ise bunu yaz.

SONUÇ:

MUSTIPI MUSTERI
---------- -----------
'ORTA DÜZEY' FATİH
'ORTA DÜZEY' MEHMET
'ÜST DÜZEY' SEDA
'ORTA DÜZEY' EDA

Diğer bir kullanım şekli;

SELECT CASE
WHEN BAKIYE=0 THEN 'RİSK YOK'
WHEN BAKIYE>1 AND BAKIYE <'2' THEN 'DÜŞÜK RİSK'
WHEN BAKIYE>=2 AND BAKIYE<'3' THEN 'ORTA SEVİYELİ RİSK' WHEN BAKIYE>3 OR BAKIYE=3 THEN 'YÜKSEK RİSK'
WHEN BAKIYE BETWEEN 4 AND 10 THEN 'ÇOK YÜKSEK RİSK'
END, m.SOYADI, ym.BAKIYE
FROM Musteri AS m INNER JOIN YMusteri AS ym ON m.ID = ym.M_ID

Başka bir örnek kullanabileceginiz bi çok komut var...

SELECT
CASE
WHEN TIPI IS NULL THEN 'HERHANGI MUSTERİ TIPI'
END AS TIP .........

SQL komutlarını ne kadar etkin biçimde kullanırsanız yazacagınız program o kadar hızlı ve zahmetsiz olur. SQL bize bir çok nimet sunmakta gerisi sizin ihtiyaçlarınıza ve yeteneklerinize kalmış.

Bir sonra ki yazıda görüşmek üzere...