Son Haberler
Anasayfa / Yazılım / SQL / WHERE Deyiminin AND ve OR ile Birlikte Kullanımı

WHERE Deyiminin AND ve OR ile Birlikte Kullanımı

Bundan önceki yazılarımda WHERE deyimini anlatırken sadece tek koşul kullanarak anlatmıştım. Bu yazımda WHERE deyiminin kullanımının birden fazla koşulla da sağlanabildiğini göstermek istiyorum. Bunun için AND ve OR deyimlerini kullanırız. AND her iki seçenek için de olmalı anlamında mantıksal deyim iken, OR deyimi herhangi birisi anlamında mantıksal bir deyimdir. Direkt olarak örneklere geçerek açıklamak istiyorum. AdventureWorks veritabanı üzerinde çalışıyorum.

SELECT BusinessEntityID,PersonType,NameStyle,Title,FirstName,MiddleName,LastName 
FROM Person.Person WHERE FirstName = 'John' AND LastName = 'Wood';

Bu sorgumuzda Person.Person tablosunda FirstName kolonu John ve LastName kolonu Wood olan verileri listeliyoruz. Listelediğimiz alanlar BusinessEntityID,PersonType,NameStyle,Title,FirstName,MiddleName,LastName.

Görüldüğü gibi sorgumuzda iki şart var. AND ile bu iki şartında uyduğu veriler listeleniyor.

191201

SELECT BusinessEntityID,PersonType,NameStyle,Title,FirstName,MiddleName,LastName 
FROM Person.Person WHERE LastName = 'Duffy' OR LastName = 'Wood';

Bu sorgumuzda Person.Person tablosunda LastName kolonu Wood veya Duffy olan verileri listeliyoruz. Listelediğimiz alanlar BusinessEntityID,PersonType,NameStyle,Title,FirstName,MiddleName,LastName.

Burada OR deyimi ile birlikte LastName alanı hem Duffy hem de Wood olabilir diyoruz, yani bu ikisinden herhangi birisi olması yeterli.

Bir WHERE deyiminin ardında iki koşul ifadesi koyabildiğimiz gibi ikiden fazla da koşul ifadesi koyabiliriz. Yalnız ikiden fazla koşul kullandığımızda parantezleri kullanmamız doğru olacaktır. Örneklerimize geçelim, daha netleşecek her şey :

Şimdi veritabanım üzerinde FirstName alanı Ken olan LastName alanı da Meyer mi Myer mi tam hatırlayamadığım veriler mevcut. Ben şunu istiyorum. LastName’i tam bilmediğim için LastName Meyer’de listelensin, Myer’de listelensin. Ama FirstName mutlaka Ken olsun. Bu sorguyu yazmak istiyorum. Şimdi aşağıdaki örnekleri inceleyelim :

SELECT BusinessEntityID,PersonType,NameStyle,Title,FirstName,LastName 
FROM Person.Person WHERE FirstName = 'Ken' AND LastName = 'Myer' OR LastName = 'Meyer';

191202

Şimdi burada tam istediğim sonucu alamadım. Çünkü LastName alanı tamam Meyer veya Myer listelendi ama FirstName alanı için sadece Ken istedim ben, onun yerine farklı FirstName değerleri de var, olmadı bu.

SELECT BusinessEntityID,PersonType,NameStyle,Title,FirstName,LastName 
FROM Person.Person WHERE LastName = 'Myer' OR LastName = 'Meyer' AND FirstName = 'Ken';

191203

Bu da olmadı, yine istediğim sonuç değil.

SELECT BusinessEntityID,PersonType,NameStyle,Title,FirstName,LastName 
FROM Person.Person WHERE LastName = 'Meyer'AND FirstName = 'Ken' OR LastName = 'Myer';

191204

Bu da olmadı, yine istediğim sonuç değil.

SELECT BusinessEntityID,PersonType,NameStyle,Title,FirstName,LastName 
FROM Person.Person WHERE FirstName = 'Ken' AND (LastName = 'Myer' OR LastName = 'Meyer');

191205

İşte şimdi oldu, parantezin gücü 🙂 Görüldüğü üzere parantezi sorgumuza eklediğimiz de sonucumuzu doğru aldık. Peki neden böyle? Şimdi T-SQL’de koşullar değerlendirilirken ilk değerlendirilen AND deyimidir. Daha sonra OR değerlendirilir. Şimdi biz parantez kullanarak aslında şunu yapıyoruz. Önce parantez içini değerlendir sonra parantez dışına bak. Parantez içi diyor ki, LastName Meyer veya Myer olacak. Daha sonra bunun dışında AND ile FirstName ise Ken olacak diyoruz. Böylelikle doğru sonuca ulaşabiliyoruz. Yani WHERE deyiminden sonra soldan sağa doğru işlenir ancak AND önceliklidir, dolayısı ile bizde parantez kullanarak AND’den diğer kısmı ayrıştırmış olduk.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir