SQL Komutları,SQL Örnekleri
SQL ile belirli komutlar yoluyla veri tabanına veri gönderilmesi, verinin işlenmesi, düzenlenmesi, silinmesi gibi işlemler yapılır.
Bunlara bir kaç örnek :
Tablodaki Verileri Sıralama – ORDER BY :
Verileri Sıralı olarak almak için ORDER BY ifadesi kullanılır. Bu ifadeden sonra sıralamanın hangi alana göre yapılacağı yazılır ve sıralamanın artan mı yoksa azalan mı olduğunu belirlemek için ASC ve DESC ifadeleri kullanılır. A dan Z ye doğru sıralamak için ASC kullanılır.
SELECT alanlar FROM tablo_adi ORDER BY alan_adi ASC
Z den A’ya doğru sıralama için DESC kullanılır.
SELECT alanlar FROM tablo_adi ORDER BY alan_adi DESC
Sıralama biçimi belirtilmezse A’dan Z’ye sıralama yapılır.
Sıralama işleminde birden fazla alana göre de sıralama yapılabilir. Örneğin önce soyada sonra ada ve unvan alanına göre sıralama yapalım.
SELECT soyad,ad,unvan FROM personel ORDER BY soyad,ad,unvan
Burada birinci ölçü soyad alanıdır. Soyad alan içerikleri aynı olduğunda Ad alanı, o da aynı olduğunda unvan alanına göre sıralanır.
Birden fazla alana göre sıralama yaparken bütün alanlar artan ya da azalan sırada olmak zorunda değildir. Örneğin soyad alanına göre artan sıralama yaparken Ad alanına göre azalan sıralama yapılabilir.
SELECT soyad,ad FROM personel ORDER BY soyad ASC, ad DESC
Burada birinci ölçü soyad alanıdır ve artan sırada istenmiştir.Soyad aynı olduğunda Ad alanına göre azalan sıralama yapılır.
WHERE ile Veri Filtreleme :
Tabloda bulunan verileri istediğimiz belli şartlara bağlı olarak listeleyebiliriz. Bu şartları oluşturmak için WHERE kullanılır.
SELECT alanlar FROM tablo_adi WHERE şart_ifadesi
Örneğin Başlık alanında “Satış Danışmanı” yazan kayıtları listelemek için sorgu cümlemiz şu şekilde olacaktır.
SELECT * FROM personel WHERE başlık=”Satış Danışmanı”
Örnek 2:Görevi yonetici olan ve gorev suresi 25 yıldan fazla olan personel soyad,ad, görevsüresini Adına göre artan şekilde listeleyen SQL sorgusunu yazınız.
SELECT soyad,ad,gorevsuresi FROM personel WHERE gorev=”Yonetici” AND gorevsuresi>25 ORDER BY ad ASC
Şartlı Sorgulama Operatörleri:
Şart ifadesi olarak kullanabileceğimiz operatörler şunlardır.
Örneğin doğum tarihi 1.1.1960 dan küçük olanları listelemek için sorgu cümlemiz şöyle düzenlenmelidir.
SELECT * FROM uyeler WHERE dogumtarihi<#1/1/1960#
Şartlarımızı yazarken AND, OR, NOT gibi mantıksal ifadeleri kullanarak birden fazla şartı da verebiliriz.
Örneğin doğum tarihi 1.1.1960 dan büyük ve bölümü Dahiliye olanları listelemek için SQL cümlemiz :
SELECT * FROM uyeler WHERE dogumtarihi>#1/1/1960# AND bolum=”Dahiliye”
BETWEEN kullanımı:
İki aralık belirtirken bu şartı between deyimi ile de kullanabiliriz.
Örneğin 1.1.2012 ile 1.2.2012 tarihleri arasında satılan ürünleri listelemek için sorgumuz :
SELECT * FROM satışlar WHERE satıstarihi BETWEEN #1/1/2012# AND #1/2/2012#
IN Kullanımı :
Birden fazla şartı belirtirken IN deyimini de kullanabiliriz. Örneğin bolum içerisinde ‘Elektrik’,’Bilişim’,’Makine’ olanları bulmak için SQL cümlemiz:
SELECT * FROM ogrenciler WHERE bolum IN (‘Elektrik’,’Bilişim’,’Makine’)
Aynı sorguyu OR kullanarak da yazabiliriz.
SELECT * FROM ogrenciler WHERE bolum=’Bilişim’ OR bolum=’Elektrik’ OR bolum =’Makine’
NOT IN Kullanımı:
IN parantezinde verilen değerlerin dışındaki değerleri içeren kayıtları listeler.
Örneğin bolum içerisinde ‘Elektrik’,’Bilişim’,’Makine’ olmayanları bulmak için SQL cümlemiz:
SELECT * FROM ogrenciler WHERE bolum NOT IN (‘Elektrik’,’Bilişim’,’Makine’)
LIKE Kullanımı:
Benzer kayıtları listelemek için LIKE deyimi kullanılır. LIKE operatörü yardımcı karakterler ile kullanılarak daha geniş bir sorgu imkanı sağlar.
Örnek : Bir Harf ile başlayan kayıtları sorgulama
Örneğin soyadı D harfi ile başlayan kayıtları listelemek için SQL cümlesi:
SELECT * FROM ogrenciler WHERE soyad LIKE ‘D%’
Burada LIKE ‘%D’ şeklinde kullanılırsa sonu D harfi ile bitenler listelenir.
LIKE %D% şeklinde kullanılırsa içinde D harfi geçenler listelenir.
Örneğin Adı alanında içerisinde ‘an’ harfi geçmeyen kayıtların ad ve soyad bilgilerini Adına göre artan şekilde listelemek için
SELECT ad,soyad FROM ogrenciler WHERE ad NOT LIKE ‘%an%’ ORDER BY ad ASC
Örneğin Soyad alanı içinde b,c,d,e,f ile başlayan kişilerin soyad ve ad bilgilerini listeleyen SQL sorgusu:
SELECT soyad,ad FROM ogrenciler WHERE soyad LIKE ‘[b-f]%’
NULL DEĞERLER
Boş kayıtları bulmak için IS NULL ifadesi şart olarak kullanılır. Örneğin soyadı girilmeyen kayıtların tüm bilgilerini listelemek için
SELECT * FROM ogrenciler WHERE soyad IS NULL
IS NOT NULL
Boş olmayan kayıtları listelemek için IS NOT NULL kullanılır. Örneğin soyad alanı boş olmayan kayıtları listelemek için
SELECT * FROM ogrenciler WHERE soyad IS NOT NULL
Örnek 1: Personel veritabanında uyeler tablosundan Doğum tarihi 1 Ocak 1980 ile 1 Ocak 1995 tarihleri arasında olan personelin adsoyad,bolum ve maaş bilgilerini maaşına göre artan şekilde sıralayan SQL cümlesi:
SELECT adsoyad,bolum,maas
FROM uyeler WHERE dogumtarihi BETWEEN #01/01/1980# AND #01/01/1995# ORDER BY maas ASC;
Örnek 2: Uyeler tablosundan maası 2500 den fazla ve 3000 den az olan personel adsoyad,bölüm,maaş bilgilerini Adsoyadına tekrarsız maaşına göre azalan şekilde listeleyen SQL sorgusu
SELECT adsoyad,bolum,maas DISTINCT adsoyad
FROM uyeler
WHERE maas BETWEEN 2500 AND 3000 ORDER BY maas DESC
Örnek 3:uyeler tablosundan bütün kişileri adsoyad alanına göre artan maaşına göre azalan şekilde listeleyen SqL Sorgusu
SELECT *
FROM uyeler
ORDER BY adsoyad ASC, maas DESC;
Örnek 4:uyeler tablosundan bütün kişileri maaşına göre azalan ve adsoyad alanına göre artan şekilde listeleyen SQL Sorgusu
SELECT *
FROM uyeler
ORDER BY maas DESC , adsoyad ASC;
Örnek5: Adres alanı içinde Çumra Kelimesi geçen kayıtların adsoyad ve adresini listeleyen SQL sorgusu
SELECT adsoyad,adres
FROM uyeler WHERE adres LIKE ‘*Çumra*’
Örnek 6 : Adresi Çumra olmayan kayıtları adsoyad alanına göre artan şekilde listeleyen SQL Sorgusu
1.Yöntem:
SELECT *
FROM uyeler
WHERE adres <>’Çumra’
2.Yöntem:
SELECT *
FROM uyeler
WHERE adres NOT LIKE ‘Çumra’
Örnek 7: Adresi içerisinde Çumra kelimesi geçmeyen veya maaşı 5000 ile 3000 arasında olan kişileri adsoyad, adres ve maaş bilgilerini maaşına göre artan şekilde listeleyen SQL sorgusu
SELECT adsoyad,adres,maas
FROM uyeler
WHERE adres NOT LIKE ‘*Çumra*’ OR maas BETWEEN ’5000′ AND ’3000′ ORDER BY maas ASC;
İSTATİSTİKSEL İŞLEMLER YAPMA:
Veritabanındaki bir alanda bulunan verilerin toplamını, ortalamasını, en büyük değeri veya en küçük değeri bulmak için istatistik amaçlı olarak kullanılan max, min, count, sum ve avg gibi fonksiyonlar kullanılır. Bu fonksiyonlar genellikle Group By cümlesi ile kullanılır.
MAX :
Max alandaki en büyük değeri verir. Örneğin Ürünler tablosunda fiyatı en yüksek olan ürünü bulan SQL sorgusu:
SELECT MAX(fiyat) AS enyuksekfiyat FROM urunler
Aynı ifadeyi şartlı olarak da yazabiliriz.
SELECT MAX(fiyat) AS enyuksekfiyat FROM urunler WHERE kategori=Anakart
MİN:
Min Alandaki en düşük değeri verir.
Örneğin SELECT MIN(fiyat) AS endusukfiyat FROM urunler
Veya
SELECT MIN(fiyat) AS endusukfiyat FROM urunler WHERE kategori=Anakart
Gibi.
AVG:
AVG bir sütundaki değerlerin ortalamasını verir.
Örneğin ürünler tablosundaki ürünlerin fiyat ortalamasını veren SQL sorgusu
SELECT AVG(fiyat) AS ortalamafiyat FROM urunler
Ya da
SELECT AVG(fiyat) AS anakartortalamafiyat FROM urunler WHERE kategori=Anakart
SUM:
SUM bir alandaki değerlerin toplamını verir. Örneğin Ürünler tablosundaki ürünlerin fiyatlarının toplamını veren SQL Sorgusu
SELECT SUM(fiyat) AS toplamfiyat FROM urunler WHERE kategori=’Anakart’
COUNT:
Count bir tablodaki kayıt sayısını listeler. Örneğin ürünler tablosundaki kayıt sayısı aşağıdaki gibi olacaktır.
SELECT COUNT(*) AS kayitsayisi FROM urunler
Örneğin fiyatı 20 TL den büyük olan ürünlerin sayısını aşağıdaki gibi bulabiliriz.
SELECT COUNT(*) AS kayitsayisi FROM urunler WHERE fiyat>20
Hangi Şehirde Kaç Kişi Yaşıyor?
Bir şehirde kaç kişinin yaşadığını bulmak için aşağıdaki gibi bir sorgu kullanabiliriz.
SELECT adres, COUNT(*) AS kisi FROM uyeler GROUP BY adres
Örnekler
Örnek 1:Uyeler Maaşı en yüksek olan kişinin maaşını bulan SQL Sorgusu
SELECT MAX(maas) AS enyuksekmaas FROM uyeler
Örnek 2: Bölümü KBB olan kişilerden maaşı en yüksek olan kişinin maaşını listeleyen SQL Sorgusu
SELECT MAX(maas) AS enyuksekmaas FROM uyeler WHERE bolum=’KBB’
Örnek 3: Bölümü Göz olan kişilerden maaşı en düşük olan kişinin maaşını listeleyen SQL Sorgusu
SELECT MIN(maas) AS endusukmaas FROM uyeler WHERE bolum=’Göz’
Örnek 4: Uyeler tablosundaki maaşların ortalamasını veren SQL Sorgusu
SELECT AVG(maas) AS ortmaas
FROM uyeler;
Örnek 5: Bölümü ‘Dahiliye’,’Ortopedi’veya ‘Kardiyoloji’ olmayan kişilerin maaşlarının toplamını veren SQL Sorgusu
SELECT SUM(maas) AS toplammaas
FROM uyeler WHERE bolum NOT IN (‘DAhiliye’,'Ortopedi’,'Kardiyoloji’);
Örnek 6 : Adres alanı içerisinde ÇUMRA kelimesi geçenlerin sayısını veren SQL sorgusu
SELECT COUNT(*) AS kisi FROM uyeler WHERE adres LIKE ‘*Çumra*’
Örnek 7 : Adresi ÇUMRA olan kişilerin sayısını veren SQL sorgusu
SELECT COUNT(*) AS kisi
FROM uyeler WHERE adres=’Çumra’;
Verileri Gruplandırma – GROUP BY
GROUP BY deyimi ile verileri belirli alanlara göre gruplandırabiliriz.
SELECT alanlar FROM Tablo_adi WHERE şart_ifadesi GROUP BY alan_adi
Örneğin Ürünler tablosundaki ürünlerin toplam fiyatlarını Ürün_id sutünuna göre aşağıdaki gibi gruplandırabiliriz.
SELECT ürün_id, SUM(urunfiyati) AS toplamfiyat FROM urunler GROUP BY urun_id
Örnek : Personel tablosundaki kişilerin bölümlerine gruplandırılmış bir şekilde göre toplam maaşlarını bulan SQL sorgusu:
SELECT bolum, SUM(maas) AS toplammaas FROM personel GRUP BY bolum
Örnek: 3 Mayıs 2012 tarihinde yapılan satışların ürün kategorisine göre gruplandırılmış bir şekilde elde edilen para miktarını veren SQL sorgusu
SELECT urunkategori, SUM(fiyat) AS toplamfiyat FROM satışlar WHERE tarih=’03/05/2012’ GROUP BY urunkategori
Örnek: Nisan ayında yapılan satışlardan ürün kategorisine göre gruplandırılmış bir şekilde elde edilen para miktarını veren SQL sorgusu
SELECT urunkategori, SUM(fiyat) AS toplamfiyat FROM satışlar WHERE tarih BETWEEN #01/04/2012# AND #31/04/2012# GROUP BY urunkategori
HAVING KULLANIMI:
Grup içinden sadece belirli şartlara sahip elemanları seçmek için kullanılır. Örneğin fiyat toplamı 100 TL yi geçen ürünlerin listesini ürün kategorisi sütununa göre aşağıdaki gibi gruplandırabiliriz.
SELECT ürün_id, SUM(fiyat) AS toplamfiyat FROM urunler GROUP BY ürün_id HAVING SUM(fiyat)>100
Örnek: Maaşları toplamı 6000 TL yi geçen kişilerin bölümlerini ve maaşları toplamını bölümlerine göre gruplandırarak listeleyen SQL sorgusu:
SELECT bolum, SUM(maas) AS toplammaas
FROM uyeler GROUP BY bolum HAVING SUM(maas)>=6000;
Örnek: Üyeler tablosundan aynı şehirde oturan kişi sayısının 3 ten büyük olanların sayıları ve şehir isimlerini listeleyen SQL sorgusu.
SELECT şehir,COUNT(*) AS kişi FROM üyeler GROUP BY şehir HAVING COUNT(*)>3
ALANLAR ÜZERİNDE İŞLEM YAPMA:
Veritabanında gerçekte bulunmayan alanları diğer alanlar üzerinde işlem yaparak oluşturabiliriz. Örneğin Günlük_Satışlar tablosunda FIYAT ve ADEDİ alanları olsun ama TUTUAR alanı bulunmasın. TUTAR alanı FIYAT ile ADEDİ çarpımından oluşacağı için bu işlemi yaparak şöyle bir sütun oluşturabiliriz.
SELECT adısoyadı, aldığıürün,adedi,fiyatı,(adedi*fiyatı) AS tutarı FROM Günlük_Satışlar
Buradaki (adedi*fiyatı) AS tutarı ifadesi fiyat ve adedi alanlarının çarpılarak Tutarı isimli alanda gösterileceğini belirtir. Bu işlem sonucunda tabloya Tutarı alanı eklenmez. Sadece ekranda bir sütun olarak listelenir.
Böylece tabloda olmayan ama kullanıcıya göstermek istediğimiz bilgileri hesap yoluyla oluşturabiliriz. Diğer alanlar üzerinde işlem yapılarak oluşturulabilecek alanları fazla yer kaplamaması için veritabanına yazmak istemiyorsanız bu yöntemi kullanarak işlemler oluşturabiliriz.
Aynı örneği geliştirerek tablomuzda olmamasına rağmen KDV ve TOPLAM_TUTAR alanlarını da oluşturabiliriz.
SELECT adısoyadı, adlığıürün,adedi,fiyatı, (adedi*fiyatı) AS TUTARI, (adedi*fiyatı*0.18) AS KDV, (adedi*fiyatı*1.18) AS TOPLAM_TUTARI FROM Günlük_Satışlar
Bunlara bir kaç örnek :
Tablodaki Verileri Sıralama – ORDER BY :
Verileri Sıralı olarak almak için ORDER BY ifadesi kullanılır. Bu ifadeden sonra sıralamanın hangi alana göre yapılacağı yazılır ve sıralamanın artan mı yoksa azalan mı olduğunu belirlemek için ASC ve DESC ifadeleri kullanılır. A dan Z ye doğru sıralamak için ASC kullanılır.
SELECT alanlar FROM tablo_adi ORDER BY alan_adi ASC
Z den A’ya doğru sıralama için DESC kullanılır.
SELECT alanlar FROM tablo_adi ORDER BY alan_adi DESC
Sıralama biçimi belirtilmezse A’dan Z’ye sıralama yapılır.
Sıralama işleminde birden fazla alana göre de sıralama yapılabilir. Örneğin önce soyada sonra ada ve unvan alanına göre sıralama yapalım.
SELECT soyad,ad,unvan FROM personel ORDER BY soyad,ad,unvan
Burada birinci ölçü soyad alanıdır. Soyad alan içerikleri aynı olduğunda Ad alanı, o da aynı olduğunda unvan alanına göre sıralanır.
Birden fazla alana göre sıralama yaparken bütün alanlar artan ya da azalan sırada olmak zorunda değildir. Örneğin soyad alanına göre artan sıralama yaparken Ad alanına göre azalan sıralama yapılabilir.
SELECT soyad,ad FROM personel ORDER BY soyad ASC, ad DESC
Burada birinci ölçü soyad alanıdır ve artan sırada istenmiştir.Soyad aynı olduğunda Ad alanına göre azalan sıralama yapılır.
WHERE ile Veri Filtreleme :
Tabloda bulunan verileri istediğimiz belli şartlara bağlı olarak listeleyebiliriz. Bu şartları oluşturmak için WHERE kullanılır.
SELECT alanlar FROM tablo_adi WHERE şart_ifadesi
Örneğin Başlık alanında “Satış Danışmanı” yazan kayıtları listelemek için sorgu cümlemiz şu şekilde olacaktır.
SELECT * FROM personel WHERE başlık=”Satış Danışmanı”
Örnek 2:Görevi yonetici olan ve gorev suresi 25 yıldan fazla olan personel soyad,ad, görevsüresini Adına göre artan şekilde listeleyen SQL sorgusunu yazınız.
SELECT soyad,ad,gorevsuresi FROM personel WHERE gorev=”Yonetici” AND gorevsuresi>25 ORDER BY ad ASC
Şartlı Sorgulama Operatörleri:
Şart ifadesi olarak kullanabileceğimiz operatörler şunlardır.
Operatör | Anlamı |
< | Küçük |
> | Büyük |
<= | Küçük eşit |
>= | Büyük Eşit |
= | Eşit |
<> | Eşit Değil |
And | Ve anlamındadır. İki şartın sağlanmasıİçin kullanılır. |
Or | Veya anlamındadır.Sadece bir şartın sağlanması durumunda kullanılır. |
Not | Şartın olumsuz olması durumunda(olmaması) kullanılır. |
Between x AND y | X ve y değerleri arasındaki değerler için kullanılır. |
LIKE | Bir alanın başlangıç, bitiş ya da orta kısımlarını süzer. |
NOT LIKE | LIKE ile verilen şartın dışındakileri süzer |
IN | Parantez içindeki değerleri süzer |
NOT IN | Parantez içinde verilen değerlerin dışındakileri süzer. |
!= | Eşit Değil |
Örneğin doğum tarihi 1.1.1960 dan küçük olanları listelemek için sorgu cümlemiz şöyle düzenlenmelidir.
SELECT * FROM uyeler WHERE dogumtarihi<#1/1/1960#
Şartlarımızı yazarken AND, OR, NOT gibi mantıksal ifadeleri kullanarak birden fazla şartı da verebiliriz.
Örneğin doğum tarihi 1.1.1960 dan büyük ve bölümü Dahiliye olanları listelemek için SQL cümlemiz :
SELECT * FROM uyeler WHERE dogumtarihi>#1/1/1960# AND bolum=”Dahiliye”
BETWEEN kullanımı:
İki aralık belirtirken bu şartı between deyimi ile de kullanabiliriz.
Örneğin 1.1.2012 ile 1.2.2012 tarihleri arasında satılan ürünleri listelemek için sorgumuz :
SELECT * FROM satışlar WHERE satıstarihi BETWEEN #1/1/2012# AND #1/2/2012#
IN Kullanımı :
Birden fazla şartı belirtirken IN deyimini de kullanabiliriz. Örneğin bolum içerisinde ‘Elektrik’,’Bilişim’,’Makine’ olanları bulmak için SQL cümlemiz:
SELECT * FROM ogrenciler WHERE bolum IN (‘Elektrik’,’Bilişim’,’Makine’)
Aynı sorguyu OR kullanarak da yazabiliriz.
SELECT * FROM ogrenciler WHERE bolum=’Bilişim’ OR bolum=’Elektrik’ OR bolum =’Makine’
NOT IN Kullanımı:
IN parantezinde verilen değerlerin dışındaki değerleri içeren kayıtları listeler.
Örneğin bolum içerisinde ‘Elektrik’,’Bilişim’,’Makine’ olmayanları bulmak için SQL cümlemiz:
SELECT * FROM ogrenciler WHERE bolum NOT IN (‘Elektrik’,’Bilişim’,’Makine’)
LIKE Kullanımı:
Benzer kayıtları listelemek için LIKE deyimi kullanılır. LIKE operatörü yardımcı karakterler ile kullanılarak daha geniş bir sorgu imkanı sağlar.
Yardımcı Karakter | Kullanım Biçimi | Açıklama |
% | %van | Birden fazla karakterleri temsil eder.Tatvan,Elvan,Tavan,Kavan Gibi |
Van% | Vanlı, Vanilya gibi | |
%van% | İlvan,Tatvan,Karavana gibi | |
- | z-p | Tek karakterleri temsil eder.Zip,Zap,Zep gibi… |
[ ] | Ahmet[pk ]ara | Köşeli parantez içindeki tek karakteri temsil eder. Ahmet Para ya da Ahmet Kara gibi sonuçları listeler. |
[ ^ ] | %p[ ^a ]% | Köşeli parantez içinde yazılan karakterleri içermeyen sonuçları listeler.Burada P den sonra a karakteri kesinlikle yer almayan kelimeleri listeleyecektir. |
[ - ] | [a-d]% | Bir aralıktaki karakterlerle başlayan sonuçları listeleyecektir. Burada a,b,c,d ile başlayan kelimeler listelenecektir. |
# | N1## | Sayısal olan tek karakterleri simgeler. Burada N100 ya da N124 gibi sonuçlar bulunacaktır. N10 ya da N1000 gibi sonuçlar bulunmayacaktır. |
Örnek : Bir Harf ile başlayan kayıtları sorgulama
Örneğin soyadı D harfi ile başlayan kayıtları listelemek için SQL cümlesi:
SELECT * FROM ogrenciler WHERE soyad LIKE ‘D%’
Burada LIKE ‘%D’ şeklinde kullanılırsa sonu D harfi ile bitenler listelenir.
LIKE %D% şeklinde kullanılırsa içinde D harfi geçenler listelenir.
Örneğin Adı alanında içerisinde ‘an’ harfi geçmeyen kayıtların ad ve soyad bilgilerini Adına göre artan şekilde listelemek için
SELECT ad,soyad FROM ogrenciler WHERE ad NOT LIKE ‘%an%’ ORDER BY ad ASC
Örneğin Soyad alanı içinde b,c,d,e,f ile başlayan kişilerin soyad ve ad bilgilerini listeleyen SQL sorgusu:
SELECT soyad,ad FROM ogrenciler WHERE soyad LIKE ‘[b-f]%’
NULL DEĞERLER
Boş kayıtları bulmak için IS NULL ifadesi şart olarak kullanılır. Örneğin soyadı girilmeyen kayıtların tüm bilgilerini listelemek için
SELECT * FROM ogrenciler WHERE soyad IS NULL
IS NOT NULL
Boş olmayan kayıtları listelemek için IS NOT NULL kullanılır. Örneğin soyad alanı boş olmayan kayıtları listelemek için
SELECT * FROM ogrenciler WHERE soyad IS NOT NULL
Örnek 1: Personel veritabanında uyeler tablosundan Doğum tarihi 1 Ocak 1980 ile 1 Ocak 1995 tarihleri arasında olan personelin adsoyad,bolum ve maaş bilgilerini maaşına göre artan şekilde sıralayan SQL cümlesi:
SELECT adsoyad,bolum,maas
FROM uyeler WHERE dogumtarihi BETWEEN #01/01/1980# AND #01/01/1995# ORDER BY maas ASC;
Örnek 2: Uyeler tablosundan maası 2500 den fazla ve 3000 den az olan personel adsoyad,bölüm,maaş bilgilerini Adsoyadına tekrarsız maaşına göre azalan şekilde listeleyen SQL sorgusu
SELECT adsoyad,bolum,maas DISTINCT adsoyad
FROM uyeler
WHERE maas BETWEEN 2500 AND 3000 ORDER BY maas DESC
Örnek 3:uyeler tablosundan bütün kişileri adsoyad alanına göre artan maaşına göre azalan şekilde listeleyen SqL Sorgusu
SELECT *
FROM uyeler
ORDER BY adsoyad ASC, maas DESC;
Örnek 4:uyeler tablosundan bütün kişileri maaşına göre azalan ve adsoyad alanına göre artan şekilde listeleyen SQL Sorgusu
SELECT *
FROM uyeler
ORDER BY maas DESC , adsoyad ASC;
Örnek5: Adres alanı içinde Çumra Kelimesi geçen kayıtların adsoyad ve adresini listeleyen SQL sorgusu
SELECT adsoyad,adres
FROM uyeler WHERE adres LIKE ‘*Çumra*’
Örnek 6 : Adresi Çumra olmayan kayıtları adsoyad alanına göre artan şekilde listeleyen SQL Sorgusu
1.Yöntem:
SELECT *
FROM uyeler
WHERE adres <>’Çumra’
2.Yöntem:
SELECT *
FROM uyeler
WHERE adres NOT LIKE ‘Çumra’
Örnek 7: Adresi içerisinde Çumra kelimesi geçmeyen veya maaşı 5000 ile 3000 arasında olan kişileri adsoyad, adres ve maaş bilgilerini maaşına göre artan şekilde listeleyen SQL sorgusu
SELECT adsoyad,adres,maas
FROM uyeler
WHERE adres NOT LIKE ‘*Çumra*’ OR maas BETWEEN ’5000′ AND ’3000′ ORDER BY maas ASC;
İSTATİSTİKSEL İŞLEMLER YAPMA:
Veritabanındaki bir alanda bulunan verilerin toplamını, ortalamasını, en büyük değeri veya en küçük değeri bulmak için istatistik amaçlı olarak kullanılan max, min, count, sum ve avg gibi fonksiyonlar kullanılır. Bu fonksiyonlar genellikle Group By cümlesi ile kullanılır.
MAX :
Max alandaki en büyük değeri verir. Örneğin Ürünler tablosunda fiyatı en yüksek olan ürünü bulan SQL sorgusu:
SELECT MAX(fiyat) AS enyuksekfiyat FROM urunler
Aynı ifadeyi şartlı olarak da yazabiliriz.
SELECT MAX(fiyat) AS enyuksekfiyat FROM urunler WHERE kategori=Anakart
MİN:
Min Alandaki en düşük değeri verir.
Örneğin SELECT MIN(fiyat) AS endusukfiyat FROM urunler
Veya
SELECT MIN(fiyat) AS endusukfiyat FROM urunler WHERE kategori=Anakart
Gibi.
AVG:
AVG bir sütundaki değerlerin ortalamasını verir.
Örneğin ürünler tablosundaki ürünlerin fiyat ortalamasını veren SQL sorgusu
SELECT AVG(fiyat) AS ortalamafiyat FROM urunler
Ya da
SELECT AVG(fiyat) AS anakartortalamafiyat FROM urunler WHERE kategori=Anakart
SUM:
SUM bir alandaki değerlerin toplamını verir. Örneğin Ürünler tablosundaki ürünlerin fiyatlarının toplamını veren SQL Sorgusu
SELECT SUM(fiyat) AS toplamfiyat FROM urunler WHERE kategori=’Anakart’
COUNT:
Count bir tablodaki kayıt sayısını listeler. Örneğin ürünler tablosundaki kayıt sayısı aşağıdaki gibi olacaktır.
SELECT COUNT(*) AS kayitsayisi FROM urunler
Örneğin fiyatı 20 TL den büyük olan ürünlerin sayısını aşağıdaki gibi bulabiliriz.
SELECT COUNT(*) AS kayitsayisi FROM urunler WHERE fiyat>20
Hangi Şehirde Kaç Kişi Yaşıyor?
Bir şehirde kaç kişinin yaşadığını bulmak için aşağıdaki gibi bir sorgu kullanabiliriz.
SELECT adres, COUNT(*) AS kisi FROM uyeler GROUP BY adres
Örnekler
Örnek 1:Uyeler Maaşı en yüksek olan kişinin maaşını bulan SQL Sorgusu
SELECT MAX(maas) AS enyuksekmaas FROM uyeler
Örnek 2: Bölümü KBB olan kişilerden maaşı en yüksek olan kişinin maaşını listeleyen SQL Sorgusu
SELECT MAX(maas) AS enyuksekmaas FROM uyeler WHERE bolum=’KBB’
Örnek 3: Bölümü Göz olan kişilerden maaşı en düşük olan kişinin maaşını listeleyen SQL Sorgusu
SELECT MIN(maas) AS endusukmaas FROM uyeler WHERE bolum=’Göz’
Örnek 4: Uyeler tablosundaki maaşların ortalamasını veren SQL Sorgusu
SELECT AVG(maas) AS ortmaas
FROM uyeler;
Örnek 5: Bölümü ‘Dahiliye’,’Ortopedi’veya ‘Kardiyoloji’ olmayan kişilerin maaşlarının toplamını veren SQL Sorgusu
SELECT SUM(maas) AS toplammaas
FROM uyeler WHERE bolum NOT IN (‘DAhiliye’,'Ortopedi’,'Kardiyoloji’);
Örnek 6 : Adres alanı içerisinde ÇUMRA kelimesi geçenlerin sayısını veren SQL sorgusu
SELECT COUNT(*) AS kisi FROM uyeler WHERE adres LIKE ‘*Çumra*’
Örnek 7 : Adresi ÇUMRA olan kişilerin sayısını veren SQL sorgusu
SELECT COUNT(*) AS kisi
FROM uyeler WHERE adres=’Çumra’;
Verileri Gruplandırma – GROUP BY
GROUP BY deyimi ile verileri belirli alanlara göre gruplandırabiliriz.
SELECT alanlar FROM Tablo_adi WHERE şart_ifadesi GROUP BY alan_adi
Örneğin Ürünler tablosundaki ürünlerin toplam fiyatlarını Ürün_id sutünuna göre aşağıdaki gibi gruplandırabiliriz.
SELECT ürün_id, SUM(urunfiyati) AS toplamfiyat FROM urunler GROUP BY urun_id
Örnek : Personel tablosundaki kişilerin bölümlerine gruplandırılmış bir şekilde göre toplam maaşlarını bulan SQL sorgusu:
SELECT bolum, SUM(maas) AS toplammaas FROM personel GRUP BY bolum
Örnek: 3 Mayıs 2012 tarihinde yapılan satışların ürün kategorisine göre gruplandırılmış bir şekilde elde edilen para miktarını veren SQL sorgusu
SELECT urunkategori, SUM(fiyat) AS toplamfiyat FROM satışlar WHERE tarih=’03/05/2012’ GROUP BY urunkategori
Örnek: Nisan ayında yapılan satışlardan ürün kategorisine göre gruplandırılmış bir şekilde elde edilen para miktarını veren SQL sorgusu
SELECT urunkategori, SUM(fiyat) AS toplamfiyat FROM satışlar WHERE tarih BETWEEN #01/04/2012# AND #31/04/2012# GROUP BY urunkategori
HAVING KULLANIMI:
Grup içinden sadece belirli şartlara sahip elemanları seçmek için kullanılır. Örneğin fiyat toplamı 100 TL yi geçen ürünlerin listesini ürün kategorisi sütununa göre aşağıdaki gibi gruplandırabiliriz.
SELECT ürün_id, SUM(fiyat) AS toplamfiyat FROM urunler GROUP BY ürün_id HAVING SUM(fiyat)>100
Örnek: Maaşları toplamı 6000 TL yi geçen kişilerin bölümlerini ve maaşları toplamını bölümlerine göre gruplandırarak listeleyen SQL sorgusu:
SELECT bolum, SUM(maas) AS toplammaas
FROM uyeler GROUP BY bolum HAVING SUM(maas)>=6000;
Örnek: Üyeler tablosundan aynı şehirde oturan kişi sayısının 3 ten büyük olanların sayıları ve şehir isimlerini listeleyen SQL sorgusu.
SELECT şehir,COUNT(*) AS kişi FROM üyeler GROUP BY şehir HAVING COUNT(*)>3
ALANLAR ÜZERİNDE İŞLEM YAPMA:
Veritabanında gerçekte bulunmayan alanları diğer alanlar üzerinde işlem yaparak oluşturabiliriz. Örneğin Günlük_Satışlar tablosunda FIYAT ve ADEDİ alanları olsun ama TUTUAR alanı bulunmasın. TUTAR alanı FIYAT ile ADEDİ çarpımından oluşacağı için bu işlemi yaparak şöyle bir sütun oluşturabiliriz.
SELECT adısoyadı, aldığıürün,adedi,fiyatı,(adedi*fiyatı) AS tutarı FROM Günlük_Satışlar
Buradaki (adedi*fiyatı) AS tutarı ifadesi fiyat ve adedi alanlarının çarpılarak Tutarı isimli alanda gösterileceğini belirtir. Bu işlem sonucunda tabloya Tutarı alanı eklenmez. Sadece ekranda bir sütun olarak listelenir.
Böylece tabloda olmayan ama kullanıcıya göstermek istediğimiz bilgileri hesap yoluyla oluşturabiliriz. Diğer alanlar üzerinde işlem yapılarak oluşturulabilecek alanları fazla yer kaplamaması için veritabanına yazmak istemiyorsanız bu yöntemi kullanarak işlemler oluşturabiliriz.
Aynı örneği geliştirerek tablomuzda olmamasına rağmen KDV ve TOPLAM_TUTAR alanlarını da oluşturabiliriz.
SELECT adısoyadı, adlığıürün,adedi,fiyatı, (adedi*fiyatı) AS TUTARI, (adedi*fiyatı*0.18) AS KDV, (adedi*fiyatı*1.18) AS TOPLAM_TUTARI FROM Günlük_Satışlar
Hiç yorum yok