SQL Server’da Matematik ve Mantıksal İşlemler
Matematik Operatörler
+ : Toplama
- : Çıkartma
* : Çarpma
/ : Bölme
% : Modül (bölmeden sonra kalan)
İşlem Öncelik Sırası
1.Öncelik : parantez içi
2.Öncelik : çarpma, bölme
3.Öncelik : toplama, çıkartma
2+3-7+5
Yukarıdaki işlemde önce 2 ile 3 toplanır, sonuçtan 7 çıkarılır ve elde edilen sonuca 5 eklenir.
5/2
Yukarıdaki işlemde 5 tamsayısı 2 tamsayısına bölünür. Sonuç bir tamsayıdır ve değeri ondalık kısım atılarak 2 olur.
5/2 = 2
int+int = int
int+reel = reel
reel+reel = reel
Mantıksal Operatörler
Veritabanından
veri almak,
veri değiştirmek,
veri silmek için bazı mantıksal işlemler yapmak gerekir.
Aslında programcılıkta iyi bir mantık bilgisine ihtiyaç vardır.
Veritabanında mantıksal işlemler
UPDATE ... WHERE mantıksal ifade
DELETE ... WHERE mantıksal ifade
SELECT ... WHERE mantıksal ifade
mantıksal ifadenin doğru (true) sonuç verdiği kayıtlarda; UPDATE, DELETE ve SELECT işlemleri yapılabilir. Yanlış sonuç veren kayıtlar hariçte kalır.
= |
Eşit |
> |
Büyük |
< |
Küçük |
>= |
Büyük veya eşit |
<= |
Küçük veya eşit |
<> |
Eşit değil |
Karşılaştırma Operatörleri Örnekleri
a, b, c ve d değeleri aşağıdaki gibi olsun.
a=6 b=20 c=60 d=20
Bu değerlerden aşağıdaki örnekleri üretelim.
a=b sonuç yanlış (false)
b=d sonuç doğru (true)
a>b sonuç yanlış (false)
c>d sonuç doğru (true)
a>=b sonuç: yanlış
b>=d sonuç: doğru
c>=d sonuç: doğru
a<b sonuç: doğru
a<>b sonuç doğru
d<>b sonuç yanlış
NOT Operatörü
NOT operatörü doğrulama tablosu aşağıdadır.
x |
NOT x |
dogru |
yanlış |
yanlış |
doğru |
AND Operatörü
AND operatörü doğrulama tablosu aşağıdadır.
x |
y |
x AND y |
dogru |
dogru |
dogru |
dogru |
yanlış |
yanlış |
yanlış |
doğru |
yanlış |
yanlış |
yanlış |
yanlış |
OR Operatörü
OR operatörü doğrulama tablosu aşağıdadır.
x |
y |
x OR y |
dogru |
dogru |
dogru |
dogru |
yanlış |
dogru |
yanlış |
doğru |
dogru |
yanlış |
yanlış |
yanlış |
IN ve NOT IN Operatörü
Bir karşılaştırma için ard arda OR operatörü kullanmak yerine IN operatörü kullanılmaktadır.
örneğin grubu değeri "A1", "B2", "C2","T3" değerinden biri ise OR deyimi ile aşağıdaki gibi yazılır.
... WHERE (grubu='A1') OR (grubu='B2') OR
(grubu='C2') OR (grubu='T3')
Aynı deyimi IN operatörü ile yazarsak,
... WHERE grubu IN ( 'A1', ' B2', 'C2', 'T3')
Aynı deyimi NOT IN operatörü ile yazarsak.
... WHERE grubu NOT IN ( 'A1', 'B2', 'C2', 'T3')
A1, B2, C2, T3 harici olanları dikkate alır.
LIKE ve NOT LIKE operatörü
Bu deyim ile herhangibir verinin içindekine göre süzme işlemi yapar.
Örneğin adı "AL" ile başlayan verilerin dökümünü almak için,
... WHERE adi LIKE 'AL%'
Örneğin adı "AL" ile başlamayan verilerin dökümünü almak için,
... WHERE adi NOT LIKE 'AL%'
şeklinde yazılır.
İşaret |
Anlamı |
% |
Kullanıldığı tarafta sıfır veya çok sayıda karakter var |
_ |
Herbir bir alt çizgi herhangi bir karaktere denk gelir. |
[] |
Karakter aralığı belirtilir. Bu aralığın içindekileri alır. |
[^] |
Karakter aralığı belirtilir. Bu aralığın dışındakileri alır. |
Örnekler
adı kolonu AL kelimesi veya AL ile başlayan tüm kayıtlar
... WHERE adı LIKE 'AL%'
adı kolonu AL kelimesi veya içinde AL yazan tüm kayıtlar
... WHERE adı LIKE '%AL%'
adı kolonu AL kelimesi veya AL ile biten tüm kayıtlar
... WHERE adı LIKE '%AL'
ilk iki karakteri AL ve 3. karakteri herhangibir karakter olan tüm kayıtlar
... WHERE adı LIKE 'AL_'
saat 9 olan ve dakika kısmında herhangi bir sayı yazan tüm kayıtlar.
... WHERE saat LIKE '9:__'
adı kolonunun 1.karakteri A-D arasında ve 2.karakteri H-Z arasında olan tüm kayıtlar.
... WHERE adı LIKE '[A-D][H-Z]%'
Adı kolonu A-D ile başlamayan tüm kayıtlar.
... WHERE adı LIKE '[^A-D]%'
adı kolonu AL ile başlamayan tüm kayıtlar
... WHERE adı NOT LIKE 'AL%'
adı kolonu içinde AL olmayan tüm kayıtlar
... WHERE adı NOT LIKE ‘%AL%'
adı kolonu AL ile bitmeyen tüm kayıtlar
... WHERE adı NOT LIKE '%AL'
ilk iki karakteri AL ve 3. karakteri herhangibir karakter olmayan tüm kayıtlar
... WHERE adı NOT LIKE 'AL_'
BETWEEN ve NOT BETWEEN operatörü
Değerlerin belli aralıkların içinde veya dışında olduğunu belirtir.
tarih aralığının '01/01/91' - '01/01/92' olması durumunda deyim aşağıdaki gibi yazılır.
... WHERE tarih BETWEEN '01/01/91' AND '01/01/92'
yukarıdaki deyim aşağıdaki gibi de yazılabilirdi.
... WHERE tarih >= '01/01/91' AND tarih <='01/01/92'
tarih aralığının '01/01/91' - '01/01/92' dışında olması durumunda deyim aşağıdaki gibi yazılır.
... WHERE tarih NOT BETWEEN '01/01/91' AND '01/01/92'
yukarıdaki deyim aşağıdaki gibi de yazılabilirdi.
... WHERE tarih < '01/01/91' AND tarih > '01/01/92'
IS NULL ve IS NOT NULL operatörü
Örneğin, adı kolonuna değer girilmemiş tüm kayıtlar getirilir.
... WHERE adı IS NULL
yada aşağıdaki gibi yazılırsa veri girilmiş olanlar yani NULL değer içermeyen kayıtlar sorgulanır.
... WHERE adı IS NOT NULL
Genel Bir Örnek Çözelim
Aşağıdaki mantıksal işlemin sonucu true ve false dan hangisidir.
('YTL' IN ('USD ' , 'EUR' ) AND 'CANSU' LIKE '[ABCD]A%')
OR 10 < 10 AND (10 BETWEEN 0.9 AND 10) OR (15=25)
Parantez öncelikli olarak, soldan sağa doğru çözeceğiz. Bu denklemde
'YTL' IN ('USD ' , 'EUR' ) AND 'CANSU' LIKE '[ABCD]A%'
ifadesi parantez içinde, önce bu ifadeyi çözeceğiz. Arada AND bağlacı var ve IN operatörü kullanılmış. AND diğer tarafında LIKE operatörü var
AND opratörünün solunda yer alan 'YTL' IN ('USD ' , 'EUR' ) işlemi false değerini verir çünkü YTL değeri IN operatörünün kapsadığı değer içinde değildir.
AND opratörü kullanıldığında bir adet bile false varsa, sonuç false'dir sağ taraftaki işleme bakmaksızın bu işlemin false olduğunu söyleyebilir.
Biz yine de ikinci tarafa bakalım; 'CANSU' LIKE '[ABCD]A%' işleminde ilk karakter ABCD karakterinde birisimi ve ikinci karakter A olan tüm kayıtlar mı diye
bakacağız. Bakınca CANSU bu şartı sağlıyor. Değer true'dur. AND operatörünün solu false, sağı true yani false AND true = false'dir.
Devam edersek; ilk OR operatörüne kadar olan değer false, 10<10 değeri de false, 10 BETWEEN 0.9 AND 10 değeri true ve 15=25 değeri false
false OR false AND true OR false
İşlemde AND olduğundan ve AND'in solu false olduğu için bu işlemin sonucu false'dir.