Harun Reşit Zafer

Bâki kalan bu kubbede bir hoş sadâ imiş

SQL 05: Karmaşık AND ve OR sorguları

Başlık gözünüzü korkutmasın. Bir önceki yazıda AND ve OR işleçlerinin (operatör) kullanımına genel olarak değinmiştik ama AND ve OR kavramlarının daha iyi anlaşılması için farklı sorgu örnekleri vermek istedim. Sorguları aşağıdaki tablo için yazacağız.

Not: Bu arada diğer SQL derslerine buradan ulaşabilirsiniz

Personel Tablosu

per_no isim soyisim yas cinsiyet kent ulke maas
1 Ahmet Yılmaz 20 E Ankara Türkiye 2000
2 Mehmet Efe 22 E Bolu Türkiye 1800
3 Ayşe Can 23 K İstanbul Türkiye 2500
4 Fatma Ak 35 K Ankara Türkiye 2800
5 John Smith 45 E New York ABD 3500
6 Ellen Smith 40 K New York ABD 3000
7 Hans Müller 30 E Berlin Almanya 4000
8 Frank Cesanne 35 E Paris Fransa 3700
9 Abbas Demir 26 E Adana Türkiye 1500
10 Hatice Yılmaz 26 K İstanbul Türkiye 3000

1- Adı Ahmet ve Mehmet olanlar:

SELECT * FROM personel WHERE isim= 'Ahmet' AND isim= 'Mehmet'

Bu sorgunun sonucu boş kümedir. Zira adı aynı zamanda hem Ahmet hem Mehmet olan kayıt yoktur. Bu örneği vermemin nedeni Adı Ahmet ve Mehmet olanlar ifadesinin normalde Ahmetler ve Mehmetler şeklinde anlaşılması. Ancak SQL’de işleçlerin (operatörlerin) anlamları nettir. Sorguyu aşağıdaki gibi değiştirelim:

SELECT * FROM personel WHERE isim='Ahmet' OR isim='Mehmet'

Değiştirmiş olduğumuz sorgunun Türkçesi adı ‘Ahmet’ veya adı ‘Mehmet’ olanlar şeklinde ifade edilir. Bu sorgunun sonucu aşağıdaki gibidir:  

per_no isim soyisim yas cinsiyet kent ulke maas
1 Ahmet Yılmaz 20 E Ankara Türkiye 2000
2 Mehmet Efe 22 E Bolu Türkiye 1800

2- Yaşı 30’dan büyük ve erkek veya yaşı 25’ten küçük ve kadın olanlar:

SELECT * FROM personel 
WHERE (yas > 30 AND cinsiyet= 'E') OR 
(yas < 25 AND cinsiyet= 'K')

Sorgudaki parantezlere ve sorgunun aşağıdaki sonucuna dikkat:

per_no isim soyisim yas cinsiyet kent ulke maas
3 Ayşe Can 23 K İstanbul Türkiye 2500
5 John Smith 45 E New York ABD 3500
8 Frank Cesanne 35 E Paris Fransa 3700

3- Yaşı 30’dan büyük veya Ankara’da oturan ve maaşı 2500’den büyük veya kadın olanlar:

SELECT * FROM personel 
WHERE (yas > 30 OR kent= 'Ankara') AND 
(maas > 2500 OR cinsiyet= 'K')

Yukarıdaki 2 parantezin her birindeki 2 sorgudan en az birine uyan kayıtlar bu sorgunun sonucunu oluşturur. Örneğin ilk parantezdeki yaş koşulu tutan yani yaşı 30’dan büyük olan bir kayıtın ikinci parantezden de en az bir koşula uyması gerekiyor ki aşağıda yer alabilsin. Aşağıdaki sonuç kümesini incelediğinizde yukarıdaki sorguyu daha iyi anlayacaksınız:

per_no isim soyisim yas cinsiyet kent ulke maas
4 Fatma Ak 35 K Ankara Türkiye 2800
5 John Smith 45 E New York ABD 3500
6 Ellen Smith 40 K New York ABD 3000
8 Frank Cesanne 35 E Paris Fransa 3700

Herkese Kolay Gelsin

İlgili Diğer Makaleler

11 Ağustos 2009 Salı tarihinde yayınlandı.