You are on page 1of 48

ETM : VER TABANI SORGULAMA LEMLER VE PROGRAMLAMA NESNELER

Blm : Veri Sorgulama lemleri

Konu : Veri Sorgulama

Veri Sorgulama (Select)


Tablolarda bulunan verilerin sorgulanaca durumlarda select ifadesi kullanlr. Veri taban zerinde kullanlan select ifadelerinin performansl ve verimli bir ekilde alabilmesi iin select ifadesinin etkili ekild e nasl kullanlabileceini bilmekte fayda vardr. Veri sorgulama ilemleri srasnda select ifadesi her zaman from ile birlikte kullanlmaktadr. selectten sonra seilecek olan alanlar srasyla yazlr. Bu ifade from ile birletirilir ve fromdan sonr a da verilerin ekilecei tablo ismi yazlr. Bir tablo ierisindeki tm alanlar select ifadesi ile seilmek istenirse alan isimlerini tek tek yazmak yerine * iareti kullanlabilir. Aada select ifadesinin farkl kullanm ekillerine rnekler bulabilirsin. select * from Ogrenci Bu ifade ile Ogrenci tablosundaki btn veriler tm alan bilgileri ile birlikte elde edilmektedir. Sorgu cmlesi altrldnda aadaki ekran grntsnde yer alan sonular elde edilir.

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.

Where fadesinin Kullanm


WHERE ifadesi sorgulara belirli koul veya koullar getirerek kstlamalar yapmak amacyla kullanlr. rnein bir tabloda veri ekme ilemi yaparken sadece belirli artlara uyan verilerin getirilmesi isteniyorsa, WHERE ifadesi ile birlikte bir koul belirtilmesi gerekmektedir. Sorgu sonucunda sadece verilen koula veya koullara uyan veriler getirilecektir. WHERE ifadesi select, UPDATE ve DELETE ifadeleri ile birlikte kullanlabilir. WHERE ifadesinin genel kullanm aadaki gibidir.
3/48

[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

ETM : VER TABANI SORGULAMA LEMLER VE PROGRAMLAMA NESNELER

Blm : Veri Sorgulama lemleri

Konu : Arama lemleri

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'

WHERE AlanAd LIKE '[A-K]%' WHERE AlanAd LIKE '[^A-L]%'

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

ETM : VER TABANI SORGULAMA LEMLER VE PROGRAMLAMA NESNELER

Blm : Veri Sorgulama lemleri

Konu : Sralama lemleri

9/48

Sralama lemleri (Order By)


Baz durumlarda tablolardan setiin verilerin belirli bir sra ve dzen ierisinde olmasn isteyebilirsin. rnein seilen verilerin son kayt tarihlerine gre veya herhangi bir alan ierisindeki alfabetik sraya gre dizilerek ele alnmas gibi. Tabloda bulunan bir alana gre sralama ilemi yaplmak istendiinde SELECT ifadesi ile birlikte ORDER BY kullanarak seilen kaytlarn bir veya birden fazla alana gre sralanmas salanabilir. ORDER BY ifadesinin rnek kullanm u ekildedir: SELECT AlanAd1, AlanAd2 FROM TabloAd ORDER BY SiralanacakAlanAd Bu ifade ile seilen veriler SiralanacakAlanAd alanna gre sralanacaktr. ORDER BY artan veya azalan sralama ilemleri iin kullanlabilir. ORDER BY szckleri sralama tipini belirlemek iin ek olarak ASC (Ascending-artan) veya DESC (Descending-azalan) ifadelerini alabilir. Ek almadan kullanldnda (yukardaki rnekte olduu gibi) ASC eki ald varsaylr. Alan adndan sonra ASC eki aldnda veya herhangi bir ek almadnda kkten bye doru bir sralama ilemi yaplacaktr. Bu ilem aadaki biimlerde ele alnmaktadr. Metinsel alanlarda A harfinden Z harfine doru. Rakamsal alanlarda kkten bye doru. Tarihsel alanlarda ise eski tarihten yeni tarihe doru.

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.

Sorgu sonucunda seilen veriler

10/48

ETM : VER TABANI SORGULAMA LEMLER VE PROGRAMLAMA NESNELER

Blm : Veri Sorgulama lemleri

Konu : Veri Tekrarlarn nlemek

11/48

Veri Tekrarlarn nlemek (Distinct)


Yaplan arama ilemlerinde seilen veri ierisinde ayn kayttan birden fazla olabilmektedir. Byle bir durumda birbirini tekrar eden kaytlarn sadece birininin kullanlmas istenebilir. rnein Ogrenci tablosunda rencilerin yaadklar ehirlerin bir listesi elde edilmek istenebilir. SELECT Sehir FROM Ogrenci eklinde bir SQL sorgusu altrldnda tabloda kaytl olan tm rencilerin ehirleri listelenecektir. Fakat seilen kaytlarn ierisinde ayn ehirlerin birden fazla sayda tekrarlanmas gibi istenilm eyen bir durumla karlalacaktr. Byle bir sorgu ierisinde DISTINCT anahtar kelimesi kullanlarak tekrar eden kaytlarn teke indirilip her kayttan bir tane seilmesi salanabilir. DISTINCT anahtar kelimesinin rnek kullanm u ekildedir. SELECT DISTINCT AlanAd FROM TabloAd Az nceki senaryoda verilen rnek DISTINCT kelimesi olmadan ve DISTINCT kelimesi ile altrlarak incelendiinde aadaki sonular ile karlalacaktr.
SELECT Sehir FROM Ogrenci SELECT DISTINCT Sehir FROM Ogrenci

DISTINCT ile yaplan sorgularda tekrarlanan iller bire inmitir.

12/48

ETM : VER TABANI SORGULAMA LEMLER VE PROGRAMLAMA NESNELER

Blm : Veri Sorgulama lemleri

Konu : Alan simlerini Deitirmek

13/48

Alan simlerini Deitirmek (Alias)


Tablolarda alanlar isimlendirirken baz kstlamalar olduuna daha nce deinmitik. Kelimeler arasnda boluk brakmak ve Trke karakter kullanmak gibi durumlarda problemler kabilecei iin isimlendirmeler yaparken kelimeleri birletirerek kullanmak en gvenilir yoldur. Fakat baz durumlarda sorgu sonucunda getirilen kaytlarn alan isimlerinin deitirilmesi istenebilir. rnein Ad isminde olan bir alann renci Ad eklinde grnmesi istenebilir. Bu gibi durumlarda SELECT ifadesi ile birlikte AS anahtar kelimesi kullanlabilir. AS anahtar kelimesi, sorgu cmlelerinde getirilen alan isimlerinin sonuca farkl ekilde yanstlmasn salar. Bir baka deyile getirilen alanlara takma isimler (alias) verilebilmesini salar. Genel kullanm u ekildedir: SELECT AlanAd1 AS 'Yeni Alan smi-1', AlanAd2 AS 'Yeni Alan smi-2' FROM TabloAd Yukardaki kullanmdan da anlalaca gibi ismi deitirilecek alan adndan sonra AS 'Yeni Alan smi' eklindeki kullanm ile getirilecek veri kmesindeki alan isimleri deitirilebilir. AS ifadesi bir veya birden fazla alanda kullanlabilir. Aada AS kelimesinin rnek kullanm yer almaktadr. SELECT OgrenciID AS 'renci Numaras', Ad AS 'renci Ad', Sehir FROM Ogrenci

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

ETM : VER TABANI SORGULAMA LEMLER VE PROGRAMLAMA NESNELER

Blm : Veri Sorgulama lemleri

Konu : Literal Kullanm

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

ETM : VER TABANI SORGULAMA LEMLER VE PROGRAMLAMA NESNELER

Blm : Veri Sorgulama lemleri

Konu : Veriyi Gruplamak

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.

Belirli Saydaki lk Veriyi Semek


Tablolardan ekilen verilerin tamamna her zaman ihtiya duyulmayabilir. rnein belirli bir art salayan verilerin sadece istenilen ksm alnmak istenebilir. Bu ekilde sorgularn daha hzl almas ve sadece ihtiya duyulan kaytlarn elde edilerek gereksiz verilerle uralmamas salanabilir. SQL dilinde bu ilem TOP n sz dizimi ile yaplr. Buradaki n seilecek kayt saysn temsil etmektedir. Belirli bir sayda kayt semek yerine, seilecek toplam kaydn belirli bir orannn seilmesi istenildii durumlarda da PERCENT ifadesi kullanlmaktadr. TOP n PERCENT eklindeki kullanm sorgu sonucunda oluacak toplam kaydn yzde n kadarn getir anlamna gelir. TOP n ve TOP n PERCENT ifadelerinin genel kullanm u ekildedir: SELECT TOP n AlanAd1, AlanAd2,... FROM TabloAd SELECT TOP n PERCENT AlanAd1, AlanAd2,... FROM TabloAd lk ifadede (TOP n) n sayda kayt getirilirken, ikinci durumda ise tablodaki kaytlarn % n kadar getirilmektedir. TOP ifadesi, ORDER BY ifadesi ile sralanan kaytlarn ierisinden belirli miktarda kayt getirilmesi amacyla sklkla kullanlmaktadr. Aadaki rnekte ORDER BY ile sralanan kaytlarn ierisinden TOP ifadesi kullanlarak belirli sayda kayt getirilmitir. SELECT TOP 5 * FROM Production.Product ORDER BY ListPrice DESC Sorgu sonucunda Production.Product tablosundan ListPrice bilgisi en yksek olan ilk 5 kayta ait tm bilgiler getirilecektir. (* yerine alan adlar yazlarak sadece istenilen alanlar da getirilebilir.) Yukardaki rnekte u soru ile karlalabilir: Eer sorgu sonucunda son srada gelen kayt ile ayn ListPrice deerine sahip baka kaytlar da var ise bu kaytlar da grntlenir mi?. TOP n ifadesi kullanldnda son kaytla ayn deeri tayan birok kayt varsa bile sadece n tane deer getirilecektir. (TOP n PERCENT iinde ayn durum geerlidir) Yani yukardaki rnek iin her durumda dnecek kayt says 5 olacaktr. Fakat TOP n ifadesi ile birlikte WITH TIES kelimelerinin kullanlmas durumunda eer son kayt ile ayn deere sahip baka kaytlar varsa, bu kaytlar da sorgu sonucunda getirilecektir. TOP n WITH TIES ifadesinin rnek kullanm aadaki gibidir. SELECT TOP 5 WITH TIES Name, ProductNumber, ListPrice FROM Production.Product ORDER BY ListPrice DESC Bu sorgu sonucunda eer 5. srada getirilen kaydn ListPrice deerine sahip baka kaytlar var ise bu kaytlar da sonu kmesinde yer alacaktr. WITH TIES ifadesi sadece ORDER BY ifadesi ieren sorgu cmlelerinde kullanlabilir.

Gruplama Fonksiyonlar (Aggregate Functions)


T-SQL ierisinde tanml olan ve baz grevleri yerine getiren yaplara fonksiyon denir. SQLde fonksiyonlar, C# vb. dillerdeki amalara benzer yaplardr. Fonksiyonlar, tekrarl ilemlerin tek bir noktada toplanmas ve ynetilebilirliinin salanmas gibi gereksinimlere cevap vermekle birlikte, gelitirme zamannda
18/48

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.

Alan Adna Gre Verileri Gruplamak (Group By)


SQL dilinde belirli saydaki veri gruplanp sorgu sonucunda getirilebilecei gibi, tab lodaki belirli alanlara gre gruplamalar yaplp bu gruplar zerinde ilemler de yaplabilmektedir. Veri seme ilemi yaplrken baz durumlarda verileri gruplamak ve gruplanan veriler zerinde baz hesaplamalar ve matematiksel ilemler yaplmas gerekebilir. rnein mterilerin kaytl olduu bir tablodan mterilerin yaadklar ehirlere gre gruplama yaplabilir, her ehirdeki toplam mteri says bulunabilir (COUNT fonksiyonu ile) veya bir ehirde yaayan mterilerimizin ortalama ya bulunabilir (AVG fonksiyonu ile). Gruplama fonksiyonu ieren bir SELECT sorgu cmlesinde GROUP BY ifadesini kullanarak alan ismine gre gruplama yaplabilir ve her grup ierisinde kullanlan gruplama fonksiyonuna gre bilgiler elde edilebilir. GROUP BY ifadesinin genel kullanm u ekildedir.

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

Gruplanan Verilere art Eklemek (Having)


Veri gruplama ilemlerine baz durumlarda gruplanarak getirilecek veriler zerinde bir filtreleme ihtiyac olabilir. GROUP BY kullanld durumlarda SELECT ile birlikte WHERE ifadesi kullanlarak gruplanacak verilere alan baznda snrlamalar getirilebilir. Gruplama fonksiyonlar sonucunda elde edilen deere gre filtreleme ilemi yaplmak istenildiinde ise HAVING ifadesi kullanlmaldr. rnein; SQL cmlemize HAVING COUNT(AlanAd)>10 gibi bir ifade ilave edilebilir. HAVING sadece gruplama fonksiyonlarn ieren art ifadelerini kullanabilir. WHERE ve HAVING ifadelerinin GROUP BY ile birlikte kullanmlar u ekildedir: SELECT GruplanacakAlanAd, GruplamaFonksiyonu1(AlanAd1) FROM TabloAd WHERE art veya artlar GROUP BY GruplanacakAlanAd HAVING GrupFonksiyonu art veya artlar ORDER BY SralanacakAlanAd Bu kullanmda ifadelerin sralamalar yukardaki gibi olmaldr. Yani: WHERE ifadesi her zaman GROUP BYdan nce kullanlmaldr. HAVING ifadesi her zaman GROUP BYdan sonra kullanlmaldr. ORDER BY her zaman GROUP BYdan sonra kullanlmaldr.

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

Gruplanmam Veriler erisinde Gruplama Fonksiyonlar Kullanma (Compute)


Sadece veri seme ilemlerinin yapld bir sorgu ierisinde ayn zamanda gruplama fonksiyonlar ile retilen bir veriyi de alabilmek iin COMPUTE ve COMPUTE BY ifadeleri kullanlabilir. Bu ifadeler seilen verileri ieren sonu kmesinden ayr olarak bir de gruplama fonksiyonunun rettii sonucu ieren bir sonu kmesi daha iermektedir. COMPUTE ifadesi tm SELECT cmleleri ile birlikte kullanlabilirken, COMPUTE BY ifadesi ORDER BY ieren SELECT cmlelerinde kullanlabilmektedir. COMPUTE ve COMPUTE BY ifadelerinin rnek kullanmlar aadaki gibidir. SELECT OgrenciID, Ad, Soyad, Sehir FROM Ogrenci COMPUTE COUNT(Sehir) Sorgu sonucunda, seilen veriler ayr bir sonu kmesi, COMPUTE ile getirilen veri ayr bir sonu kmesi olarak oluturuldu.

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

ETM : VER TABANI SORGULAMA LEMLER VE PROGRAMLAMA NESNELER

Blm : Veri Sorgulama lemleri

Konu : Farkl Tablolardan Veri Getirmek

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.

Birden Fazla Tablodan Veri Getirmek


Tablo birletirme ilemi birden fazla tabloyu birletirerek altrlacak sorgunu n bir sonu kmesi olarak olumasn salar. Aadaki rnek sorguda iki farkl tablonun basit bir ekilde nasl birletirilebilecei grlmektedir. SELECT AlanAd1, AlanAd2 FROM Tablo1, Tablo2 AlanAd1in Tablo1e, AlanAd2nin de Tablo2ye ait alanlar olduu dnlebilir. Bu ekilde hazrlanacak bir sorgu cmlesiyle, iki farkl tablo birletirebilir ve seilen kaytlar bir sonu kmesi ierisinde toplanabilir. Birletirilen iki tabloda, tablolar arasnda herhangi bir balant ifadesi kullanlmazsa getirilecek sonu her iki tablodan dnen verilerin kartezyen arpm olacaktr. (Yukardaki ifade herhangi iki tablo zerinde denenecek olursa, seilen verilerin iki ayr tablodan dnen verilerin birbirleriyle elemi ekilde yeni bir sonu kmesi oluturduu grlebilir.) Kaytlarn bu ekilde elenmesi, istenilen bir durum deildir. Bu nedenle birletirilen tablolar arasnda ou zaman artlar ve ilikilendirmeler kullanlr. Tablolarn birletirilmesi eitli ilikilendirmeler ile gerekletirilebilir. Bu ilikilendirmelerden en basit olan WHERE ifadesinin kullanld cmlelerdir. ki farkl tablodaki alanlar ayn tablo ierisindeymi gibi WHERE ifadesi ile karlatrlabilir ve bu karlatrma sonucunda doru sonu elde edilen satrlardaki kaytl ar seilebilir. WHERE ifadesiyle karlatrlan alanlar arasnda foreign key (referans anahtar) ve primary key (birincil anahtar) ilikisi olmas, daha salkl sonular alnmasn salayacaktr. Aada iki tablo arasnda WHERE ifadesi kullanlarak nasl ilikilendirme yaplabilecei grlmektedir. SELECT Ogrenci.Ad, Bolum.BolumAd FROM Ogrenci, Bolum WHERE Ogrenci.BolumID = Bolum.BolumID

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

ki tablodaki ilikili alanlarn birlemesinin ekil ile ifade edilmesi

Tablolara Temsili simler (Alias) Verme


Birden fazla tabloda birletirme ilemlerinde baz durumlarda karklklar olabilmektedir. rnein iki farkl tabloda ayn alan isminin bulunmas durumunda hangi alan zerinde ilem yaplaca karmaaya sebep olacaktr. Byle bir durumda TabloAd.AlanAd eklindeki bir kullanm ile karkla sebep vermeden ilemler yaplabilir. Fakat sorgu ierisinde birden ok alan yazlmas gibi bir durumda srekli alanlarn bana tablo adn yazmak zahmetli bir i olacaktr. zellikle tablolarn ierisinde bulunduu emalar da (Schema) devreye girdiinde sorgularn okunmas zorlaacaktr. Bu tip durumlarda tablolara temsili ol arak takma isimler (alias) verilerek sorgular oluturabilir. Takma isim kullanmak karklklar engelledii gibi yazlan sorgularn okunabilirliini de arttrmaktadr. Alias kullanm TabloAd AS TakmaIsim eklinde olmaktadr. Tablo ad ile birlikte kullanlan AS ifadesinden sonra yazlan yeni isim sorgu ierisinde artk tabloyu temsil edecektir. rnein, Production.Product isimli tabloya, Production.Product AS pr eklinde pr ismi alias verilirse, artk sorgu ierisinde pr.Name eklinde bu tablonun alanlar ifade edilebilir. Yukardaki rnekte kullanlan sorgunun alias kullanarak nasl daha sade hale getirilebilecei, aadaki rnek sorgu cmlesinde grlmektedir. SELECT o.OgrenciAdSoyad, b.BolumAd FROM Ogrenciler AS o, Bolumler AS b WHERE o.OgrenciBolumId = b.BolumId

Join fadeleri ile Tablolar Birletirme


Farkl tablolar birletirmek iin kullanlan bir dier yol da sorgu ierisinde JOIN ifadelerinin kullanlmasdr. JOIN ifadelerinin baz uygulamalar WHERE ile yaplan birletirme ilemine benze se de daha farkl ve karmak kullanmlar da bulunmaktadr. Tablo birletirmede kullanlan JOIN ifadeleri aadaki tabloda ksaca anlatlmtr. JOIN Tr INNER JOIN OUTER JOIN CROSS JOIN Join seenekleri INNER JOIN ile Tablolar Birletirme Aklama Birletirilen iki tablodaki verilerden sadece kritere uyanlarn getirilmesini salar. (JOIN ifadesi de INNER JOIN ile ayn ii yapar.) Birletirilen iki tablodan birindeki verilerin tamamnn eleen kayt olmasa dahi getirilmesini salar. LEFT JOIN, RIGHT JOIN veya FULL JOIN ifadeleri ile getirilecek verilerin hangi tabloda olaca seimi yaplabilir. Birletirilen tablolardan seilen veriler arasndaki tm kombinasyonlar getirir.

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

Isim Ercan Melih Burak

GorevIsim Programc Grafiker Proje Yneticisi

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

SELECT c.Isim, g.GorevIsim FROM Calisan AS c FULL 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

ETM : VER TABANI SORGULAMA LEMLER VE PROGRAMLAMA NESNELER

Blm : Veri Sorgulama lemleri

Konu : e Sorgular (Subquery)

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.

Exists ve Not Exists fadelerinin Kullanm


WHERE ile IN ifadesinin kullanmna benzer olarak, EXISTS ve NOT EXISTS ifadeleri de alt sorgudan getirilen deerlerin ierisinde bir deerin olmas veya olmamas durumunda ilem yaplmasn salar. EXISTS ifadesi kullanldnda alt sorguda istenilen artlarn yerine getirildii durumlarda stteki sorgu deer retir. NOT EXISTS ise EXISTSin tam tersi olarak alt sorguda istenilen artlarn salanmad durumlarda stteki sorgu deer retir. rnekte EXISTS ifadesinin kullanm yer almaktadr. SELECT Ad FROM Ogrenci AS o WHERE EXISTS (SELECT * FROM Bolum AS b WHERE o. BolumID = b.BolumID)

32/48

ETM : VER TABANI SORGULAMA LEMLER VE PROGRAMLAMA NESNELER

Blm : Veri Sorgulama lemleri

Konu : Veri Gncelleme

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.

Veri Ekleme (Insert)


Bir tabloya yeni veri ekleme ilemi INSERT sorgular ile yaplmaktadr. INSERT sorgular, INTO (opsiyonel) ve VALUES ifadeleri ile birlikte kullanlarak tablolara yeni veri ekleme ilemleri gerekletirilir. Eklenecek veriler VALUES ifadesinden sonra gelen ( ) iaretlerinin ierisinde aralarnda virgl olacak ekilde yazlr. INSERT ifadesinin rnek kullanm u ekildedir. INSERT INTO Ogrenci (OgrenciID, Ad, Soyad, BolumID) VALUES (115874, 'Ercan', 'Bozkurt', 102) Veri ekleme ilemlerinde ncelikli olarak INSERT INTO Tablo tanmlamas hangi tabloya veri ekleneceini ifade eder. Tablo adndan sonra eer tablonun tm alanlarna deil de, belirli alanlarna veri eklenecek ise parantez iinde bu alanlarn isimleri yazlr. Daha sonra VALUES ifadesi ile eklenecek deerler parantez iinde belirtilir. Buradaki en nemli kriter verilerin sralandr. ( OgrenciID, Ad, Soyad, BolumID) eklinde sralanm alanlara uygun bir ekilde veri ekleyebilmek iin, yine ayn srayla eklenecek deerler yazlmaldr. Kayt eklenecek tabloda eer tm alanlara deer girilecekse, tablo adndan sonra alan isimlerinin yazlmasna gerek yoktur. Bu durumda SQL Sorgusu, tm alanlara veri gireceimizi varsayp VALUEStan sonraki parantez iindeki tm alanlara srasyla veri eklememizi bekleyecektir.

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.

Veri Silme (Delete)


Bir tablodan belirli bir kayd veya kaytlar silme ilemi DELETE ifadesi ile gerekletirilir. DELETE ifadesini kullanlrken FROM (opsiyonel) taks ile birlikte tablo adn yazlarak hangi tablodan veri silmek istediini belirtebilirsin. WHERE ifadesi ile birlikte de silinecek kaydn hangi artlar salayan kayt veya kaytlar olduu belirtilebilir. DELETE sorgularnn rnek kullanm aadaki gibidir. DELETE FROM Ogrenciler WHERE OgrenciId = 496196 DELETE sorgusu altrldktan sonra SELECT * FROM Ogrenciler ifadesi ile tablodaki kaytlar tekrar sorgulanacak olursa OgrenciIDsi 496196 olan kaydn silindii grlecektir.
35/48

DELETE ncesinde tablodaki kaytlar

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

Veri Gncelleme (Update)


Tablolar zerinde kaytl olan verileri gncellemek, veritaban uygulamalarnda sklkla yaplan bir ilemdir. Tablolar zerindeki gncelleme ilemi UPDATE komutu ile yaplr. UPDATE sorgularnda SET ifadesi kullanarak gncellenecek alanlar ve bu alanlarn alacaklar yeni deerler yazlr. DELETE ileminde olduu gibi WHERE ifadesi ile birlikte art cmlesi yazlarak, gncellenecek kayt veya kaytlarn belirlenmesi gerekmektedir. WHERE ifadesi bulunmayan bir UPDATE cmlesi, tablodaki tm kaytlar gncelleyecektir. Bu nedenle DELETE ileminde olduu gibi, UPDATE ileminde de WHERE ifadesinin kullanmna dikkat edilmesi gerekmektedir. UPDATE ifadesinin rnek kullanm aadaki gibidir. UPDATE Ogrenci SET Sehir = 'Tekirda', EMail = 'tekir@hotmail.com' WHERE OgrenciID = 115874

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

WHERE ifadesi ile sadece belirli kaytlarn ListPrice deerleri deitirilmitir.


37/48

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

ETM : VER TABANI SORGULAMA LEMLER VE PROGRAMLAMA NESNELER

Blm : Veri Sorgulama lemleri

Konu : Sorgularn altrlmas & Performans

39/48

SQL Serverda Sorgularn altrlmas


SQL Server zerinde btn sorgular, altrlmadan nce ayn ilemlerden geerler ve bu ilem admlarnn bazlar, bu i iin ayrlm zel bir alanda depolanr. Bu ilem ayn sorgularn bir k ez daha altrlmas durumunda performans art salar. Bir SQL cmlesinin ilk altrlmasnda u admlar izlenir: Szdimi Dorulamas(Parse): Yazlan SQL sorgularnda yazmsal hata olup olmadnn kontrol edilmesi. zmleme(Resolve): Yazlan nesnelerin dorulunun kontrol edilmesi ve kodu altran kullancnn yeterli yetkiye sahip olup olmadnn tespit edilmesi. yiletirme(Optimize): ndekslere gre gerekli organizasyonlar ve iyiletirmelerin yaplmas ve where koulunda belirtilen ifadelerin hangisinin nce alacana karar verilmesi. Derleme(Compile): Yazlan kodun altrlabilir hale getirilmesi. altrma(Execute): Derlenen kodun altrlmas ve sonularn alnmas.

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 Serverda nbellee alnan sorgularn alrken izledii yollar

Sorgulamalarda Performans in pular


40/48

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

ETM : VER TABANI SORGULAMA LEMLER VE PROGRAMLAMA NESNELER

Blm : Veri Sorgulama lemleri

Konu : View Oluturmak

42/48

View ile almak


View sanal bir tablo gibi alan veritaban nesnesidir. Bu blmde View oluturmak , silmek ve gncellemek gibi konular ele alnacaktr.

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.

View Oluturma rnekleri


Bu rneimizde Adventureworks veritaban zerinde aadaki kodu kullanarak bir view oluturacaz. CREATE SELECT from WHERE StokMiktari > 0 VIEW ProductID, StoktakiUrunler AS Name PRODUCTION.PRODUCT

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

ETM : VER TABANI SORGULAMA LEMLER VE PROGRAMLAMA NESNELER

Blm : Veri Sorgulama lemleri

Konu : Stored Procedure Oluturmak

44/48

STORED PROCEDURE Nedir?


Stored Procedureler Server zerinde sakl duran SQL ifadeleri gibi dnlebilir. Programlama dillerindeki fonksiyonlar / methodlar gibi parametre alabilirler. Alnan parametreler kullanlarak bir sorgu altrp cevap dndrebilirler. Stored Procedure'ler server tarafnda saklanmalarndan dolay daha hzl alrlar. nk; bir stored procedure ilk altrldnda derlenir ve sonraki arlarda terkrar derlenmeden alr. Oysa ki SQL ifadeleri her altrldnda server tarafnda bu ifade derlenir. Bu da zaman kaybna sebep olur. Stored Procedure ierisinde if, next, set gibi programlama ifadeleri kullanmak mmkndr. Gelen parametrelere gre sorgu altrlp, sonu dndrlr. zellikle ok kullancl veritaban uygulamalar gelitirirken stored procedure kullanmak programclar arasnda yaygn bir davrantr. Hatta baz durumlarda program ierisinde hibir SQL ifadesine yer vermeden stored procedure'ler ile almak tercih edilebilir.

STORED PROCEDURE Oluturmak


SELECT * FROM Ogrenci gibi basit bir SQL ifadesini de stored procedure olarak saklamak mmkn iken parametre alan daha st seviye bir stored procedure de yazlabilir. CREATE AS SELECT * PROC FROM BolumdekiOgrenciler Ogrenci where BolumID (@BolumID = int) @BolumID

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.

STORED PROCEDURE Kullanm


Kullanc tarafndan tanmlanan stored procedureler altrlaca zaman aadaki sz dizimi kullanlabilir. EXEC ProcedureAdi VarsaParamerte1, VarsaParametre2 BolumdekiOgrenciler isimli stored procedure aadaki rnekteki gibi altrlabilir EXEC BolumdekiOgrenciler 102

45/48

ETM : VER TABANI SORGULAMA LEMLER VE PROGRAMLAMA NESNELER

Blm : Veri Sorgulama lemleri

Konu : Function Yazmak ve Kullanmak

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

You might also like