Get Adobe Flash player

SQL ve TSQL Komutları

SQL KOMUTLARI
ORDER BY
Bu komut ile belirtilen kolona göre artan veya azalan bir sıralama ile sorgulama yapabiliriz.
ASC: Küçükten büyüğe doğru artan sıralama yapabiliriz.
DESC: Büyükten küçüğe doğru azalan sıralama yapabiliriz.
Ancak ASC kullanmak zorunlu değildir. Çünkü default sıralama tipi ASC’dir. Aynı anda birkaç kolon üzerinden de sıralama yapabiliriz.

Örnek 1: Personel tablosundaki bütün kayıtları ad’a göre küçükten büyüğe doğru sıralanması;
SELECT * FROM personel ORDER BY ad ASC;

Örnek 2: Kayıtların büyükten küçüğe doğru sıralanması;
SELECT * FROM personel ORDER BY soyad DESC;

Örnek 3 :
SELECT * FROM personel ORDER BY ad,soyad;

Bu query kayıtları ad göre artan bir sıralama yapar. Ancak aynı ad ile yaratılmış birden fazla kayıt varsa ise bunları da soyad sırasına göre artan bir şekilde sıralar. Eğer her iki kolonda aynı ise o zaman okuduğu sırada sıralar.

Örnek 4 :
SELECT * FROM personel ORDER BY dogum_tarihi DESC,ad,soyad ;

Bu query’de ise personel kayıtları büyükten küçüğe doğru sıralanıyor. Yani en genç eleman’dan başlanarak en yaşlı elemana doğru bir liste yapılıyor. Doğum tarihleri aynı olanlarda ise ad ve soyad’a göre bir sıralama yapılmaktadır.

WHERE
Yukarıda yaptığımız sorgulamaların hepsinde hiç bir koşul belirtmedik. Yani bütün kayıtları tablolardan çektik. Ancak gerçek hayat’ta bu kayıtların sadece bir kısmına ihtiyaç duyarız. Bize gerekli olan dataları diğerlerinden ayıran bazı özellikleri vardır. İşte bu özellikleri bu komut yardımı ile kullanarak gerekli datalara ulaşabiliriz.

Örnek 5: Adı Ahmet olan personeli listeleme?
SELECT * FROM personel WHERE ad=’Ahmet’;

Örnek 6: Yaşı 40’dan büyük personeli listeleme istersek;
SELECT * FROM personel WHERE dogum_tarihi < ‘01.01.1959’

Örnek 7: Adana’da doğmuş personeli listelemek istersek;
SELECT * FROM personel WHERE dogum_yeri = ‘Adana’

Örnek 8: 300 milyondan fazla maaş alan kişileri işe maaşa göre sıralamak istersek;
SELECT * FROM ucretler WHERE aylik_ucret >= 300000000 ORDER BY aylik_ucret;

OPERATÖRLER

Her programlama dilinde olduğu gibi SQL’de de operatörler bulunur. Üç çeşit operatör mevcuttur. Karşılaştırma oparatörleri , mantıksal operatörler ve kümeleme operatörleri.Bu karşılaştırma operatörleri aşağıdaki gibidir ;
operatör anlamı
a>X … X… a’dan küçük
a a=X … X… a’ya eşit
a=>X … X… a’dan küçük eşit
a<=X … X… a’dan büyük eşit
a<>X … X… a’ya eşit değil

Mantıksal operatörler ise AND,OR,NOT olarak verilebilir. Bu operatörler burada anlatmayacağız. Bunlar standart bütün dillerde aynı olan operatörlerdir.Kümeleme operatörleri ise datalar üzerinde gruplama yapmamızı sağlayan operatörlerdir.Bu operatörler Between , In , Like operatörleridir. Bu operatörlerin hepsini where ile birlikte kullanmalıyız.

BETWEEN: Aralıklı sorgulama yapmak istersek kullanabileceğimiz bir operatördür.

Örnek 1: Ayda 200 ile 300 milyon arasında maaş alanlar listesi;
SELECT * FROM ucretler WHERE aylik_ucret BETWEEN 200000000 AND 300000000

Örnek 2: Fatura tarihi 01.01.1998 ve 04.06.1999 tarihleri arasındaki faturalar listesi;
SELECT * FROM fat_bsl  WHERE ft_tar BETWEEN ‘01.01.1998’ and ‘04.06.1999’

IN: Bu komut ile belli bir kolonun kümesini vererek işlemimizi daha kolay bir şekilde yapabiliriz.

SELECT * FROM personel WHERE meslek_id IN (1,2,3)

Örnek 3: 1,2 veya 3 meslek grubundan herhangi birine dahil olan personel listesi;
SELECT * FROM personel WHERE meslek_id=1 OR meslek_id=2 OR meslek_id=3

LİKE: Bu ise içinde belli bir karakter dizisi bulunan datalara ulaşmak istersek kullanabileceğimiz bir operatördür.

Örnek 4: Adresi İstanbul olan kayıtların listelenmesi;
SELECT * FROM personel WHERE adres LIKE ‘%İstanbul%’

Örnek 5: Adres alanının sonunda İstanbul geçen kayıtların listesi;
SELECT * FROM personel WHERE adres LIKE ‘%İstanbul’

Örnek 6: Adres alanının başında İstanbul geçen kayıtların listesi;
SELECT * FROM personel WHERE adres LIKE ‘İstanbul%’

SQL’DE YENİ BİR KAYIT EKLEMEK

Tabloya yeni bir satır eklemek istersek INSERT INTO sözcüğünü kullanırız. Genel kullanım şekli aşağıdaki biçimdedir ;

INSERT INTO tablo adı VALUES (deger1,deger2,deger3,…)

Eğer sadece belirli sahalara değer girmek istersek INSERT INTO’yu aşağıdaki şekildeki gibide kullanabiliriz.

INSERT INTO tablo adı(kolon1,kolon3,kolon9,kolon7) VALUES (deger1,deger3,deger9,deger7)

Örnek7: Yeni bir personel eklemek istersek ;
INSERT INTO personel VALUES (‘asdf2345′,’Ahmet’,’Yıldırım’,’01.01.1960′,’Ankara’,’E’,1,7,1,’ebuziya cad. Bakırköy’)

Örnek8: Yeni bir meslek eklemek istersek ;
INSERT INTO meslekler VALUES (23,’Belçi’,200.000.000)

Bir tablodan bazı kayıtları başka bir tabloya da aktarabiliriz. Bunun için aşağıdaki gibi bir ifade yazmalıyız;

INSERT INTO tablo1 SELECT kolon1,kolon2,.. FROM tablo2

Örnek9:
INSERT INTO NEW_CUSTOMER SELECT NAME,CITY FROM CUSTOMER

SQL’DE TABLOLAR ÜZERİNDE İŞLEM YAPMA

Genellikle veri tabanı kayıtları oluştururken bütün bilgileri bir tabloda değil de birkaç tablo üzerinde tutarız.Bu dataların hem daha düzenli durmasını hem de gereksiz veri tekrarlarını engellemiş olur.Şimdi farklı tablolara bölünmüş datalar üzerinde işlem yapmamız gerekirse ne yapmamız gerekir.Aslında fazla bir şey yapmamız gerekmez.Tek yapacağımız hangi tabloları kullanacaksak bunları from cümleciğinde belirtmemizdir.Tabloları belirtirken aralıklarında , koymayı unutmazsak o zaman sorun yok.

Örnek 1: Hangi personelin ne kadar maaş aldığını listelemek istersek;
SELECT ad,soyad,aylik_ucret FROM personel,ucretler WHERE sicil_no=per_sicil_no

Örnek 2 : İstanbul’da yaşayan Adana doğumlu personelin maaşlarını listelemek istersek;
SELECT ad,soyad,aylik_ucret FROM personel,ucretler WHERE sicil_no=per_sicil_no AND adres LIKE ‘%İstanbul%’ AND  dogum_yeri = ‘Adana’

Örnek 3 : 300 milyondan fazla maaş alan ve 2 nolu meslek grubuna ait personeli listelemek istersek;
SELECT ad,soyad,aylik_ucret FROM personel,ucretler WHERE sicil_no=per_sicil_no AND aylik_ucret>300000000 AND meslek_id=2

Örnek 4 : Muhasebe meslek grubuna ait personel listesi;

SELECT ad,soyad FROM personel,meslekler WHERE meslek_id=meslek_id AND meslek_aciklama=’Muhasebe’

Şimdi buradaki sorgulamamızda bir karışıklık söz konusu olacak.İki tane aynı isimde meslek_id oldu.Bunu şu şekilde engelleyebiliriz.
Tablolarda aynı isimde iki kolon varsa bu kolanları kullanırken başlarına tablo ismini getiririz araya bir nokta koyarak kolon adını yazarız.

SELECT ad,soyad FROM personel,meslekler WHERE personel.meslek_id=meslekler.meslek_id
AND meslek_aciklama=’Muhasebe’

Örnek 5 : Şirketimizde 30 yıldır çalışan ve 200 milyon altında maaş alan personeli ödüllendirecegiz.
Bunun için nasıl bir sorgulama yapmalıyız.

SELECT ad,soyad FROM personel,ucretler WHERE sicil_no=per_sicil_no AND baslama_tarihi < ‘01.01.1969’ AND aylik_ucret < 200000000

Örnek 6 : 22 yaşından büyük bilgi işlemde çalışan bayan personeli listelemek istersek
(NOT : cinsiyet= 0 : bayan 1 : erkek —  medeni_hal= 0 : bekar 1 : evli )

SELECT ad,soyad FROM personel,meslekler WHERE personel.meslek_id=meslekler.meslek_id
AND meslek_aciklama=’Bilgi İşlem’ AND cinsiyet=0 AND dogum_tarihi < ‘01.01.1977’

Örnek 7 : 40 yaşından küçük ,bilgi işlem veya muhasebe bölümünde çalışan,erkek,200 milyondan
fazla maaş alan ,Ankara doğumlu ,Sarıyer’de oturan,10 yıldan fazla şirkette çalışan , bekar
,10 milyondan fazla kesinti yapılan personeli listelemek istersek;

SELECT ad,soyad
FROM personel,meslekler,ucretler
WHERE dogum_tarihi > ‘01.01.1959’
AND personel.meslek_id=meslekler.meslek_id
AND (meslek_aciklama=’Bilgi İşlem’ OR meslek_aciklama=’Muhasebe’)
AND cinsiyet=1
AND sicil_no=per_sicil_no AND aylik_ucret > 200000000
AND dogum_yeri=’Ankara’
AND adres LIKE ‘%Sarıyer%’
AND baslama_tarihi > ‘01.01.1989’
AND medeni_hal=0
AND kesinti>10000000

Örnek 8 : Muhasebe ve Pazarlama bölümü dışında çalışan perseneli listelemek istersek;

SELECT ad,soyad
FROM personel,meslekler
WHERE personel.meslek_id=meslekler.meslek_id
AND meslek_aciklama<>’Pazarlama’ AND meslek_aciklama<>’Muhasebe’

Örnek 9:
40 yaşları arasında İzmir ve Bursa doğumlu adayları listelemek istersek;

SELECT ad,soyad FROM personel WHERE dogum_tarihi BETWEEN ‘01.01.1959’ AND ‘01.01.1969’
AND (dogum_yeri=’İzmir’ OR dogum_yeri=’Bursa’)

Örnek 10: Adı E ile başlayan, 3,5 ve 7 nolu meslek grubuna ait ,bayan,bekar,30 yaşından küçük ,
100 milyondan fazla maaş alan personel listesi ;

SELECT ad,soyad
FROM personel,ucretler
WHERE ad LIKE ‘E%’
AND meslek_id IN (3,5,7)
AND cinsiyet=0
AND medeni_hal=0
AND dogum_tarihi > ‘01.01.1969’
AND sicil_no=per_sicil_no
AND aylik_ücret > 100000000

Örnek 11: Evli ve aile yardımı almayan persenol listesi;
SELECT ad,soyad FROM personel,ucretler WHERE medeni_hal=1 AND aile_yardim=0

SQL GRUPLAMA FONKSİYONLARI

MAX
Verilen kolondaki en büyük değeri geri döndürür. Genel yazım biçimi aşağıdaki gibidir;

Select MAX(kolon_adı) FROM tablo;

Örnek 1: En fazla aylık ücret alan personel ne kadar maaş alıyor?
Select MAX(aylik_ucret) From ucretler;

Örnek 2: En fazla aile yardımı alan personelin maaşını ve sicil no’sunu öğrenmek istersek ;
Select per_sicil_no,MAX(aylik_ucret) From ucretler ;

MIN
Verilen kolondaki en küçük değeri geri döndürür. Genel yazım biçimi aşağıdaki gibidir;
Select MIN(kolon_adı) FROM tablo;

Örnek 3: En düşük aylık ücret alan personel ne kadar maaş alıyor ?
Select MIN(aylik_ucret) From ucretler;

Örnek 4: En az aile yardımı alan personelin maaşını ve sicil no’sunu öğrenmek istersek ;
Select per_sicil_no,MIN(aylik_ucret) From ucretler ;

SUM
Verilen kolondaki Bütün değerleri toplayarak geri döndürür. Genel yazım biçimi aşağıdaki gibidir;
Select SUM(kolon_adı) FROM tablo;

Örnek 5: Personele ödenen toplam ücret nedir ?
Select SUM(aylik_ucret) From ucretler;

Örnek 6: Toplam ödenen aile yardımı bulunmak istenirse
Select SUM(aile_yardimi) From ucretler ;

AVG
Verilen kolondaki değerlerin aritmetiksel ortalamsını geri döndürür. Genel yazım biçimi aşağıdaki gibidir;

Select AVG(kolon_adı) FROM tablo;

Örnek 7: Aylık ödenen ücret ortalamasını bulmak istersek ;
Select AVG(aylik_ucret) From ucretler;

COUNT(*)
Verilen tablodaki record sayısını geri döndürür. Genel yazım biçimi aşağıdaki gibidir ;

Select COUNT(*) FROM tablo;

Örnek 8: Kaç tane personel çalıştığını listelenmek istersek;
Select COUNT(*) From personel;

COUNT(DISTINCT ..)
Verilen kolondaki unique record sayısını geri döndürür. Genel yazım biçimi aşağıdaki gibidir ;

Select COUNT(DISTINCT kolon_adı) FROM tablo;

Örnek 9: İsmi farklı kaç tane personel çalıştığını listelenmek istenirse;
Select COUNT(DISTINCT ad) From personel;

Örnek 10: En yüksek taban ücret olan meslek listelenmek istenirse ;
Select MAX(taban_ücret) From meslekler;

Örnek 11: Ortalama taban ücret listelenmek istenirse ;
Select AVG(taban_ücret) From meslekler;

Örnek 12: 30.01.1990 yılından sonra işe başlıyanların ortalama ücreti hesaplanmak istenirse;
Select AVG(aylik_ücret) From ucretler Where baslama_tarihi>’30.01.1990′;

Örnek 13: Maaşından kesinti yapılan personele ödenen toplam ücret bulunmak istenirse ;
Select SUM(aylik_ücret) From ucretler Where kesinti>0;

——————-
T-SQL Komutları
Normal şartlarda veritabanı işlemede ANSI SQL dediğimiz standart dil kullanılmaktadır. Lakin bu dil karmaşık işlemler gerçekleştirmeyi, örneğin bir if…else yapısı, while döngüsü gibi fonksiyonları ve değişken tanımalamayı desteklememektedir. Bu durumda yapılması gereken farklı bir programlama dili öğrenmek ve bu vasıtayla bu işlevleri yerine getiren ara programlar yazmaktır. T-SQL dil yapısı tüm bu fonksiyon ve karmaşık işlemleri SQL Server uzayında yapabilmek adına geliştirilmiş standart dışı bir dildir.

Normal şartlarda veritabanı işlemede ANSI SQL dediğimiz standart dil kullanılmaktadır. Lakin bu dil karmaşık işlemler gerçekleştirmeyi, örneğin bir if…else yapısı, while döngüsü gibi fonksiyonları ve değişken tanımalamayı desteklememektedir. Bu durumda yapılması gereken farklı bir programlama dili öğrenmek ve bu vasıtayla bu işlevleri yerine getiren ara programlar yazmaktır. T-SQL dil yapısı tüm bu fonksiyon ve karmaşık işlemleri SQL Server uzayında yapabilmek adına geliştirilmiş standart dışı bir dildir.

DEĞİŞKENLER
T-SQL kullanmanın en büyük sebeplerinden biri değişken kullanımına olanak tanımasıdır. Burada kastımız olan değişken diğer tüm programlama dillerinde yer alan bir veri tipi ile sınırlandırılmış, yaratılmasının ardından hafızada belli bir yer kaplayan, üzerine veri ataması yapılabilen ve daha sonra ismi kullanılarak program içersinden çağrılıp kullanılabilecek yapıdır. Yazım şekli :

declare @degisken_adi <veri_tipi> <(boyut)>

şeklindedir.

Örnek :
declare @fld_arac_no VarChar(30)
declare @fld_id int

Değişkene bir gerçek karşılık atanması durumunda değişkene değer atama denir. SET komutu kullanılır. Değişkene atanan değer programın ilerleyen aşamalarında farklı bir değer ile değiştirilebilir. Yeni değerin atanmasının ardından eski değer yok olur.

Örnek :
declare @fld_arac_no VarChar(30)
Set @fld_arac_no = 40
Set @fld_arac_no = 50 //Araç No artık “50” değerinde

SİSTEM FONKSİYONLARI
Veritabanlarında sistem oturum bazında çalışır ve birden fazla oturumu destekleyebilirler. Değişkenler oturum bazında değer alırlar. Bazen tek bir oturum yerine tüm oturumlarda değer alabilecek ve değer döndürebilecek yapılara ihtiyac duyulur. Bu nedenle SQL Server sistem fonksiyonları barındırır.

Yazımı;
Select @@<fonksiyon_adi>

Örnek :
Sql serverda açık connection sayısını almak için sistemde daha önce tanımlanmış olan fonk. çalıştırmak.

Select @@connections;

Bize döndüreceği sonuç;
>>1

şeklindedir.

PRINT KOMUTU
Değişken durumları, prosedur sonuçları,işlem sonuçları gibi verileri ekrana yazdırmak istediğimizde bu komutu kullanırız.

Örnek :
Declare @Toplam int
Select @Toplam = Count(*) from TBL_ARACLAR
Print @Toplam
GO

Bu işlemin bize döndüreceği sonuç TBL_ARACLARdaki kayıt sayısıdır ve ekrana aynen yazılır.

AKIŞ KONTROLLERİ
ANSI SQLde bulunmayan bu yapı bir programlama dili kadar geniş ve etkin kullanıma yetmesede ANSI SQLe nazaran daha geniş sorgular ve sonuçlar çıkarmanızı sağlayacaktır. T-SQL akış kontrolleri BEGIN ile başlayıp END ile bitmektedir.

Genel Kullanımı;

BEGIN
//Program Kodları
END

AÇIKLAMA SATIRLARI
T-SQLde bir satırın dikkate alınmamasını istiyorsanız “–” kullanabilir yada /*……..*/ kullanabilirsiniz. Query Analizer de çalışırken “//” yapısından sonra gelen alan da dikkate alınmayacaktır.

IF……ELSE
Klasik şartlı ifade kontrolü olan If….Else bloğu T-SQL tarafından da desteklenmektedir. Genel Kullanımı;

IF(//Şartlar)

BEGIN
//Program Kodları
END
ELSE IF(//Şartlar)

BEGIN
//Program Kodları
END

şeklindedir.

Declare @fld_Arac_Model int
Select @fld_Arac_Model = Max(fld_Arac_Model) From TBL_ARACLAR
If (@fld_Arac_Model = 123)
BEGIN
Print (‘Bu Aracın Markası XXXXX’)
END
Else If(@fld_Arac_Model = 124)
BEGIN
Print (‘Bu Aracın Markası YYYYYY’)
END
GO

GO
Sql Server birden fazla işlemi aynı talep içinde cevaplayabilir. GO komutu Sql Servera gönderilen komut dizisinin sonunu belirtmek için kullanılır. Aslında T-SQLin bir parçası olmayan kod Sql Server Query Analizer tarafından da algılanır.

Dikkat edilmesi gerekenler :
– GO komutu diğer T-SQL komutları ile aynı satırda kullanılamaz
– GO komutundan önce tanımlanan bir değişken GO komutundan sonra kullanılamaz. Zira daha önceki kod yığınının sona erdiğini belirtmektedir.
– Kodun sonunda GO kullanılmadığı sürece komutlar sunucuya gönderilmez.

CASE
Kısa kod blokları kullanmamıza olanak tanır. Genel kullanımı ;

CASE
WHEN <case_sarti> THEN <case_degeri>
ELSE <case_degeri>
END

Örneğin araç modelinin 100den büyük olması durumunda “Pahalı”, küçük olması durumunda “Ucuz” yazdıralım

Select fld_Arac_No, fld_Arac_Mode =
case
when fld_Arac_No > 100 Then ‘Pahalı’
when fld_Arac_No < 100 Then ‘Ucuz’
End
From TBL_ARACLAR

WHILE DÖNGÜSÜ
Şart sağlanıncaya kadar tekrar etmesi gereken bir kod bloğumuz var ise kullanabileceğimiz alandır. Örneğin bir değişken yaratıp değeri 20 olana kadar artırmamız gereken durumlarda

Genel Kullanımı ;

While <While_Sarti>
Begin
//tekrarlanacak Kod Bloğu
End

şeklindedir.

Örneğin bir “i” değişkeni tanımlayalım integer tipinde ve 10 olana kadar artıralım ve 10 olduğunda ekrana son değerini yazdıralım.

Declare @i int
Select @i = 1

While (@i < 10)
Begin
Select @i = @i + 1
End
Print @i

 

— SQL’DE GRUPLAMA

SELECT CID, SUM(TUTAR) AS TOPLLAM, COUNT(*) AS FATURA_SAYISI,
‘1’ AS OCAK , ‘1’ AS ŞUBAT FROM CAHAR
GROUP BY CID

SELECT CID, SUM(TUTAR) AS TOPLLAM
FROM CAHAR

WHERE TUTAR > 1000
GROUP BY CID

SELECT CID, SUM(TUTAR) AS TOPLLAM
FROM CAHAR

GROUP BY CID
HAVING SUM(TUTAR) < 2400

— SQL DE JOİN UYGULAMASI
— MESELA ÜMİT SELCAN’IN OCAK AYINDA ALMIŞ OLDUĞU ÜRÜNLERİN LİSTESİ

SELECT C.UNVAN, S.TARIH, U.TANIMI, SD.MIKTAR
FROM CASABIT AS C
JOIN SIPANA AS S ON C.CID = S.CARIID
JOIN SIPDETAY AS SD ON SD.SIPID = S.SIPID
JOIN URUN AS U ON U.URUNID = SD.URUNID

ÜMİT’İN SİPARİŞ ETTİĞİ MALLARIN LİSTEİ

–ÜMİT SELCAN’IN, 1/1/2012, A MALI , 10

— JOIN

SELECT CASABIT.UNVAN, SIPANA.TARIH, URUN.TANIMI, SIPDETAY.MIKTAR
FROM CASABIT
JOIN SIPANA ON CASABIT.CID = SIPANA.CARIID
JOIN SIPDETAY ON SIPANA.SIPID = SIPDETAY.SIPID
JOIN URUN ON URUN.URUNID = SIPDETAY.URUNID

Share

One Response to “SQL ve TSQL Komutları”

  • fahri:

    Merhaba

    Bir kaç sorum olacaktı :

    En fazla personelin çalıştığı birimi bulunuz.

    Birimleri (fiili) çalışan sayılarına göre büyükten küçüğe sıralayınız.

    Fiilen en fazla personelin çalıştığı birimin yaş ortalamasını bulunuz.

    Teşekkürler

Leave a Reply