Professional Documents
Culture Documents
Sorgu sonucunda seilen veriler select OgrenciID, Ad, Soyad from Ogrenci Bu ifade ile Ogrenci tablosundaki tm verilerden sadece OgrenciID, Ad ve Soyad bilgileri getirilmektedir. Sorgu cmlesi altrldnda, aadaki gibi bir sonu elde edilir.
Sorgu sonucunda seilen veriler Veri seme ilemlerinde sadece gerekli olan alanlarn seilmesi performans asndan olduka nemlidir. rnein select * from ile tablodaki tm alanlar semek yerine * ifadesinin yerine sadece gereken alanlarn seilmesi, sorgularn daha hzl almasn salayacaktr. Tablolarda seme, gncelleme ve silme ilemlerini yaparken, kstlama amacyla where ifadesi kullanlmaktadr. WHERE komutu ile sadece istenilen artlara uyan verilere ulalabilecei iin istenmeyen bilgilerle uralmasna gerek kalmaz. Sonu itibariyle, sadece istenen veri kmesi zerinde allarak daha performansl bir alma plan (Execution Plan) hazrlanm olur. WHERE ifadesini karlatrma operatrleri ve mantksal operatrleri ele alarak daha etkin bir ekilde kullanabiliriz. Aadaki senaryolarda where kullanmna rnekler verilmitir. Bu ksma kadar Universite adnda bir veri taban zerinde allmtr. Bundan sonraki ksmlarda yer alan baz rneklerin daha anlalr olmas iin, Microsoft SQL Server ile birlikte gelen AdventureWorks isimli veri taban zerinde allacaktr. Adventureworks veritaban http://msftdbprodsamples.codeplex.com/releases/view/55926 adresinden indirilebilir. Download ileminin ardndan kurulumu gerekletirerek Adventureworks veritabann kullanma
2/48
hazr hale getirebilirsiniz. Kullanmaya balamadan nce son admda kurulumu gerekletirdiiniz klasrn ierisindeki dosyalar SQL Servera eklemelisiniz (attach). rnek: Person.Address tablosundan City deeri Seattle olan kaytlarn AddressLine1, AddressLine2 ve PostalCode bilgileri aadaki ifade yardmyla seilebilir. select AddressLine1,AddressLine2,PostalCode from Person.Address WHERE City='Seattle' rnek: Purchasing.Vendor tablosundan ModifiedDate bilgisi 25 ubat 2002den sonraki tarihlerde kaytl olan tm bilgiler seilmektedir. select * from Purchasing.Vendor WHERE ModifiedDate > '20020225' rnek: Production.Product tablosundan ListPrice deeri 120ye eit veya byk olan rnlerin Name, ProductNumber ve ListPrice bilgileri aadaki sorgu ifadesi yardmyla seilebilir. select Name, ProductNumber, ListPrice from Production.Product WHERE ListPrice >= 120 rnek: Production.Product tablosundan ListPrice deeri 100den kk olan ve Class alan NULL olmayan rnlerin Name, ProductNumber, ListPrice, Class bilgileri aadaki sorgu ifadesi yardmyla seilebilir. select Name, ProductNumber, ListPrice, Class from Production.Product WHERE ListPrice < 100 AND Class IS NOT NULL rnek: Production.Product tablosundan ListPrice alan 100 ile 200 arasnda olan rnlerin tm bilgileri aadaki sorgu ifadesi yardmyla seilebilir. select * from Production.Product WHERE ListPrice BETWEEN 100 AND 200 WHERE ifadesi ile kullanlan eitliklerin bazlarnda aranan verinin trnak iaretleri (' ') arasna alndna dikkat edilmelidir. Saysal alanlarda trnak iareti kullanlmasna gerek olmazken, metinsel deer tayan alanlarda(char, varchar, text gibi) ve tarihsel deerleri tayan alanlarda (datetime, smalldatetime, date) art ierisinde kullanlan deer tek trnak iaretleri ierisine alnmaldr. Trnak iaretinin kullanlmamas durumunda hatalar oluacak ve sorgu ifadeleri almayacaktr.
[select, UPDATE veya DELETE ifadelerinden biri] WHERE Koul veya koullar Aadaki rneklerde WHERE ifadesinin select, UPDATE ve DELETE ifadeleri ile birlikte kullanarak sorgulamalara nasl kstlamalar getirebilecei grlmektedir. select Ad, Soyad from Ogrenci WHERE BolumID = 102 Yukardaki sorgu ifadesinde, Ogrenci tablosundan sadece 102 koduna ait blmde kaytl olan rencilerin Ad ve Soyad alanndaki bilgileri getirilmektedir. Sorgudaki WHERE BolumID = 102 ifadesi sadece BolumID alan 102 ye eit olan verilerin getirilmesini salamaktadr. UPDATE Ogrenci SET Ad = 'mer' WHERE OgrenciID = 115874 Ogrenci tablosundaki renci numaras 115874 olan rencinin Ad alan, mer olarak gncellenmektedir. DELETE from Bolum WHERE BolumID = 104 Bolum tablosunda BolumID bilgisi 104 olan kayt tablodan silinmektedir.
Karlatrma Operatrleri
WHERE ifadesi ile hazrlanan kstlamalarda karlatrma operatrleri kullanlmaktadr. Aadaki tabloda karlatrma operatrleri bulunmaktadr. O peratr = < > < = > = < > Anlam Eit ise Kk ise Byk ise Kk veya eit ise Byk veya eit ise Eit deil ise
Karlatrma operatrleri WHERE ifadesinden sonra gelen alan ad ile art ierisinde kullanlacak deerin arasnda kullanlr. rnek kullanm u ekildedir. WHERE Alan Ad [Karlatrma Operatr] Deer
Mantksal Operatrler
WHERE ifadesi ile birlikte birden fazla koul yazlaca durumlarda mantksal operatrler kullanlmaktadr. Mantksal operatrler koullar arasnda balama yaparak oluacak mantksal(logical) sonuca
4/48
gre ilemler yaplmasn salar. Aadaki tabloda WHERE ifadesi ile birlikte kullanlan mantksal operatrler bulunmaktadr. Op eratr AN D OR NO T AND Operatrnn Kullanm AND ilemi iki veya daha fazla koul arasnda kullanlabilir. Tm koullarn doru olmas durumunda true sonucu dndrerek WHERE ifadesindeki durumun gereklemesi salanm olur. select * from Ogrenci WHERE BolumID = 101 AND Soyad = 'Bozkurt' Yukardaki ifadede Ogrenci tablosunda BolumID deeri 101 ve Soyad bilgisi Bozkurt koullarna uyan rencilerin btn bilgileri seilmektedir. Yani, seilen kaytlarda hem BolumID alan 101 deerine, hem de Soyad bilgisi Bozkurt deerine eit olacaktr. fade altrldnda aadaki gibi bir sonu elde edilir. Koullardan sadece biri DORU(TRUE) ise ifade dorulanr. Koul YANLI(FALSE) dnerse ifade dorulanr. Her iki koulun da sonucu DORU(TRUE) ise ifade dorulanr. Anlam
Sorgu sonucunda seilen veriler OR Operatrnn Kullanm OR ilemi iki veya daha fazla koul arasnda kullanlabilir. Koullardan herhangi birisinin doru olmas durumunda doru bilgisini dndrerek WHERE ifadesindeki durumun gereklemesi salanr. select * from Ogrenci WHERE BolumID = 101 OR Ad = 'Melih' Yukardaki ifadede Ogrenci tablosundan, ad Melih olan veya BolumId deeri 101 olan rencilere ait bilgiler ekilmektedir. fade altrldnda aadaki gibi bir sonu elde edilecektir.
Sorgu sonucunda seilen veriler NOT Operatrnn Kullanm NOT operatr, yaplan ilemlerin tersini kontrol etme amacyla LIKE, IN, BETWEEN gibi kelimelerle birlikte kullanlr. Aadaki sorgu cmleleri NOT operatrnn kullanmlarna birer rnektir. select * from Bolum WHERE BolumID NOT LIKE 101 Bu ifadede Bolum tablosundaki BolumID bilgisi 101 olmayan tm kaytlar seilmektedir. WHERE NOT LIKE 101 ifadesi, getirilecek kaytlarda BolumId bilgisi 101 olmayan kaytlar getir anlamna gelmektedir.
5/48
select * from Ogrenci WHERE Soyad NOT IN ('Batur', 'Koray') Bu ifadede ise Ogrenci tablosundan Soyad alan Batur ve Koray olmayan kaytlar getirilmektedir. WHERE Soyad NOT IN ('Batur', 'Koray') ifadesine gre, parantez ierisinde verilen ehirler dndaki kaytlar seilecektir. WHERE ifadeleriyle birlikte NOT operatr kullanmak sorguyu yavalataca iin zorunlu olmadka kullanlmamas tavsiye edilmektedir.
6/48
7/48
Arama lemleri
Veri sorgulama ilemlerinde baz durumlarda bir alan ierisinde arama yaplarak veri seilmek istenilebilir. Bir alan ierisinde arama ilemlerinin yaplmas iin WHERE ifadesi ile birlikte = operatr yerine LIKE anahtar kelimesi kullanlmaktadr. rnein bir tabloda kiilerin yaadklar yer bilgisi ile ilgili olarak sadece ev adresleri tutulmakta ise, stanbul ehrinde yaayanlar bulabilmek iin adres alan ierisinde stanbul kelimesi geen kaytlar bulunmaya allabilir. te byle bir durumda LIKE anahtar kelimesi tam olarak istenilen ii yapacaktr. LIKE, metinsel alanlar(rnein; char, nchar, varchar, nvarchar) ierisinde arama yapmak iin kullanlabilir. (SQL Server arama yaplan veri tipi eer metine dntrlebilen bir tip ise bu veri tipine sahip bir alanda da LIKE ile arama yapabilir. rnein INT, DATETIME gibi alanlarda da LIKE ile arama yaplabilir) Kullanm asndan dier balalardan farkl olarak ald parametreler ierisinde baz karakterler kullanarak arama yaplr. Bu karakterler ile ilgili bilgileri aadaki tabloda bulabilirsin. Oper atr % _ [] [^] Arama metni ierisinde sfr, bir veya birden fazla karakter anlamna gelir. Yani metin ierisinde % iaretinin yerine herhangi bir karakter veya karakter topluluu gelebilir. % iareti ile benzer ileve sahiptir. % iaretinden farkl olarak aram a metni ierisinde sadece tek bir karakteri temsil eder. Parantezler ierisinde tek bir harf yerine birden fazla alternatif gelebilecek ekilde filtreleme yaparak kaytlar getirir. Genellikle % ile birlikte kullanlr. Parantezler ierisindeki karakterin gemedii kaytlar getirir. Sql like iin arama karakterleri Anlam ev kelimesi ile balayan kaytlar. rnein; eve, evde, eve giderken, evli erisinde Ankara kelimesi geen kaytlar 3 karakterden oluan, son 2 karakteri en ve ilk karakteri herhangi bir karakter olan kaytlar. rnein; sen, ben, fen A ile K arasndaki tm harflerle (A ve K dahil) balayan tm kaytlar. rnein; Ahmet, Burak, Esra, Kemal A ile L arasndaki harfler dndaki harfler ile balayan tm kaytlar. rnein; Melih, Mustafa, Sevcan... Like iin rnek sorgu ifadeleri Kullanm amac
Kullanm WHERE AlanAd LIKE 'ev%' WHERE AlanAd LIKE '%Ankara%' WHERE AlanAd LIKE '_en'
Aadaki rnek sorgu cmlesinde, Adventureworks veri taban ierisindeki Production.Product tablosunda Name alan ierisinde blue ile biten kaytlar ekilmektedir. SELECT * FROM Production.Product WHERE Name LIKE '%blue Aadaki rnek sorgu cmlesinde, Production.Product tablosunda Class alan K ile M harfi arasindaki harflerle balayan kaytlar seilmektedir. SELECT * FROM Production.Product WHERE Name LIKE '[K-M]%'
8/48
9/48
Baz durumlarda sralama ileminin bu durumlarn tersi olarak yaplmas istenebilir. (Rakamsal bir alann deerlerinin bykten ke doru sralanmas gibi) Azalan sralama ilemleri iin ORDER BY ile birlikte DESC anahtar kelimesi kullanlr. ASC ve DESC anahtar kelimelerinin kullanmlar u ekildedir: SELECT AlanAd1, AlanAd2 FROM TabloAd ORDER BY SiralanacakAlanAd ASC SELECT AlanAd1, AlanAd2 FROM TabloAd ORDER BY SiralanacakAlanAd DESC ORDER BY ile bir alana gre sralama ilemleri yaplabildii gibi birden fazla alana gre de sralama yaplabilmektedir. ORDER BY SiralanacakAlanAd1, SiralanacakAlanAd2 eklinde bir kullanm ile seilen veriler birden fazla alan ierisinde sralanabilir. Byle bir durumda sz konusu sorgu, seilen verileri nce SiralanacakAlanAd1 alanna gre sralayacaktr. Daha sonra sralanan kaytlardan sadece SiralanacakAlanAd1 deerleri birbirine eit olan kaytlarn ierisinde SiralanacakAlanAd2 alanna gre sralama yaplacaktr. SELECT OgrenciID, Ad, Soyad, BolumID FROM Ogrenci ORDER BY BolumID, OgrenciID Aadaki ekran grntsnde, yukardaki sorgu cmlesinin sonucunda seilen kaytlar yer almaktadr. BolumID bilgisi ayn olan kaytlarn kendi aralarnda OgrenciID alanna gre sralandna dikkat edilmelidir.
10/48
11/48
12/48
13/48
Sorgu sonucunda seilen veriler Sorgunun almasyla elde edilecek sonu kmesindeki alan isimlerine dikkat ed ilirse; OgrenciId ve Ad alanlar AS ile deitirildii iin farkl, Sehir ise AS ile deitirilmedii iin ayn ekilde grntlenecektir. AS ifadesinin kullanmnda tablonun yapsndaki alan ismine mdahalede bulunulmamaktadr. Yani tablodaki alan ismi deitirilmemekte, sadece getirilen sonu kmesi ierisinde alan ad farkl ekilde gsterilmektedir.
14/48
15/48
SELECT ifadeleri ile sorgu sonucunda alan isimleri farkl ekilde gsterilebilecei gibi getirilen kaytlarn ierikleri de farkl bir biimde sunulabilir. Baz durumlarda verilere bilgi eklenmesi veya verilerin matematiksel ilemlere tabi tutulmas gibi ihtiyalar olabilir. Bu tip gereksinimlerde, SELECT ifadeleri ierisinde matematiksel ilemlerde kullanlan operatrlerden faydalanabilirsin. aret AlanAd1 + AlanAd2 'Eklenecek Metin' + AlanAd AlanAd1 - AlanAd2 AlanAd1 * AlanAd2 AlanAd1 / AlanAd2 AlanAd1 % AlanAd2 SQL aritmetik ilem operatrleri Tablodaki tm operatrler matematiksel ilemler iin kullanlmaktadr. Yani kullanlacak alanlarn rakamsal deer tamas gerekmektedir. Bununla birlikte, toplama operatr (+) metinsel ifadeleri birletirmek iin de kullanlabilir. Bu operatrlerin SELECT ifadesi ierisindeki kullanmlarna aadaki SQL cmlecikleri rnek verilebilir. SELECT AlanAd1 + AlanAd2 FROM TabloAd SELECT AlanAd1 * 250 FROM TabloAd SELECT (AlanAd1 AlanAd2) * 30 FROM TabloAd SELECT 'Eklenecek Metin' + AlanAd + 'Eklenecek Metin' FROM TabloAd Aada, matematiksel operatrler kullanlarak seilen kaytlarn deitirilmesi ileminin nasl yaplacana dair rnek bir SQL cmlesi yer almaktadr. SELECT 'Zamlanan rn Ismi: ' + Name, ListPrice * 1.20 FROM Production.Product + * / % Toplama karma arpma Blme Mod alma Kullanm Amac rnek
Sorgu sonucunda seilen veriler Sorgu altrldnda Name alanndaki rn isimlerinin nne Zamlanan rn Ismi: eklindeki bir metin eklenir. Ayn zamanda ListPrice alanndaki veriler 1.20 ile arpmlarnn sonucunda %20 zaml olarak elde edilirler.
16/48
17/48
Veriyi Gruplamak
Baz durumlarda tablolardan elde edilen verileri gruplamak gerekebilir. Gruplanan veriler zerinde grup baznda baz bilgilere ulap, bu gruplar zerinde ilemler ve hesaplamalar yaplabilir. rnein mterilerin kaytl olduu bir tabloda ehre gre gruplandrma yaplarak, ehir baznda mteri saylar elde edilebilir. SQL dili ile tablolardan seilen veriler alan baznda gruplanabilir ve hatta belirli sayda satr da veritabanndan grup halinde alnabilir.
da daha ok leklenebilirlik salar. SQL ierisinde nceden tanmlanm ve farkl amalara (matematiksel, metinsel vb...) hizmet eden pek ok hazr fonksiyon bulunur. Sz konusu yardmc metod lar ierisinde gruplama ilemlerinde sklkla kullanacamz fonksiyonlar da bulunur. Bu fonksiyonlar bir tablodaki tm kaytlar iin veya gruplanan sonu kmeleri iin kullanlabilir. Tm fonksiyonlar tek bir deer retmektedir. T-SQLin yapsnda bulunan temel gruplama fonksiyonlar unlardr: - MIN(): MIN(AlanAd) eklinde kullanlmaktadr. Parametre olarak ald alan ierisindeki en kk deeri bulur. Alan rakamsal veri tayorsa en kk deeri, metinsel bir deer tayorsa alfabetik olarak en ba ta olan deeri bulur. - MAX(): MAX(AlanAd) eklinde kullanlmaktadr. MIN() fonksiyonunun tam tersi ekilde alr; Parametre olarak ald alan ierisindeki en byk deeri bulur. - SUM(): SUM(AlanAd) eklinde kullanlmaktadr. Parametre olarak ald alana ait kaytl verilerin toplamn hesaplar. SUM() fonksiyonunun parametre olarak alaca alan saysal bir deer tamak zorundadr. - AVG(): AVG(AlanAd) eklinde kullanlmaktadr. Parametre olarak ald alana ait kaytl verilerin toplamnn aritmetik ortalamasn hesaplar. - COUNT(): COUNT(*) veya COUNT(AlanAd) eklinde kullanlmaktadr. COUNT(*) ifadesinde tablodaki NULL deerler de dahil, tm kaytlar sayar. COUNT(AlanAd) eklindeki bir kullanmda ise AlanAd isimli alanda NULL deeri almam olan tm kaytlar sayar. Bu fonksiyonlarn SELECT ifadesi ile rnek kullanmlar aadaki gibidir. SELECT MAX(ListPrice) FROM Production.Product WHERE Class = 'M' Production.Product tablosunda Class alan M deerine eit olan kaytlar ieris indeki en yksek ListPrice deerini getirir. SELECT COUNT(*) FROM Production.Product COUNT(*) ifadesi kullanld iin Production.Product tablosundaki toplam kayt saysn getirir. SELECT COUNT(Class) FROM Production.Product COUNT, Class isimli alan ile birlikte kullanld iin Production.Product tablosundaki kaytlardan Class alannda NULL deer tamayanlarn toplam saysn getirir. SELECT SUM(ListPrice), AVG(ListPrice) FROM Production.Product WHERE Color = 'Red' Production.Product tablosunda Color deeri Red olan tm alanlarn ListPrice deerlerinin toplamn ve ListPrice deerlerinin ortalamasn getirir.
19/48
SELECT GruplanacakAlanAd, GruplamaFonksiyonu1(AlanAd1) FROM TabloAd GROUP BY GruplanacakAlanAd GROUP BY kullanldnda, SELECT ifadesiyle birlikte sadece GROUP BY ile gruplanan alan ad ve gruplama fonksiyonlarndan alnacak sonular ekilebilir. SELECT ile birlikte birden fazla gruplama fonksiyonu kullanlabilir. Bir tablodaki verileri gruplama fonksiyonu kullanmadan, bir alana gre grsel olarak gruplamak istersek kullanacamz ifade GROUP BY yerine ORDER BY olmald r. GROUP BY sadece gruplama fonksiyonlarnn olaca SELECT sorgularnda kullanlabilmektedir. Aadaki rneklerde GROUP BY ile veri gruplama ilemleri gsterilmitir. rnek: Aadaki sorgu cmlesi ile, Production.Product tablosundaki rnlerin her renge ait ortalama ListPrice ve StandartCost deerleri getirilmektedir. SELECT Color, AVG(ListPrice), AVG(StandardCost) FROM Production.Product GROUP BY Color rnek: Aadaki sorgu cmlesi ile, Person.Address tablosunda her ehirde yaayan kiilerin toplam saylar bulunarak, veriler ehir adna gre alfabetik srada elde edilmektedir. SELECT City, COUNT(AddressID) AS Sayi FROM Person.Address GROUP BY City ORDER BY City
Sorgu sonucunda seilen veriler GROUP BY ile birden fazla alana gre gruplama yaplabilmektedir. GROUP BY AlanAd1, AlanAd2 eklindeki bir kullanmda veriler nce AlanAd1e gre sonra da AlanAd1in ierisinde ayn deerlere sahip kaytlar AlanAd2ye gre tekrardan gruplanr. RNEK: Ogrenci tablosunda rencilerin okuduklar blmler ierisinde, yaadklar ehirlere gre rakamsal dalmlar grntlenmek istensin. Ayrca getirilecek olan kaytlarn blm bilgilerine gre sralanmas da istensin. SELECT BolumID, Sehir, COUNT(*) FROM Ogrenci GROUP BY BolumID, Sehir ORDER BY BolumID
20/48
rnek: Production.Product tablosunda krmz veya mavi renkli rnlerin Class bilgisine gre gruplanmas, en az 5 kayd olan Class kaytlarnn listelenmesi ve sonularn Class adna gre sralanmas istendiinde aadaki sorgu cmlesi kullanlabilir. SELECT Class, COUNT(ProductId) FROM Production.Product WHERE Color = 'Red' OR Color = 'Blue' GROUP BY Class HAVING COUNT(ProductId) > 5 ORDER BY Class
21/48
COMPUTE ifadesi seilen sonu kmesi ile birlikte gruplama fonksiyonunun rettii sonucu ayr bir sonu kmesi olarak getirmektedir. SELECT OgrenciID, BolumID, Sehir FROM Ogrenci ORDER BY BolumID COMPUTE COUNT(OgrenciID) BY BolumID Bu sorgu sonucunda ise Ogrenci tablosundaki rencilerin baz bilgileri seilerek blmlerine gre sralanmaktadr. Sorgu sonucunda getirilen her blm iin ikier sonu kmesi oluur. lk sonu kmesi ni rencilerin seilen bilgileri olutururken, ikinci sonu kmesini de o blmde ka kii oldu unu vermektedir.
22/48
23/48
likisel veri tabanlarnda bir veri taban oluturulurken, veri tekrarn azaltmak ve verileri daha v erimli ekilde depolamak iin kaytlar farkl tablolara ayrlr. Baz durumlarda birden fazla tabloda tanan bilgilere bir arada ihtiya olabilmektedir. Bu durumlarda farkl iki tabloyu ifade ierisinde birletirme ilemini (JOIN) gerekletirmek gerekir. u ana kadar anlatlan SQL ifadeleri, sadece bir tablodan eitli ekillerde verilerin alnmasn salamaktayd. Birden fazla tabloyu birletirerek bu tablolardaki veriler zerinde ilemler yapmak iin T -SQL ierisinde eitli yaplar bulunmaktadr. Bu konu ierisinde birden fazla tablonun nasl birletirilebilecei ve bu tablolar zerinde nasl ilemler yapabilecei ele alnacaktr.
Sorgu sonucunda seilen veriler rnek sorguda Ogrenci ve Bolum tablolar birletirilerek rencilerin isimleri ve kaytl olduklar blmleri listelenmektedir. WHERE Ogrenci.BolumID = Bolum.BolumID ifadesi ile Ogrenci tablosundaki blm numaras ile Bolum tablosundaki blm numarasnn eit olduu yerler tek bir satrm gibi ele alnarak deerlendirilir ve bir sonu kmesi oluturulur.
24/48
25/48
INNER JOIN, balanan tablolarda ortak olan alanlar kontrol ederek her iki tabloda da eleen kaytlarn getirilmesini salar. INNER JOIN ifadesinin kullanm ekli yledir: SELECT Seilecek Alan FROM Tablo1 INNER JOIN Tablo2 ON likilendirme art INNER JOIN ifadesi, birletirilecek olan tablolarn arasnda yer alr. Bu ekilde sorgu cmlesinde 2 tablonun birletirilecei sylenir. Bu iki tablonun ilikilendirilecei alanlar arasnda nasl bir art arandn ise ON ifadesi belirler. ON ifadesinin kullanm WHERE ifadesindeki gibidir. Bir iyerinin veri tabannda, Calisan isimli tabloda alanlarn ismi ve grev kodu, Gorev tablosunda da grev kodu ile grevlerin isimleri tutulsun. Buradaki ama, iki tabloyu birletirip alanlardan sadece grevleri tanml olanlarn bulmak ve alan isimleri ile grevlerini bir sonu kmesinde toplamak olabilir. Byle bir durumda iki tabloyu, ilikili olan alanlar araclyla birletirip her iki tarafta da var olan kaytlarn getirilmesi istenilebilir. Calisan Isim Gorev ID Gorev Gorev ID
Gorev Isim Calisan tablosundaki GorevID ile Gorev tablosundaki GorevID birbiri ile ilikili alanlardr. Isim Ercan Blent Melih Burak Sema GorevI D 15 16 14 12 14 Gore vID 11 12 13 14 15 GorevIsim Genel Mdr Proje Yneticisi Yazlm Uzman Grafiker Programc
ki tablo birletirilip GorevID alanlar eletirilirse aadaki gibi bir sonu ortaya kar. Calisan tablosundaki GorevID bilgisi, Gorev tablosundaki GorevID bilgilerinden birine uymayan satrlar sonu kmesine dahil edilmeyecektir. Ercan 5 Melih 4 Burak 2 Sema 4 Yukarda anlatlan senaryo, INNER JOIN ifadesi kullanlarak u ekilde bir sorgu cmlesine evrilebilir. SELECT c.Isim, g.GorevIsim FROM Calisan AS c INNER JOIN Gorev AS g ON c.GorevID = g.GorevID Sorgu altrldnda oluacak sonu kmesi u ekilde oluacaktr. Blent isimli alann grevinin, Gorev tablosunda karl olmad iin bu kayt sonu kmesine eklenmeyecektir. 1 1 Proje Yneticisi Grafiker 1 Grafiker 1 Programc
26/48
Sema Grafiker Sorgu sonucunda oluacak sonu kmesi INNER JOIN ile birlikte WHERE, ORDER BY gibi ifadeler kullanlarak getirilecek olan kaytlar daha da zelletirilebilir. Yukarda yaplan ilemde getirilecek kaytlara, GorevID alan 12 deerinden byk olan kaytlar getirilsin eklinde bir kstlama WHERE ifadesi kullanlarak aadaki rnekte olduu gibi yaplabilir. SELECT c.Isim, g.GorevIsim FROM Calisan AS c INNER JOIN Gorev AS g ON c.GorevID = g.GorevID WHERE c.GorevID > 12 Bu tip sorgularda INNER JOIN ifadesi yerine sadece JOIN de kullanlabilmektedir. Bu iki ifade kullanm ve alma bakmndan ayn ileve sahip olmakla birlikte genellikle INNER JOIN kullanm tercih edilir. Bunun sebebi JOIN ileminin eidini ak bir ekilde (explicitly) belirtmek istemektir. OUTER JOIN ile Tablolar Birletirme OUTER JOIN ifadeleri, INNER JOINden farkl olarak tablolarn iki tarafnda da bir eleme olmasna gerek kalmakszn herhangi bir tablodaki tm satrlar getirmeye yarar. OUTER JOINin farkl kullanm ekli bulunmaktadr: LEFT OUTER JOIN, RIGHT OUTER JOIN ve FULL JOIN. LEFT JOIN ile birleen tablolardan sorgu ierisinde LEFT JOINin sol ksmda kalan tablonun tm kaytlar, RIGHT JOIN ile birleen tablolardan sorgu ierisinde RIGHT JOINin sanda kalan tablonun tm kaytlar, FULL JOIN ile birleen tablolardan her ikisindeki tm kaytlar getirilir.
ki tablodaki kaytlarn elenerek oluturulan sonu kmesinde dier tabloda karl olmayan ksm NULL olarak getirilir. OUTER JOIN ifadeleri sorgu ierisinde kullanlmaz. OUTER JOIN ifadelerinde yukarda bahsedilen LEFT OUTER JOIN, RIGHT OUTER JOIN ve FULL JOIN kelimeleri kullanlr. OUTER JOIN ifadelerinin genel kullanm u ekildedir. SELECT Seilecek Alanlar FROM Tablo1 [ LEFT JOIN, RIGHT JOIN veya FULL JOIN ] Tablo2 ON likilendirme art Yukarda INNER JOIN iin yazlan rnek OUTER JOIN ifadeleri ile kullanldnda hem INNER JOIN ve OUTER JOIN arasndaki fark, hem de LEFT OUTER JOIN, RIGHT OUTER JOIN ve FULL JOIN ifadeleri arasndaki farkllklar analiz edilebilir. SELECT c.Isim, g.GorevIsim FROM Calisan AS c LEFT OUTER JOIN Gorev AS g ON c.GorevID=g.GorevID
27/48
SELECT c.Isim, g.GorevIsim FROM Calisan AS c RIGHT OUTER JOIN Gorev AS g ON c.GorevID=g.GorevID
LEFT OUTER JOIN ifadesinin sol ksmndaki Calisan tablosundan tm kaytlar gelmektedir. Sa tablodan elenemeyen verilere NULL deeri atanr.
RIGHT OUTER JOIN ifadesinin sa ksmndaki Gorev tablosundan tm kaytlar gelmektedir. Sol tablodan elenemeyen verilere NULL deeri atanr.
FULL JOIN ifadesi ile tablolar arasnda kayt elemesi dikkate alnmadan tm kaytlar gelmektedir. Dier tablodan elenemeyen verilere NULL deeri atanr.
OUTER JOIN ifadelerinin rettii farkl sonular farkl OUTER JOIN ileminin sonucundan da anlalaca gibi, INNER JOIN ifadeleri sadece eleen verileri getirirken, OUTER JOIN ifadeleri eleme olmasa bile sadece bir tablodaki veya her iki tablodaki tm verileri sonu kmesine eklemektedir. CROSS JOIN ile Tablolar Birletirme Tablolar arasnda yaplan birlemelerde, seilen tm verilerin birbiriyle kartezyen arpm eklinde elemesini salayan ifadelerdir. Veritabanlarnda pek kullanlmayan bir yntemdir. Seilen verilerin ok sayda olmas durumunda tm verilerin kendi aralarndaki tm kombinasyonlar sonu kmesine eklenecei iin ok sayda satrdan oluabilir. Genel kullanm u ekildedir. SELECT Seilecek Alanlar FROM Tablo1 CROSS JOIN Tablo2 Aadaki sorgu cmlesiyle, Calisan ve Gorev tablolarndan CROSS JOIN ifadesi ile alanlarn ve grev isimlerinin eletirilmesinin nasl bir sonu oluturaca gsterilmektedir. SELECT c.Isim, g.GorevIsim FROM Calisan AS c CROSS JOIN Gorev AS g
28/48
Sorgu sonucunda seilen veriler Grlecei gibi her iki tablodan da seilen tm veriler birbiriyle elenmi ve sonu kmesinde toplam 25 kayt olumutur. (Calisan tablosundaki 5 kayt x Gorev tablosundaki 5 kayt = Toplam 25 kayt) Eer tablolardaki veriler daha fazla olsayd sonu binlerce, on binlerce satrdan oluabilirdi. Bu nedenle CROSS JOIN veritabanlarnda tercih edilmeyen bir ifade trdr. Bu kullanma yle bir senaryo rnek olarak verilebilir; rnlere ait renk, model ve beden tablolarnn olduu kabul edilsin. Belli bir modeldeki rnn, ilgili renk veya bedende retilip retilmediine baklmakszn olas tm alternatiflerin elde edilmek istendii bir durumda CROSS JOIN kullanm tercih edilebilir.
29/48
30/48
Veri taban zerinde baz ilemler yaplrken ok karmak ve uzun sorgular yazlmas gerekebilir. Yine bu ilemler yaplrken farkl tablolardan veya durumlardan alnacak sonulara gre sorgular altrlmas gerekebilir. ie sorgular kullanarak bu tip ilemlerin aama aama yaplmas salanr. Bir sorgulama ilemi, dier sorgulama ileminin sonucunu kullanabilir. ie sorgularda, asl sorguya sonu getiren i sorgu bazen tek deer retebilirken, baz durumlarda da birden fazla deer retebi lir. Asl sorgu, bir alt sorgunun getirdii tek sonu ile ilem yapacaksa, genelde MAX, MIN, AVG gibi gruplama fonksiyonlar veya tek deer dndren SELECT ifadeleri kullanlmaktadr. WHERE ifadesinden sonraki artta bir alt sorgudan gelen sonu kullanlarak karlatrma yaplr. Tek deer dndren bir sorgunun SELECT ifadesi ierisinde rnek kullanm aada gsterilmitir. SELECT * FROM Tablo WHERE Alan > (SELECT AVG(Alan) FROM Tablo) Aadaki sorgu Production.Product tablosundaki ListPrice deeri en yksek olan rn veya rnleri getirir. SELECT Name, Color, ListPrice FROM Production.Product WHERE ListPrice = (SELECT MAX(ListPrice) FROM Production.Product) ksmdaki sorgu Production.Product tablosundaki en yksek ListPrice deerini g etirecektir. nce i ksmdaki sorgu altrlp tablodaki en yksek ListPrice deeri bulunur. Daha sonra bu deer WHERE ifadesindeki art ierisinde kullanlarak sorgu altrlr. Bylece tablo ierisindeki en yksek fiyata sahip rn veya rnler sorgu sonucunda getirilir.
Max gruplama fonksiyonu iin rnek kullanm Bir sorgu ierisinde baka bir sorgu tek deer retebildii gibi birden fazla deerde retebilir. Bu tip durumlarda WHERE ile birlikte IN ifadesi kullanlarak alt sorgunun getirdii deerlerin hepsi ileme tabi tutulur. Aadaki rnekte bir SELECT ifadesi, ierisinde kullanlan alt sorgudan getirilen birden fazla deer kullanlarak bir sonu kmesi oluturulmaktadr. SELECT Ad, Soyad, BolumID FROM Ogrenci WHERE BolumID IN (SELECT BolumID FROM Bolum WHERE BolumAd LIKE 'B%')
31/48
In anahtar szcnn rnek kullanm ksmdaki sorgu sonucunda getirilen deerler dtaki SELECT ifadesinde kullanlarak blm ad B harfi ile balayan blmlerde okuyan renciler listelenmitir. ie sorgulamalar SELECT ifadeleri dnda INSERT, UPDATE ve DELETE komutlar ile birlikte de kullanlabilir. rnek: DELETE FROM Tablo WHERE Alan = (SELECT MAX(Alan) FROM Tablo) gibi. ie sorgulamalar kullanmak yerine baz durumlarda JOIN ifadeleri kullanlabilir. JOIN ifadelerinden yararlanlarak oluturulabilen sorgular iin, iie sorgular kullanlmas tercih edilmemelidir. nk JOIN ifadeleri, iie sorgulardan performansl alrlar.
32/48
33/48
T-SQLde Transactionlar
u ana kadar zerinde durulan SQL ifadeleri bir tablodan kayt getirmek gibi basit ilemleri ieriyordu. Baz durumlarda veritaban zerinde birbirine bal ard arda ok sayda ilem yaplmas gerekebilir. rnein; bir tablodan bir kayt silindiinde, bu silme ilemine bal olarak baka bir tablodaki baz kaytlarn deitirilmesi veya silinmesi gibi. Bu ilemlerin bir btnlk gerektirdii dnlecek olursa sorgulardan birinin baarl bir ekilde almas ancak baka bir sorgunun baarsz olmas veri btnln ya da i mantn bozabilir. Byle bir durumda, yaplacak tm ilemlerin tek bir ilem gibi dnlmesi ve ilemlerden herhangi birinin gerekleememesi durumunda dier tm ilemlerin de iptal edilmesi gerekir. Daha kk paralara ayrlamayan i paracklarna transaction (ilem blou) ismi verilmektedir. rnein, bir banka veritabannda, bir kullancdan (Ahmet) dier bir kullancnn (Aye) hesabna para havale edileceini dnelim. Bu havale tek bir ilem ierisinde gereklemelidir. Yani, Ahmet isimli kullancnn hesabndaki para miktarnn eksiltilip, Aye isimli kullancnn hesabndaki para miktarnn arttrlmas gerekir. Bylece havale ileminin gerekletirilmesi tek bir olay ierisinde ele alnacaktr. Olaslklar analiz edilecek olursa, Ahmet isimli kullancnn hesabnda yeterli miktarda para olmamas durumunda, Ahmetin hesab eksiye derek Ayenin hesabna para aktarlmas ihtimali bulunmaktadr. Bu istenmeyecek bir durumdur. SQL Serverda bu ilem u ekilde ele alnabilir. nce ilk sorgu altrlr; yani Ahmet isimli kullancnn hesabndan havale miktarn decek bir Update sorgusu altrlr. Eer Ahmetin hesabnda yeterli miktar var ise ilem baaryla yaplacak ve bu sorguya bal olarak dier sorgular da altrlacaktr. Sonu olarak para Ayenin hesabna aktarlacaktr. lemin baaryla sonulanmas durumunda transaction commit edilir. Fakat Ahmetin hesabnda yeterli miktar yok ise ilk ilem gereklemeyecei iin, ilk ileme bal olarak dier ilemler de geri alnacaktr. Bunu salamak i in transaction rollback edilir. Bu ekilde yaplabilecek hatal ilemlerin nne geilecei gibi, veri tutarll ve btnl de salanr. SQL Serverda tek bana alabilen SELECT, INSERT, UPDATE, DELETE gibi komutlar da varsaylan olarak bir transaction ierisinde almaktadr. Komut alrken bir hata oluursa ilem geri alnr. SQL Serverda yaplacak transaction ilemleri olabildiince ksa tutulmaldr. Ayn anda, ayn tablolar zerinde birden fazla transaction talebinde bulunulursa, transctionlardan biri dierini bekleyecei iin ilemin sonulandrlmas daha fazla zaman alacaktr.
34/48
Ogrenci tablosunun yaps ve bu tablo zerinde baarsz olacak INSERT ifadelerine iki rnek Yukarda Ogrenci tablosunun alanlar ile alan tipleri yer almaktadr. Hemen alt ksmnda ise bu tabloya, tablo ierisindeki alanlar yazlmakszn veri eklenmeye allan iki farkl sorgu bulunmaktadr. Buradaki iki sorgu cmlesiyle de veri eklenmeye alldnda hata alnr ve sorgular almaz. lk sorgu eksik parametreler olduu iin, ikinci sorgu girilen deerler tablodaki veri tipleri ile uyumad iin almayacaktr. Her iki hata da, VALUES (...) ksmndaki deerler doru yazlmad iin olumaktadr. Aada INSERT ifadesinin tablodaki alan isimleri bildirilmeden nasl kullanlaca gsterilmektedir. INSERT INTO Ogrenci VALUES (888136,'Osman','okakolu',102,'Denizli','osman@cokakoglu.com') Eer tablodaki bir alan NULL deer alabiliyorsa INSERT ilemi yaplrken bu ksmlar aadaki gibi bir kullanmla bo braklabilir. NULL deer alamayan alanlara bir deer girilmesi z orunludur. INSERT INTO Ogrenci VALUES (111926, 'Yeim', 'Uslu', 102, NULL, NULL) Kullanmna dikkat edilecek olursa bo braklmak istenilen alanlara NULL eklinde bir atama yaplmtr. INSERT ifadesi ierisinde verilen deerlerin tabloya eklenmesi saland gibi baka tablolardan sonu olarak getirilen bilgilerin de INSERT ile bir tabloya eklenmesi salanabilir. INSERT INTO Tablo1 (Eklenecek Alanlar) SELECT Seilecek Alanlar FROM Tablo2 SELECT ifadesi ile seilen alanlarn, INSERT ile eklenecek alanlar ile uyumas gerekmektedir.
DELETE ifadesinden sonra 496196 numaral kayt silinmitir. Bu ekilde Ogrenci tablosunda OgrenciID bilgisi 496196 olan kayt silinecektir. Delete sorgular dikkatli kullanlmaldr. nk DELETE sorgular WHERE ifadesi ile birlikte bir art belirtmeksizin kullanlrsa tablodaki tm verilerin silinmesine neden olur. Byle bir kullanm istenilmeyen sonulara sebep olacaktr. Dikkat edilmesi gereken bir dier husus da WHERE ifadesi ile belirtilen art veya artlar salayan tm kaytlarn tablodan silineceidir. Tek kaydn silinmesi istenilen durumlarda tabloda primary key olan alan WHERE ifadesi ierisinde kullanlmaldr. DELETE FROM Ogrenci WHERE Ad = 'Ercan' Bu ifadenin kullanlmas durumunda Ogrenci tablosunda Ercan ismine sahip birden fazla kayt varsa hepsi silinecektir. Eer bu sonu istenilmeyen bir durum ise tabloda primary key olan alann art ifadesinde kullanlmas doru olacaktr. DELETE sorgular ierisinde JOIN, WHERE ... IN, TOP gibi ifadeler de kullanlabilmektedir. rnek Sorgu: DELETE FROM Sales.SalesPersonQuotaHistory WHERE SalesPersonID IN (SELECT SalesPersonID FROM Sales.SalesPerson WHERE SalesYTD > 2500000.00)
36/48
UPDATE sorgusunun ardndan Ogrenci tablosunda 115874 numaral kaydn baz bilgileri gncellenmitir Baz durumlarda ise tablodaki tm kaytlarn gncellenmesi istenebilir. rnein rnlerle ilgili bilgilerin tutulduu bir tabloda tm rnlerin fiyatlarna belli bir oranda zam yaplmak istenebilir. Tm rnlerin fiyatlar ayn oranda deitirilmek istenilirse WHERE ifadesi kullanlmadan bu ilem gerekletirilebilir. AdventureWorks veritabanndaki Production.Product tablosunda, tm rnlere %10 zam yaplmasnn istendiini dnelim. Aadaki sorgu bu ilemi yerine getirecektir. UPDATE Production.Product SET ListPrice = (ListPrice * 1.10) Tm rnler deil de, sadece belirli bir art salayan rnlerin fiyatlarnn gncellenmesi gerekebilir. Aadaki sorguda ListPrice deeri 1000den kk olan rnlerin fiyatlar %10 arttrlyor. UPDATE Production.Product SET ListPrice = (ListPrice * 1.10) WHERE ListPrice < 1000
Sorgu sonucunda Production.Product tablosunda sadece ListPrice deeri 1000den kk olan kaytlarn ListPrice alanlar gncellendi. DELETE ifadesinde olduu gibi UPDATE ilemlerinde de sorgu ierisinde JOIN, WHERE ... IN, TOP gibi ifadeler kullanlabilmektedir. rnek Sorgu: UPDATE Production.Product SET ProductModelID = 129 WHERE ProductModelID IN (SELECT ProductModelID FROM Production.ProductModel WHERE CatalogDescription IS NOT NULL)
38/48
39/48
SQL Serverda nbellee alnmayan sorgularn alrken izledii yollar lk altrma sonucunda nbellee alnan sorgular, szdizimi dorulamas, zmleme ve iyiletirme aamalarndan gemeden, daha nceden hazrlanm alma plan (execution plan) procedure cache ad verilen ksmdan okunaca iin daha hzl alacaktr. Aada nbellee alnan bir sorgunun alma ak gsterilmektedir.
SQL Server zerinde alrken performans kazanmlar salayacak sorgularla almak olduka nemli bir hedeftir. Bu zellikle byk veritabanlar iin nem arz eden bir konudur. Sorgu ierisinde kullanlan baz yaplar, sorgular yavalatmakta ve sonularn daha ge elde edilmesine sebep olmaktadr. Bunun en byk nedeni sorgularn alma srelerinin uzamas ve SQL Server alma ortamnn daha ok yorulmasdr. Bu tip durumlardan kanmak iin sorgular ierisinde dikkat edilmesi gereken baz nemli hususlar unlardr. WHERE ifadeleri ierisinde NOT anahtar kelimesini ieren koullar sorgular yavalataca iin zorunlu olmad durumlarda NOT anahtar kelimesi kullanlmamaldr. (NOT IN, NOT BETWEEN, IS NOT NULL gibi ifadeler) LIKE kullanmadan da istenilen verilere ulalabilecek durumlarda WHERE ifadesi LIKE ile kullanlmamaldr. LIKE operatr, eitlik ifadelerine gre daha detayl aramalar yapaca iin sorgular daha yava alacaktr. ORDER BY kelimeleri ile verileri sralama ilemi sorgular yavalataca iin sralanm verilere ihtiya olunmayan durumlarda ORDER BY kullanlmamaldr. Veri seme ilemlerinde aranlan art tam olarak istenilen veriyi getirmelidir. htiya olmad halde geniletilen artlar, seilecek olan verilerin saysn gereksiz yere arttraca iin sorgularn da yava almasna sebep olacaktr.
Yine SQL sorgular ile alrken hem performans asndan, hem de alma zamannda SQL ortamn yormamak asndan aada nerilen iyiletirmeler yaplabilir. Tablo, alan ve dier nesnelere daha anlalr, kolay ve aklda kalc isimler verilmesi sorgularn hazrlanmasnda kolaylk salayacaktr. Alanlar tanmlanrken sadece gerektii kadar yer tanmlamas yaplmaldr. rnein ad -soyad veya eposta bilgisinin tutulaca bir alan VARCHAR tipinden en fazla 40 karakter alacak ekilde tanmlamak yeterli olacaktr. Byle bir alan iin 200 karakterlik yer ayrmak kaytlarn artmas durumunda veri tabann gereksiz yere bytecektir. Sorgu sonularnda okunabilirlii arttrmak iin AS anahtar kelimesinin kullanlmas tercih edilebilir.
41/48
42/48
View Oluturmak
View, bir SQL ifadesinin sonu kmesinden oluan sanal bir tablodur. Ayn gerek tablolarda olduu gibi satrlar ve kolonlardan oluur. View ierisindeki alanlar, veritabanndaki bir veya daha fazla tablodan gelen alanlardan oluur. Viewler zerinde WHERE ve JOIN gibi ifadeler kullanlabilir ve birden fazla tablodan olusa dahi, veriler tek bir tablodaym gibi sorgulanabilir. View oluturma sz dizimi aadaki gibidir:
CREATE SELECT FROM TabloAd WHERE Kriterler VIEW ViewAd AS KolonAd(lar)
View zerinde altrlan sorgularda her zaman gncel veriler ile allr. Bu durum View oluturulurken yazlan SQL ifadesinin, View zerinde her ilem yapldnda tekrar altrlmas ile salanr.
Bu kod ile stok miktar 0n zerinde olan kaytlarn , numaralar ve isimlerinin getirilecei bir view oluturuluyor. View oluturulduktan sonra, zerinde bir sorgu altralm ve sonular grelim. SELECT * from StoktakiUrunler Baka bir rnek daha yapalm ve fiyat, ortalama fiyattan byk olan rnler iin, rn ad ve fiyatn ieren bir view oluturalm.
CREATE VIEW SELECT FROM WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Production.Product) LuksUrunler AS ProductName,UnitPrice Production.Product
View zerinde rnek sorgumuzu altrrken bu sefer WHERE kriterini kullanalm ve fiyat 1000in zerindeki rnleri getirelim. SELECT * FROM LuksUrunler where ListPrice > 1000
43/48
44/48
Yukardaki kod rneinde BolumdekiOgrenciler isminde, int tipinden parametre alan ( @BolumID ) bir stored procedure yazm olduk. Birden fazla parametre almas gereken bir stored procedure yazlmas gerektiinde parametreler aralarna virgl koyarak ayr ayr tanmlanr.
45/48
46/48
Function Nedir?
T-SQL ierisinde yer alan programlama elerinden function, ayn programlama dillerindeki gibi benzer ihtiyalarda tekrar tekrar ayn kodu yazma olaynn nne geerek sorgulamalar srasnda daha esnek bir kullanm sunar.
Function Yazmak
Geriye deer dndren bir fonksiyonun nasl yazlaca ile ilgili sz dizimi aada verilmitir. CREATE FUNCTION FonksiyonAd dnVeriTipi AS BEGIN gerekiyorsa ilemler return deer END (@parametre1 veritipi) RETURNS
dbo emas altnda Urun isimli bir tablomuz olduunu ve bu tabloda Id, Ad ve Fiyat alanlarnn yer aldn varsayalm. Fiyatn kdvsini hesaplamak zere money tipinden parametre alan ve money tipinden sonu dnen bir fonksiyon rnei yazmak iin aadaki kod blou kullanlabilir. CREATE FUNCTION KdvHesapla (@fiyat money) RETURNS money AS BEGIN return @fiyat * 0.18 END Bu rnekteki kod blou dardan parametre olarak gelen deerin yzde 18ini hesaplayp sonu dndrecektir.
Function Kullanm
Bir nceki rnekte yazdmz fonksiyonu kullanmak iin aadaki kod blounu yazp altralm. select Ad,Fiyat,dbo.KdvHesapla(Fiyat) as KDV from Urun Burada Urun tablosundan kaytlar getirilirken Ad ve Fiyat bilgilerinin yannda Fiyat bilgisinin fonksiyona gnderilmesi sonucunda elde edilen deer KDV bal ile grntlenecektir.
47/48
48/48