Örnek-34: Kitaplığımızdaki en kalın kitap: SELECT MAX(SayfaSa MAX(SayfaSayisi) yisi) AS EnKalinKitap FROM Kitap;
STDDEV(grup_adi): Grup standart sapmasını bulur. COUNT(*): Kayıtların tamamını saymak için kullanılır. Sayı olmasına gerek yoktur. Örnek-36: Kitaplığımızdaki Kitaplığımızda ki Kitapın K itapın sayısı: SELECT COUNT(*) FROM Kitap; >>16
MIN(sutun_adi): Referans sütuna göre en küçük değeri bulmada kullanılır. BIT türden alanlarla birlikte kullanılmaz. Örnek-35: Kitaplığımızdaki en ince kitap: SELECT MIN(SayfaSayisi MIN(SayfaSayisi)) AS EnInceEnInceKitap FROM Kitap; Pek kullanılmasa da şu iki fonksiyon da gruplamalı fonksiyondur.
VARIANCE(sutun_adi): Grup varyansını bulur.
46
BYTE
Veritabanı Programlama 1
COUNT(sutun_adi): Referans sütuna göre toplam kaç kayıt yer aldığını bulur.
İPUCU COUNT(*) ile COUNT(sutun_1) arasındaki fark: COUNT(*) tüm kayıtların sayısını verirken, COUNT(sutun_1) sadece sutun_1 adlı alan için NULL olmayan kayıtların sayısını verir.
Örnek-37: Yazarlar tablosunda, tüm yazarların doğum tarihi henüz girilmemiştir girilmemiştir.. Bu durumda iken, yazarların sayısını COUNT(*) ve bir de COUNT(dogum) olmak üzere iki farklı şekilde şek ilde seçelim: SELECT COUNT(*) FROM yazar; >> 20 SELECT COUNT(do COUNT(dogum) gum) FROM yazar; >> 0
COUNT DISTINCT sutun_1: sutun_ 1’de kaç farklı değer tekrarladığını sayar. Örnek-38: Kütüphanedeki üye sayısı: SELECT COUNT(*) FROM UYE >>9 Kütüphanedeki üyelere üyelere ait farklı isim sayısı: SELECT COUNT(DISTINCT adi) FROM uye; >>6
Örnek-40: Elimizdeki kitapları türlerine göre grupladığımızda her bir türden toplam kaç sayfa kitabımız var?
İPUCU GROUP BY’ı BY’ı ORDER BY ile işlev olarak karıştırmamak gerekir. gerekir. GROUP BY verilerin gruplara göre sıralanmış olmasından ziyade, gruplara göre hesaplama yapılması ihtiyacı olduğunda kullanılmalıdır.. Sonuçların sıralaması ile ilgili kullanılmalıdır her şey için ORDER BY kullanmak gerekir. gerekir.
Bu kısa örneklerden sonra, grupsal fonksiyonların gruplar üstünde nasıl kullanıldığına yakında bakalım. Örnek-39: Elimizdeki Kitapları türüne göre gruplandırdığımızda, landırdığımız da, her bir grupta kaç kitap yer alıyor? SELECT turu,CO turu,COUNT(*) UNT(*) FROM Kitap GROUP BY turu; >>
SELECT turu,SUM(sayfaSayisi) AS grupBasiToplamSayfa FROM Kitap GROUP BY turu; Örnek-41: Elimizdeki kitapları türlerine göre grupladığımızda grupladığım ızda her bir tür için ortalama kitap sayfa adedini bulalım ama sayfa sayısı 400’den fazla olan Kitapları ve 75’den az olan Kitapları ortalamanın dışında tutalım (Hesaba katmayalım). Veritabanı Programlama 1
BYTE
47
“Her bir türden toplam kaç kitabın var?” Ve ekledi: “Bu arada, 2 kitaptan k itaptan az olan türleri saymayacaksın...” İşte cevabı: SELECT turu,CO turu,COUNT(*) UNT(*) FROM Kitap GROUP BY turu HAVING COUNT(*)>=2; SELECT turu as TURLER, AVG(SayfaSayisi) AS grupOrtalamaSa grupOrtalamaSayfa yfa FROM Kitap WHERE sayfaSayisi BETWEEN 75 AND 400 GROUP BY turu;
İPUCU Kayıt ltrelemede kullanılacak şartlar arasında gruplamalı Fonksiyonu kullanmayı gerektiren bir şart varsa, HAVING deyimi ile belirtilir.
Örnek-42: Bir arkadaşınız sizin kütüphanede otomasyona geçtiğinizi gördü ve şöyle bir soru yöneltti:
48
BYTE
Veritabanı Programlama 1
Örnek-43: Aynı arkadaşınız abarttı ve şu soruyu yöneltti: Her bir türde toplam kaç sayfa kitabın var? Ve ekledi Bu arada, kitap numarası 10’dan küçük olan Kitapın muhtemelen eskidir, sayma. Bir de Ortalaması 175 sayfayı aşmayan türleri de görmek istemiyorum, çünkü muhtemelen bu türlerde yeterince kalın kitaplar yok. En az sayfa kitap bulunan tür en altta yer alacak şekilde liste verebilir misin? Öncelikle şu ifadenin sonucuna bakalım: SELECT turu,SUM(sa turu,SUM(sayfaSayisi) yfaSayisi) sayfaSayisi
FROM Kitap WHERE kitapNo>10 GROUP BY turu SELECT turu,SUM(sa turu,SUM(sayfaSayisi) yfaSayisi) sayfaSayisi FROM Kitap WHERE kitapNo>10 GROUP BY turu HAVING AVG(sayfaSayisi)>175 ORDER BY SUM(sayfaSayisi) DESC; HAVING HA VING ifadesinden sonra, hikaye türü gelmemektedir. Çünkü grup ortalaması 166’dır ve bu da HAVING şartında verilen değerin altındadır.
5.JOINING Bu kısımda kullanılan tabloların ilişkisel yapılarını anlamak için, bu sayfanın sol altındaki diagrama bakabilirsiniz. İlişkisel veritabanının en temelinde birden fazla tablo üstünde birlikte işlem yapabilmek yatar. Bu sayede verilerin tekrarlaması önlenmiş olur ve sonuçta veri yönetimi kolaylaşır. Örneğin, Kitap tablomuzda, Kitapın bir tekil numara ile listesini tutuyoruz ve odunc listesinde de bu Kitapın kim tarafından alındığının, geri getirilip getirilmediğinin kaydını tutuyoruz. Bazen, bu iki tablodaki bilgilere de bir tek sorgu sonucu olarak ihtiyaç duyarız. Örneğin elimizde öyle bir sonuç olmalıdır ki, hangi kitabın kim tarafından ödünç alındığını bir listede görmemiz gereksin. Bu iki tablo birbirine, kitapNo alanı ile bağlıdır. Çünkü, ödünç verilen bir kitap hakkında detaylı bilgi edinmek istediğimizde, odunc listesinden kitap numarasını alırız, daha sonra Kitap tablosundan aynı numarayı bulur ve karşılığındaki kitap hakkındaki detayları görebiliriz. görebiliriz.
İPUCU Tabloların birbiri ile arasında bir ilişki tanımlanmadan ilişkisel sorgu yapılırsa, kartezyen çarpımı bulunur. Bu, ‘1.Tablodaki ‘1.Tablodaki her bir kayıt ile 2. Tablodaki her bir kayıt ilişkilidir’ demektir ve ilişkisel veritabanın doğasına terstir.
Veritabanı Programlama 1
BYTE
49
Örnek-44: SELECT * FROM Kitap, odunc; Sorgusunun sonucunda, Kitap tablosunda 50, odunc tablosunda 100 kayıt varsa, (50*100=5000) 5000 satırlık bir bu iki tablo için kartezyen kar tezyen çarpım sonucu bulunur.
rın yerine takma ad verip o adları kullanabiliriz.
İPUCU Takma adlar tabloların ismini kısaltmanın yanı sıra başka işlerde de kullanılır. Genellikle tablolar için takma ad seçilirken kısa olması açısından 2 veya tek harf har f lakaplar tercih edilir edilir..
Klasik Join
İki tabloyu birlikte sorgulamanın en kolay yolu, asıl tablodaki birincil anahtar ile ikinci tablodaki yabancı anahtarı birbirine eşitlemektir. SELECT tablo1.alan1| tablo1.alan1|tablo2tablo2.alan1[tablo1.alan2,...] FROM tablo1, tablo2 WHERE tablo1.birincilAnahtar=Tablo2.yabanciAnahtarr [AND diğer şartlar] 2.yabanciAnahta Örnek-45: Şu anda dışarıda olan Kitapın listesini alalım:
SELECT Kitap.* FROM Kitap,odunc WHERE Kitap.kitapNo=O Kitap.kitapNo=Odunc.kitapNo dunc.kitapNo AND odunc.geldiMi=0;
Tabloya Takma Ad (Alias) Birden fazla tablo üstünde işlem yaparken, sık sık tablo isimleri kullanılır. kullanılır. Bu da bir kelime kalabalığı olarak karşımıza k arşımıza çıkar. Bunun önüne geçmek için tablola-
50
BYTE
Veritabanı Programlama 1
Örnek-46: Dışarıda olan Kitapların adlarını,hangi tarihte alındığını ve kimde olduklarını bulalım:
SELECT K.kitapAdi,O.vermeTarihi,u.Adi,U.Soyadi FROM Kitap K, odunc O,Uye U WHERE K.kitapNo = O.kitapNo AND O.UyeNo=U.uyeNo AND O.geldiMi=0; >> Bir Tabloyu Tabloyu Kendisi İle İlişkilendirme İl işkilendirme (Self-join) Bir tabloyu kendisi ile ilişkilendirerek sorgulamamız gerektiğinde aynı tabloya farklı iki takma tak ma adı atayıp, atayıp, farklı iki tablo üstünde ilişkili sorgu yapıyormuş gibi ilişkili sorgu yapılabilir. yapılabilir. İyi tasarlanmış bir veritabanında bu tür ilişki pek kullanılmaz.Genellikle verilerin doğruluğunu
(veya tutarsızlığını) test etmede kullanılır. kullanılır. Örnek-47: Kitap tablomuzda, bazı Kitapın adları hatalı okunduğu için aynı ISBN numarası ile farklı kitap adları girilmiş olup olmadığını test etmek ve sonucu görmek istersek: SELECT K1.KitapAdi,K1.ISBNNo,K2.kitapAdi,K2.ISBNNO FROM Kitap K1, Kitap K2 WHERE K1.ISBNNo=K2.ISBNNo AND K1.KitapAdi<>K2.KitapAdi; >>0 kayıt seçildi. Çünkü ISBN numaralarında bir hata yok. Left [Outer] Join İki tablo arasında ilişkili sorgu yapılırken, LEFT OUTER JOIN kullanıldığında, birinci tablodaki tüm kayıtlar getirilir.r. 2. Tabloda getirili Tabloda ise sadece ilişkiye göre uygun kayıtlar sağ tarafına eklenir. Genel kullanımı, ... FROM tablo1 LEFT JOIN tablo2 ON tablo1.alan1 karşılaştırma tablo2.alan2; Şeklindedir.
Tüm üyelerin bir listesini, yanına da Tüm ödünç aldıkları kitap varsa, kitap k itap numarasını sıralayalım SELECT uye.A uye.Adi,odunc.KitapNo di,odunc.KitapNo FROM uye LEFT JOIN odunc ON odunc.uyeNo=uye.uyeNo Right [Outer] Join İki tablo arasında ilişkili sorgu yapılırken, RIGHT OUTER JOIN kullanıldığında, ikinci tablodaki tüm kayıtlar getirilir. 1. Tabloda ise sadece ilişkiye göre uygun kayıtlar sağ tarafına eklenir. Genel kullanımı, FROM tablo 1 RIGHT JOIN tablo 2 ON tablo1.alan1 karşılaştırma tablo2.alan2; Şeklindedir.
Örnek-49: Ödünç alınmış Kitaplardan dışarıda olanların listesini bulunuz: SELECT Kitap.kitapAdi FROM Kitap RIGHT JOIN odunc ON odunc.KitapNo=Kitap.KitapNo WHERE odunc.geldiMi=0 odunc.geldiMi=0;;
Örnek-48: Veritabanı Programlama 1
BYTE
51
[Inner] Join
INNER JOIN en çok kullanılan tablo birleştirme yöntemidir. yöntemidir. İki İk i tablo arasında birleştirme yaparken, tablolardan her ikisinde de yer alan değerler seçilir, tek tabloda yer alan değerler seçilmez.
İPUCU LEFT JOIN ve RIGHT JOIN, aslında birer OUTER JOIN ifadeleridir ifadeleridir.. Bir çok sistem OUTER ifadesinin yazılmasını isterken, MS temelli sistemlerde kod yazıyorsanız, böyle davranmak zorunda değilsiniz.
FROM uye INNER JOIN odunc ON odunc.uyeNo=uye.uyeNo Sadece iki tabloyu JOIN edilebilir diye bir kısıtlama yoktur. İkiden fazla tabloyu da ihtiyacımıza göre JOIN edebiliriz. Örnek-51: Bu güne kadar kimin hangi kitabı ödünç aldığının dökümünü bulmak istersek:
Aslında, Klasik Join ile INNER JOIN aynı şeydir. Sadece birleştirmede kullanılan teknik farklıdır farklıdır..
FROM tablo1 INNER JOIN tablo2 ON tablo1.alan1 karşılaştırma tablo2.alan2; Örnek-50:
LEFT JOIN örneğindeki sorguyu INNER JOIN ile çalıştıralım. Bu durumda, hiç kitap ödünç almayan üyelerin sonuçta yer almadığına dikkat edin. SELECT uye.Adi,odunc.KitapNo
52
BYTE
Veritabanı Programlama 1
SELECT Kitap.kitapAdi,uye.Adi,uye.Soyadi FROM (odunc INNER JOIN Kitap ON Kitap.KitapNo=Odunc.kitapNo) Kitap.KitapNo= Odunc.kitapNo) INNER JOIN uye ON uye.UyeNo = odunc.uyeNo; Bazı sistemlerde kodlama yaparken, INNER ifadesi yer almamalıdır. Aksi halde sorgunuz çalışmayabilir. çalışmayabilir. Bu farklılığın fark lılığın nedeni, JOIN ON ifadesi ANSI-SQL’in bir parçası değildir. değildir. Ancak VTYS V TYS üreticileri, WHERE şartında yer alan diğer koşullar ile, tablo ilişkilendirme koşullarının bir birinden kolayca ayırt edilmesi için standartlarda yer alan klasik join ile birlikte bu türden ifadeleri de desteklemektedirler.
6.INSERT Bir tabloya SQL ile kayıt eklemek ek lemek için INSERT deyimi kullanılır kullanılır.. INSERT INTO tablo_adi(alan1 tablo_adi(alan1[,a[,alan2,....]) VALUES(deger1[,deger2,....]) Alan adı sırası ile, değer sıralamasının aynı olması gerekir. NULL değeri alabilen (girilmesi zorunlu olmayan alanlar) alanlar için değer girilmeyecekse girilmeyecekse boş bırakılabilir. Örnek-52 Yeni bir kitap ekleyelim. INSERT INTO Kitap(KitapAdi,SayfaSaKitap(KitapAdi,SayfaSayisi, kitapOzeti) VALUES(‘Photoshop Efektleri’,330,’Photoshop efektlerini yakından tanıyın’); >> 1 adet Kayıt Eklendi
DİKKAT: Bir tabloya metin ifadeler eklenirken, metinlerin tek tırnak arasına alınması bir kuraldır. Bazen değer olarak tek tırnak (‘) girmek gerekebilir. Bu durumda, ‘ yerine ‘‘ yazılır. Aksi halde SQL’in SQL ’in sentaksının bozulacağına dikkat edin. Bu türden durumlara kaçınma anlamında ‘escape’ ‘escape’ durum denir.
Örnek-53: INSERT INTO Kitap(KitapAdi, ISBNNo, SayfaSayisi,, kitapOzeti) SayfaSayisi VALUES(‘Ahmet’in Günlüğü’, ‘975-509‘ 975-509-
170-X’, 330,’Bir 330,’Bir polisin p olisin anıları anıları’); ’); >> Incorrect syntax near the keyword ‘in’. Bu kayıt eklenemeyecektir. Aksine in kelimesi SQL komutu olan In zannedilecek ve arkasından açılan tek tırnak kapanmamış olarak algılanacaktır. Bunun yerine INSERT INTO Kitap(KitapAdi, ISBNNo, SayfaSayisi, SayfaSayi si, kitapOzeti) VALUES(‘Ahmet’’in Günlüğü’, ‘975-509170-X’, 330,’Bir 330,’Bir polisin p olisin anıları anıları’); ’); >> 1 adet Kayıt Eklendi demek gerekir. Bir Tablodan Tablodan Seçilen Se çilen Kayıtları Başka bir Tabloya Ekleme: Bazı durumlarda, bir tabloda yer alan kayıtları başka bir tabloya aktarmak durumunda kalabiliriz. Örnek-54: Dışarıdaki Kitapımızı tutmak üzere bir tablo oluşturmamız gerekirse, bunları doğrudan bir seçme işleminin sonucunu bu yeni tabloya ekleme şeklinde de yapabiliriz: INSERT INTO disardakiKitap(kitapNo disardakiKitap(kitapNo,-,KitapAdi,Bedeli) SELECT kitapNo,KitapA kitapNo,KitapAdi,Bedeli di,Bedeli FROM Kitap INNER JOIN odunc ON odunc.KitapNo=kitap.kitapNo WHERE odunc.GeldiMi=0; >> 3 adet Kayıt Eklendi
Veritabanı Programlama 1
BYTE
53
7.UPDATE
8.DELETE
Bir kayıt üstünde değişiklik yapmak gerektiğinde, UPDATE deyimi kullanılır. Yapısı şu şekildedir: UPDATE tablo_adi SET alan1=yeni alan1=yeniDeger1[, Deger1[, alan2=yeniDeger2, ....] [WHERE sart] Örnek: UPDATE kitap SET kitapBedeli = kitapBedeli*1,18; k itapBedeli*1,18; >>17 KAYIT GÜNCELLENDİ
DİKKAT: Bir UPDATE UPDATE cümlesinde WHERE şartı şar tı olmazsa, istenilen değişiklik tabloda yer alan tüm kayıtlar için yapılacağından dikkat edilmelidir. Böyle bir durumda data kaybı ile karşılaşabilirsiniz.
54
BYTE
Veritabanı Programlama 1
DİKKAT: Bir DELETE cümlesinde WHERE şartı olmazsa, istenilen silme işlemi tabloda yer alan tüm kayıtlar için yapılacağından dikkat edilmelidir. Böyle bir durumda data kaybı ile karşılaşabilirsiniz.
Tabloda yer alan kayıtların tamamını veya bir kısmını silmek için DELETE deyimi kullanılır. Genel kullanımı şu şekildedir: DELETE FROM tablo_adi [WHERE sart]; Örnek-55: Soyadı ‘OZAN’ olan üyeleri silmek istersek: DELTE FROM uye WHERE soyad LIKE ‘%OZAN%’ >>1 KAYIT SİLİNDİ
9.GENEL SQL FONKSİYONLARININ KULLANIMI Bir DELETE cümleciğine şart konmazsa tabloda yer alan tüm kayıtlar silinir. Bir Sorguyu çalıştırmadan önce doğru kayıtları silmek istediğinizden emin olunuz. Böyle bir durumda data kaybı ile karşılaşabilirsiniz. SQL’de çok fazla sayıda fonksiyon yer almamaktadır.. Bundan dolayı bazı VTYS almamaktadır VT YS tarafından ek fonksiyonlar da sağlanabilmektedir. Kullanmakta olduğunuz VTYS’ VT YS’nin nin kılavuzuna bakarak daha fazla sayıda fonksiyonun kullanımı hakkında bilgi edinebilirsiniz. Burada sistem bazlı ama sık kullanılan bazı fonksiyonlar hakkında da bilgi verilecektir. verilecektir. SQL Server Ser ver 2000’in 2000’ in sunduğu fonksiyonları bir sonraki bölümde ve ek kısmımızda k ısmımızda bulabilirsiniz. Tarih-Zaman Fonksiyonları: GETDATE(): Microsoft ve Sybase temelli sistemlerde sitem tarihini bulur bulur.. DATE() olarak da geçebilmektedir. SYSDATE(): Oracle’de aynı işlevi yerine getirir. NOW(): MS temelli sistemlerde, anlık detaylı zamanı(gün-a zamanı(gün-ay-yıl-saat-dk-sn) y-yıl-saat-dk-sn) verir. Örnek-56: Üstünde çalıştığı çalıştığımız mız VT VTYS’ YS’de de şu anki vakti almak için; SELECT GETDATE() >>6/22/2003 11:39:19 PM Dememiz yeterli olacaktır.(MS SQLServer için)
Aritmetik Fonksiyonlar:
MOD(sayi,mod): Sayı’nın mod değerine bölümünden kalanını veririr. ORACLE’de geçerlidir. MS sistemlerde bir operatör gibi görev yapar. Örnek-57: Ödünç verme sürelelerinin 15 güne göre modunu alalım: MS Access için: SELECT vermeSuresi MOD 15 AS GUNMOD15 FROM odunc WHERE kitapNo=1 MS SQL Server için: SELECT vermeSuresi % 15 AS GUNMOD15 FROM odunc WHERE kitapNo=1 Oracle için: SELECT MOD(vermeS MOD(vermeSuresi uresi ,15) FROM odunc; Şeklinde yazmamız gerekecektir. ABS(sayi): Sayının mutlak değerini bulur. COS(),SIN(),TAN(),COSH(),SINH(),TANH(): Trigonometrik fonksiyonların aynısıdır.r. Ancak, Oracle Sistemler için açı aynısıdı değeri olarak verilen değerin RADYAN cinsinden olması gerekir. LN(sayi): Doğal logaritma almak için(e tabanlı logaritma) kullanılır. LOG(sayi,taban): İstenilen bir sayının Veritabanı Programlama 1
BYTE
55
yine istenilen bir tabanda logaritmasını almak için kullanılır.
FROM Kitap Şeklinde kullanılabilir kullanılabilir..
POWER(sayi,us): Bir sayının üssünü almak için kullanılır.
INITCAP(karakter): İlk har büyük yapar.(Oracle)
SIGN(sayi): Bir sayının yönünü belirtir. Negatif için –1, Pozitif için +1 sıfır için 0 döndürür.
REPLACE(karakter,ifade,yerinegelecekIfade): İfadeleri bulup değiştirir. (SQLServer2000,SYBASE)
SQRT(sayi): Bir sayının karekökünü alır.
LOWER(metin), UPPER(metin) : LOWER(metin), Tamamı Küçük veya tamamı büyük harf yapmak için kullanılır.(Oracle)
Karakter İşleme Fonksiyonları: CHR(): Bir ASCI kodunun karakter karşılığını döndürür döndürür..
LCASE(metin) ve UCASE(metin): Tamamı Küçük ve tamamı büyük harf yapmak için kullanılır. (MS)
CONCAT(metin1,metin2): İki veya daha fazla karakter ifadeyi uç uca eklemek için kullanılır.
LTRIM(metin), RTRIM(metin), TRIM(metin): Soldaki, sağdaki sağdaki veya veya her iki taraftaki boşlukları atmak için kullanılır.
MS temelli sistemlerde, + ile bu iş yapılabilirken ORACLE’de ancak || operatörü veya CONCAT CONCAT fonksiyonu ile bu iş yapılabilir.
LENGHT(metin): Bir metnin uzunluğunu verir.(Oracle)
Örnek-58: Kitap Adları ile yazarlarının adlarını bir tek alan olarak seçtirmek istersek: SELECT kitapAdi + yazarAdi FROM Kitap Oracle’de SELECT kitapAdi || yazarAdi FROM Kitap; veya SELECT CONCAT(kitapAdi,yazarAdi)
56
BYTE
Veritabanı Programlama 1
LEN(metin): Bir metnin uzunluğunu verir.(MS temelli Sistemler)
Dönüştürme Fonksiyonları CONVERT(veritipi[(uzunluğu)], sütu adı, CONVERT(veritipi[(uzunluğu)], format): Bir verinin bir formattan başka bir formata dönüştürülmesi için kullanılır kullanılır.. Örnek-59: Üyelik Numarasının sonu 1 olan üyelerimizin listesini alalım: SELECT uyeNo,Adi,soyadi
FROM uye WHERE CONVERT(V CONVERT(VARCHAR(4),uARCHAR(4),uyeNo) LIKE ‘%1’ CAST(kolonAdi as CevirilecekVeriTipi(N)): Bir sütunun ya da verinin türünü başka bir türe değiştirmek için kullanılır.(SYBASE,MS SQL Server) Örnek-60: SELECT CAST(yazarNo as VARCHAR(4)) + ‘ ‘+adi +’ ‘+soyadi FROM yazar
ARİTMETİK İŞARETLER Her yerde olan aritmetik işlemleri SQL’de de geçerlidir. + :Toplama :Çıkartma * :Çarpma / :Bölme % :Mod(Bazı Sistemlerde MOD da kullanılır)
Veritabanı Programlama 1
BYTE
57