Sql AND ve OR kullanımının karışması – ÇÖZÜM

Sql AND ve OR kullanımının karışması – ÇÖZÜM

  • 6 Eylül 2013
  • 5 Okunma
  • Yorum Yok
  • 5 DK

Merhaba arkadaşlar bu yazımda sizlere sql sorgularında hem OR hem AND ayraçlarını kullanırken yaşanılan sonuç hatalarının düzentilmesini göstericem.

Bu olayı göstermek için LIKE ile arama yaptırıcam en anlaşılır olarak böyle anlatabilirim diye düşündüm

Mantık şu
Benim müşteriler tablodam 6 tane sutun var bunlar
id | isimsoyisim | telefon | mail | siparisonay | odemeyapildi

sutunlar yukarıdaki gibi şimdi ben arama yaptırmak istersem

SELECT * FROM musteriler WHERE isimsoyisim LIKE “%Hasan%” AND mail LIKE “%Hasan%” AND telefon LIKE “%Hasan%”

Sql de and or çakışması

Sql de and or çakışması

Yukarıdaki sorguyu kullanırsam aslında hata yapmış olurum sonucu bana vermeyecek veya istediğim sonucu vermeyecektir. Bunun sebebi ise ayraç olarak AND kullanmamız yukarıdaki sorguyu okuyalım şöyle bir mantık çıkıyor.

Müşteriler tablosundaki isimsoyisim de Hasan geçen aynı zamanda mail kısmında Hasan geçen aynı zamanda telefonda Hasan geçenleri seç.

Aynı zamanda dediğim kısımlar olması şart olan kısımlar yani. Hasan kelimesi isimsoyisim , mail ve telefonda geçmek zorunda oluyor bizim istediğimiz hangisinde varsa onun listelenmesi o zaman sql sorgumuzu şöyle değiştiriyoruz

SELECT * FROM musteriler WHERE isimsoyisim LIKE “%Hasan%” OR mail LIKE “%Hasan%” OR telefon LIKE “%Hasan%”

Sql or ile sağlıklı arama

Sql or ile sağlıklı arama

Bu sorgu doğru bir sorgudur okunuşunuda yapalım daha iyi anlayalım

Müşteriler tablosundaki isimsoyisimde Hasan geçenleri bul yoksa mailde Hasan geçenleri bul yoksa telefonda Hasan geçenleri bul

Ben burada “yoksa” olarak kullandım daha iyi anlaşılsın diye OR kelimesinin Türkçesi “veya, yada” anlamına geliyor.

Neyse devam edelim sorgumuzu bir adım daha öteye taşıyalım şöyle birşey istiyoruz müşteriler tablosunda siparişi onay verilmiş ama ödemesi yapılmamış olanları arama yapalım o zaman sorgumuz şöyle oluyor.

SELECT * FROM musteriler WHERE siparisonay=”1″ AND  odemeyapildi=”0″ AND isimsoyisim LIKE “Hasan” OR mail LIKE “Hasan” OR telefon LIKE “Hasan”

Şu an sorgu sapıttı neden derseniz aşağıdaki resme bakarsanız anlarsınız.

r3

Gördüğünüz gibi ben odemeyapildi=”0″ ları istiyorum ama bana odemeyapildi=”1″ leri gösteriyor. Şu an bu sorguda bana sonuç bulamaması lazım aslında çünkü veriler arasında adı Hasan olan tek kişi benim ve ödememi yapmışım sorguda ödemesi yapılmayan Hasanları istiyor. Bunu şöyle çözüyoruz

SELECT * FROM musteriler WHERE siparisonay=”1″ AND  odemeyapildi=”0″ AND (isimsoyisim LIKE “%Hasan%” OR mail LIKE “%Hasan%” OR telefon LIKE “%Hasan%”)

Yukarıdaki sorguda tek fark koyu ile belirttiğim parantezler. Kırmızı AND den sonra geliyor fark ettiyseniz AND olması şart neden derseniz sonuca dahil olması gerekiyor.

Sql de parantez kullanımı

Gördüğünüz üzere sorgunun sonuc 0 🙂 ben ödememi yapmışım çünkü ve başka hasan de olmadı için sonuç 0 🙂 anlamadığınız yer varsa sorun 😀

HAYATI KODLA'YA ABONE OLUN!!
ETKİLEYİCİ BİR YORUM BIRAK

Sql AND ve OR kullanımının karışması – ÇÖZÜM İle Benzer Yazılar

"Sql AND ve OR kullanımının karışması – ÇÖZÜM" Yazısına uygun diğer makalerler