T-Sql Sorgular ve Örnekler

nhtctn nhtctn

Merhaba, bu makalede Sql komutları hakkında bilgi paylaşımında bulunacağım. Aşağıdaki tablo üzerinden örnekler vererek anlatacağım.

Öncellikle veritabanı nasıl oluşturulur

Create Database Veritabanıİsmi

Create Database CetinYazilim

Use : Çalışılacak olan veritabanını belirlemek için kullanılır.

Use Veritabanıİsmi

Use CetinYazilim

Şimdi gelelim tablo oluşturmaya personelId sütunumuzu primary key olarak belirledim yani her personelimiz için bir tane benzersiz id üretecek şekilde. T.C kimlik numaranız gibi düşünebilirsiniz.

İdentity(1,1) ne anlama geliyor diye düşünebilirsiniz. Burada personelId’miz 1’ den başlayıp 1’er artıracak şekilde ayarladık.

Create Table Personeller (
PersonelId int identity(1,1),
Adi nvarchar(50),
Soyadi nvarchar(50),
Yas int,
DogumYeri nvarchar(50),
Maas money,
primary key(personelId)
)

Select : Kısaca veri listeleme komutu diyebiliriz.

1- select * from Personeller 
2- select Adi from Personeller
3- select Adi,Maas from Personeller
4- select Adi as İsim,Maas as AldığıMaaş from Personeller

1- Bu sorgumuz Personeller ismindeki tablonun tüm kolonlarını listeler.

2-Buradaki sorgumuz Personeller tablomuzdaki Adi kolonunu listeler.

3-Bu sorgumuz ise Personeller tablomuzdaki adi ve Maas kolonlarını listelemektedir.

4-Bu sorgumuz Personeller tablomuzdaki Adi ve Maaş kolonlarının, kolon isimlerini değiştirerek listeler.

Where: Kriter uygulamak için kullanılır komuttur.

Karşılaştırma ifadeleri: and, or, not (ve, veya, değil) yapıları birden fazla koşula göre sıralama işlemlerinde kullanılır.

1-select * from Personeller where PersonelId = 7
2-select * from Personeller where Maas =1500
3-select * from Personeller where Maas >= 3000
4-select Adi,Maas from Personeller where Maas >= 2000
5-select Adi,Maas from Personeller where Maas >= 2000 and Maas <= 6000
6-select Adi,Maas from Personeller where PersonelId = 7 or PersonelId =1
7-select Adi,Maas from Personeller where Adi ='Nihat'
8-select Adi,Maas from Personeller where Adi !='Nihat'
9-select Adi,Maas from Personeller where not Adi ='Nihat'
10-select Adi,Maas from Personeller where Maas = 2500 and Adi='Elif'
11-select Adi,Maas from Personeller where (Maas = 2000 or Maas = 2500) and Adi='Nihat' 

1-Personeller tablosundan personelId ‘ si 7 olan kaydı listeler.

2-Personeller tablosundan maaşı 1500 olan kaydı listeler.

3-Personeller tablosundan maaşı 3000 TL’ye eşit ve daha yüksek olan kayıtları listeler.

4-Personeller tablosundan adı ve maaş kolonlarını listelesin ama maaşı 2000 TL ‘den büyük olanları listelesin.

5-Personeller tablosundan adı ve maaş kolonlarını listelesin kriter olarak maaşı 2000 den büyük eşit ve 6000 den küçük eşit olan kayıtları listelesin.

6-Personeller tablosundan adı ve maaş kolonlarını listeleyip koşul olarak personelId ‘si 7 ve personelId’si 1 olan kayıtları listelesin.

7-Personeler tablosundan adı ve maaş kolonları listelensin kriter olarak adı Nihat olan kayıtları listelesin.

8-Personeler tablosundan adı ve maaş kolonları listelensin kriter olarak adı Nihat olmayan kayıtları listelesin.

9-Personeler tablosundan adı ve maaş kolonları listelensin kriter olarak adı Nihat olmayan kayıtları listelesin. Yukarıdaki ile aynı sonuçlar listelenir.

10-Personeler tablosundan adı ve maaş kolonları listelensin kriter olarak Maaşı 2500 TL olan ve adı Elif olan kayıtları listelesin.

11- Personeller tablomuzdan adı ve maaş kolonları listelensin. Kriter olarak maaşı 2000 TL veya 2500 TL ‘ye eşit olan ve adı Nihat olan kayıtlar listelensin. Bu koşulları sağlayan kayıtlarımız olmadığı için bir sonuç gelmedi.

Where – Operatörler – (Between – In – Like)

Between: Between operatörü ile bir alanda belirtilen aralıktaki değerleri aramak için kullanılır.

In: In operatörü belirtilen tek bir alanda birden fazla değeri aramak için kullanılır.

Like: Like operatörü tablomuzda bulunan kayıtlardan belirttiğimiz kriterler uygun olanları seçmek için kullanılır.


--Between
1-select * from Personeller where Maas between 2000 and 7000
2-select * from Personeller where PersonelId between 1 and 4
3-select * from Personeller where PersonelId not between 1 and 4

--In
4-select * from Personeller where Sehir ='İstanbul'
5-select * from Personeller where Sehir in ('İstanbul','İzmir')
6-select * from Personeller where Sehir  in ('İstanbul')
7-select * from Personeller where Sehir not in ('İstanbul')
8-select * from Personeller where PersonelId not in (6,7)

--Like

9-select * from Personeller where Sehir Like '%Ankara%'
10-select * from Personeller where Sehir Like '%ist%'
11-select * from Personeller where Sehir Like '%a%'
12-select * from Personeller where Soyadi Like '%an'
13-select * from Personeller where Soyadi Like 'a%'
14-select * from Personeller where Soyadi Like '_e%'
15-select * from Personeller where Sehir Like 'i_t%'
16-select * from Personeller where Soyadi not Like '%an%'
17-select * from Personeller where Sehir Like '%an%' and Maas>5000
18-select * from Personeller where Sehir Like '%an%' and Soyadi Like '%çe%'

1-Personeller tablosundan maaşı 2000 TL ve 6000 TL arasındaki kayıtları listeler.

2-Personeller tablosundan PersonelId’si 1 ve 4 arasındaki kayıtları listeler.

3-Personeller tablosundan PersonelId’si 1 ve 4 arasında olmayan tüm kayıtları listeler.

4-Personeller tablosundan şehir ismi İstanbul olan kayıtları listelesin.

5-Personeller tablosundan şehir isimleri içinde İstanbul, İzmir olan kayıtları listelesin

6-Personeller tablosu içerisinde şehir kolonu İstanbul olan kayıtları listelenir. 4. madde ile aynı sonucu verecektir.

7-Personeller tablosu içerisinde şehir kolonu İstanbul olmayan tüm kayıtlar listelenir.

8-Personeller tablosundan personelId’si 6,7 olmayan tüm kayıtlar listelenir.

9-Personeller tablosundan şehir kolonu içerisinde aradığımız karakterin öncesi ve sonrası önemsiz olup içerisinde Ankara geçen tüm kayıtlar listelenir.

10-Personeller tablosundan şehir kolonu içerisinde aradığımız karakterin öncesi ve sonrası önemsiz olup içerisinde ist geçen tüm kayıtlar listelenir.

11-Personeller tablosundan şehir kolonu içerisinde aradığımız karakterin öncesi ve sonrası önemsiz olup içerisinde a geçen tüm kayıtlar listelenir.

12-Personeller tablosundan Soyadı kolonu içerisinde aradığımız karakterin öncesi önemsiz olup sonu an ile biten tüm kayıtlar listelenir.

13-Personeller tablosundan Soyadı kolonu içerisinde aradığımız karakterin ilk harfi a olup sonu önemsiz olan tüm kayıtlar listelenir.

14-Personeller tablosundan Soyadı kolonu içerisinde aradığımız karakterin ikinci harfi e olup devamı önemsiz olan tüm kayıtlar listelenir.

15-Personeller tablosundan Soyadı kolonu içerisinde aradığımız karakterin ilk harfi i ve üçüncü harfi t olup devamı önemsiz olan tüm kayıtlar listelenir.

16-Personeller tablosundan Soyadı kolonu içerisinde aradığımız karakterin başı ve sonu önemsiz olup içerisinde an geçmeyen tüm kayıtlar listelenir.

17-Personeller tablosu içerisinde Şehir kolonu içerisinde an geçen ve Maaş’ı 5000 TL ‘den yüksek olan tüm kayıtlar listelenir.

18-Personeller tablosu içerisinde Şehir kolonu içerisinde an geçen ve Soyadı kolonu içerisinde çe geçen tüm kayıtlar listelenir.

Order by : Kayıtlarda sıralama işlemi yapar. Varsayılanı asc’dir.

Asc: 0-9 veya A-Z

Desc: 9-0 veya Z-A

1- select * from Personeller order by Yas
2- select * from Personeller order by Adi
3- select * from Personeller order by Yas asc
4- select * from Personeller order by Yas desc
5- select * from Personeller order by Sehir
6- select * from Personeller order by Sehir,Yas 
7- select * from Personeller order by Sehir desc,Yas asc

1-Personeller tablomuzda Yaş kolonunu küçükten büyüğe doğru sıralar.

2- Personeller tablomuzda Adi kolonunu alfabetik olarak a’ dan z’ye doğru sıralar.

3-Personeller tablomuzda Yaş kolonunu küçükten büyüğe doğru sıralar. Asc yazmazsak bile varsayılan olarak asc olarak sıralama yapar. 1.madde’de olduğu gibi.

4-Personeller tablomuzda Yaş kolonunu büyükten küçüğe doğru sıralama yapar.

5-Personeller tablomuzda Sehir kolonunu alfabetik olarak a dan z ye alfabetik olarak sıralar.

6-Personeller tablomuzda Yaş ve Şehir kolonlarını asc olarak sıralama yapar.

7-Personeller tablomuzda Şehir kolonunu desc , Yaş kolonunu ise asc olarak sıralayıp listeleme yapar.

SQL Fonksiyonları – Hesaplama

Min: Bu fonksiyon belirtilen alandaki en küçük değeri verir.

Max: Bu fonksiyon belirtilen alandaki en büyükdeğeri verir.

Count: Bu fonksiyonu belirtilen alandaki veya tablodaki toplam kayıt sayısını verir.

Avg: Bu fonksiyonu ile belirtilen alandaki değerlerin ortalaması elde edilir.

Sum: Bu fonksiyonu ile belirtilen alandaki değerlerin toplamı elde edilir.

1-select min(Maas) from Personeller
2-select min(Maas) as minimumfiyat from Personeller
3-select min(Maas) as 'Minimum Fiyat' from Personeller
4-select max(Maas) as 'Maksimum Fiyat' from Personeller
5-select top 1 Adi,Maas from Personeller order by Maas 
6-select top 2 Adi,Maas from Personeller order by Maas desc
7-select count(*) from Personeller
8-select count(PersonelId) as ToplamPersonel from Personeller
9-select avg(Maas) as Ortalama from Personeller
10-select sum(Maas) as Toplam from Personeller

1-Personeller tablomuzun Maaş kolonunun en küçük değerini verir.

2-Personeller tablomuzun Maaş kolonunun en küçük değerini verir. Özel olarak as keywordü ile kolon ismi belirtik.

3-Personeller tablomuzun Maaş kolonunun en küçük değerini verir. Özel olarak as keywordü ile ve tırnaklar yardımıyla iki kelimeden oluşan, ayrı yazarak kolon ismi verdik.

4-Personeller tablomuzun Maaş kolonunun en büyük değerini verir.

5- Öncellikle burada fonksiyon kullanmadık. Personeller tablomuzun isim ve maaş kolonlarını listelemek istedik. Ardından order by asc ile maaş kolonunu sıraladık sonrasında top 1 keywordu ile 1 kayıt listeledik.

6-Öncellikle burada fonksiyon kullanmadık. Personeller tablomuzun isim ve maaş kolonlarını listelemek istedik. Ardından order by desc ile maaş kolonunu sıraladık sonrasında top 2 keywordu ile 2 kayıt listeledik.

7-Personeller tablomuzda bulunan toplam kayıt sayısını listeledik.

8-Personeller tablomuzda bulunan kayıtları personelId kayıt sayısına göre listeledik. Burada yukarıdaki ile aynı sonuç ortaya çıkacaktır.

9-Personeller tablomuzun maaş kolonunun ortalamasını hesaplayıp listeledik.

10-Personeller tablomuzun maaş kolonun toplamını listeledik.

SQL Fonksiyonları – String
Len: Bu fonksiyonu metin tipindeki alanlarda verilerin boşluklar dahil karakter sayısını öğrenmemize yarar.

Left: Belirlediğimiz karakter sayısına göre soldaki elemanları listeler.

Right: Belirlediğimiz karakter sayısına göre soldaki elemanları listeler.

Lower: Tüm karakterleri küçük harfe çevirir.

Upper: Tüm karakterleri büyük harfe çevirir.

Trim:Sol ve sağdaki tüm boşlukları siler.

Ltrim: Soldaki boşlukları siler.

Rtrim: Sağdaki boşlukları siler.

1-select len('Nihat ÇETİN') as karakterSayisi
2-select Adi, len(Adi) as karakterSayisi from Personeller
3-select Adi, left(Adi,3) + '...'   from Personeller
4-select RIGHT('Nihat ÇETİN',5)
5-select Adi, right(Sehir,3) from Personeller
6-select Adi, lower(Adi) from Personeller
7-select Adi, upper(Adi) from Personeller
8-select Adi, replace(Adi,'a','-') from Personeller
9-select Adi, lower( replace(Adi,'a','-')) from Personeller
10-select trim('    Nihat ÇETİN    ')
11-select Adi,trim(Adi) from Personeller
12-select Adi,ltrim(Adi) from Personeller
13-select Adi,rtrim(Adi) from Personeller

1-Burada fonksiyona verilen parametrenin uzunluğu yazar.

2-Personeller tablosundan adi kolonun içinde yer alan her bir satırın karakter sayısını listeler.

3-Personeller tablosundan adi kolonu yazar ve fonksiyon olarak da adı kolonunun ilk 3 harfini alır ve metinsel olarak üç nokta ile birleştirip listeleme yapar.

4-Burada fonksiyona parametrenin olarak verilen değerin sağdan 5 karakteri yazdırılır.

5-Personeller tablosundan Adı kolonunu listeler ve fonksiyonumuz ise Şehir kolonunun sağdan 3 karakterini listeler.

6-Personel tablomuzun Adı kolonunu listeler ardından fonksiyonumuz ise Adı kolonunu parametre alarak küçük harfe çevirerek listeleme yapar.

7-Personel tablomuzun Adı kolonunu listeler ardından fonksiyonumuz ise Adı kolonunu parametre alarak büyük harfe çevirerek listeleme yapar.

8-Burada Adı kolonunu listeleriz ardından fonksiyonumuz yardımıyla Adı kolonunu içerisinde a harfi geçenleri ile replace(değiştirerek) edip listeleme yapar.

9-Burada Adı kolonunu listeleriz ardından fonksiyonumuz yardımıyla Adı kolonunu içerisinde a harfi geçenleri ile replace(değiştirerek) edip listeleme yapar. Yukarıdakine ek olarak lower fonksiyonunu da kullanarak küçük harfe çevirme yapar.

10-Fonksiyonumuz burada sağdan ve soldan olmak üzere tüm boşlukları siler.

11-Burada Adı kolonunu listeleriz ardından fonksiyonumuz ise Adı kolonunu sağında ve solunda boşluk bulursa silecektir. Ama örneğimizde boşluk olmadığı için işlevini pek göremedik.

12-Burada Adı kolonunu listeleriz ardından fonksiyonumuz ise Adı kolonunu solunda boşluk bulursa silecektir. Ama örneğimizde boşluk olmadığı için işlevini pek göremedik.

13-Burada Adı kolonunu listeleriz ardından fonksiyonumuz ise Adı kolonunu sağında boşluk bulursa silecektir. Ama örneğimizde boşluk olmadığı için işlevini pek göremedik.

Bu konumuzu yukarıdaki tabloyu örnek alarak yapacağız.

Group By – Gruplama : Bir fonksiyonu kullanırken bazı durumlarda GROUP BY fonksiyonu ile belli alanlara göre gruplamak gerekebilir.

Distinct : Bu ifade tablodaki belirtilen alanda bulunan kayıtlardan birer örnek alır. Yani tekrar eden kayıtlardan bir tane alır ve bunun yanına da tekrar etmeyen kayıtları koyarak bir veri kümesi oluşturur.

Having: HAVING yapısı temelde WHERE ile aynı görevi yapmaktadır. GROUP BY ile kullanılır. Where ifadesi ile belirtilen kriter Group By uygulanmadan önce geçerli olurken, Having ifadesi ile belirtilen kriter ise group by uygulandıktan sonra ortaya çıkan verileri filtrelemek için kullanılır. Ayrıca Where ifadesinden sonra sum, avg gibi fonksiyonlar kullanılamazken, Having ile kullanılabilir.

1-select distinct Category from Product

2-select Category, count(*) as adet from Product group by Category

3-select Category, sum(Price) as toplam from Product group by Category

4-select Category, avg(Price) as ortalama from Product group by Category

5-select Category, avg(Price) as ortalama from Product where Price>3000 group by Category

6-select Category, count(*) as adet  from Product group by Category having count(*)>1

1-Product tablosunun Category alanını tekrar eden kayıtlardan sadece 1 tane alarak listeme yapar.

2-Product tablomuzun Category alanını listeledik ardından group by ile gruplama işlemi gerçekleştirdik. Son olarak count fonksiyonu yardımıyla her üründen kaç adet olduğunu yazdırdık.

Yukarıdaki distinct ile aynı işlemi yaptığımızı düşünebilirsiniz ama distinct ile beraber fonksiyonları kullanamıyoruz.

3-Product tablomuzun Category alanını listeledik ardından group by ile gruplama işlemi gerçekleştirdik. Son olarak sum fonksiyonu yardımıyla price(fiyat) alanının toplamını yazdırdık.

4-Product tablomuzun Category alanını listeledik ardından group by ile gruplama işlemi gerçekleştirdik. Son olarak avg fonksiyonu yardımıyla price(fiyat) alanının ortalamasını yazdırdık.

5-Product tablomuzun Category alanını listeledik, ardından group by ile gruplama işlemi gerçekleştirdik. Son olarak avg fonksiyonu yardımıyla price(fiyat) alanı 3000 tl üstü olan alanların ortalamasını yazdırdık.

6-Product tablomuzun Category alanını listeledik, ardından group by ile gruplama işlemini gerçekleştirdik. Count fonksiyonu yardımıyla her bir kategori için adet hesabı yaptıktan sonra having ile adet sayısı 1’den büyük olan kategorileri listeledik.

Insert – Kayıt Ekleme:Bu ifade tablomuza yeni bir kayıt eklemek için kullanılır.

Insert Into kodu iki türlü kullanılabilir.
Birinci yöntem: Bu yöntemde direk tablo adı belirterek sadece değerleri yazmak suretiyle kayıt ekleyebiliriz. Ancak burada dikkat edeceğimiz nokta eklenecek değer tablomuzdaki alan sırasına göre olmalıdır. Mesela tablomuzdaki alan sıralaması Ad, Soyad, ve Dogum_yili  seklinde olsun. Values ifadesinden yazılacak değerler sırası ile işlenir. Karışık yazdığımız zaman, Dogum_yili alanı sayısal bir alan ise metinsel veri girilemeyeceği için programımız hata verecektir. Veya sıralamaya dikkat etmezsek bilgilerimiz olması gerek alana yazılmaz.

insert into tablo_adi values(deger1, deger2, ...)

Aşağıda veri tabanımıza kayıt ekleme işlemi yaptık.

insert into Personeller  values ('Ela','Bulut',25,'İzmir',6500)

İkinci yöntem: Bu yöntemde ise eklenecek alanları ve değerleri kendimiz belirtiriz. Burada dikkat edilmesi gereken şey; yazdığımız alan adının sırasına göre değerleri eklememiz olacaktır.

insert into tablo_adi (alan_adi1, alan_adi2, alan_adi3) values (deger1, deger2, deger3)

İkinci yöntemle veri tabanına kayıt ekleme sorgusu yazdık.

insert into Personeller (Adi,Soyadi,Yas,Sehir,Maas) values ('Aras Bulut','İynemli',30,'İstanbul',20000)

Update – Kayıt Güncelleme: Bu ifade tablomuzda bulunan kayıtları güncellemek yani değiştirmek için kullanılır.

update tablo_adi set alan_adi1=deger1, alan_adi2=deger2, alan_adi3=deger3, ...) where secilen_alan_adi=alan_degeri

Yukarıda bulunan Personeller isimli tablomuz için update sorguları yazacağız.

Burada personelId’si 1 olan kaydımızın adını değiştirdik.

update Personeller set Adi ='Sena' where PersonelId = 1

Aşağıda maaşı 10000 TL den yüksek olanların adını zengin olarak güncelledik.

update Personeller set Adi ='Zengin' where Maas>10000

Aşağıda PersonelId’si 1004 olan kaydın adını ve maaşını güncelledik.

update Personeller set Adi = 'Elanur', Maas=2500 where PersonelId=1004

Aşağıdaki herkesin maaşını 1000 TL artırdık.

update Personeller set Maas= Maas + 1000

Herkesin maaşına % 10 zam yaptık.

update Personeller set Maas = Maas*1.1

Şehri İstanbul olanların maaşına % 50 zam yaptık.

update Personeller set Maas = Maas*1.5 where Sehir ='İstanbul'

Burada sehir alanı null olan kayıtlara bilgiyok güncellemesi yaptık.

update Personeller set Sehir ='bilgiyok' where Sehir is null

Aşağıdaki sorgumuz ise yukarıdakinin tam tersi şehir bilgisi null olmayanlara bilgivar eklemesi yapılacak.

update Personeller set Sehir ='bilgivar' where Sehir is not null

DELETE ifadesi tablomuzda bulunan kayıtları silmek için kullanılır.

Kullanımı

DELETE  FROM tablo_adi WHERE secilen_alan_adi=alan_degeri

Örnekler

Örneklerimizi yukarıda bulunan Personeller isimli tablomuz üzerinden ele alacağız.

delete from Personeller where PersonelId =1007

PersonelId’si 11 olan kayıt veri tabanımızdan silinir.

delete from Personeller where Maas>5000

Personeller tablosundan maaşı 5000 TL den yüksek olan kayıtlar silinecektir.

delete from Personeller where Maas>2500 and Sehir='İzmir'

Maaşı 2500 TL den yüksek olan ve şehir bilgisi İzmir olan kayıtlar silinecektir.

delete from Personeller where Sehir is null

Personeller tablosundan sehir bilgisi olmayan kayıtlar silinecektir.

Burada tüm kayıtlarımızın şehir bilgisi olduğundan etkilenen sonuç olmayacaktır.

Yorum yazın

BENZER YAZILAR