Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Database System Concepts, 5th Ed. ©Silberschatz, Korth and Sudarshan See www.db-book.com for conditions on re-usewww.db-book.com Bölüm 3: SQL.

Benzer bir sunumlar


... konulu sunumlar: "Database System Concepts, 5th Ed. ©Silberschatz, Korth and Sudarshan See www.db-book.com for conditions on re-usewww.db-book.com Bölüm 3: SQL."— Sunum transkripti:

1 Database System Concepts, 5th Ed. ©Silberschatz, Korth and Sudarshan See for conditions on re-usewww.db-book.com Bölüm 3: SQL

2 ©Silberschatz, Korth and Sudarshan3.2Database System Concepts - 5 th Edition, June 15, 2005 Bölüm 3: SQL Veri tanımlama SQL Sorgu Yapısı Küme İşlemleri Fonksiyonlar Null Değeri Alt Sorgular Karmaşık Sorgular Görünümler (Views) Veritabandaki bilgilerin değiştirilmesi Birleştirmeler (Join Types)

3 ©Silberschatz, Korth and Sudarshan3.3Database System Concepts - 5 th Edition, June 15, 2005 Veri Tanımlama Dili (DDL) Veritabanında hangi ilişkiler (tablolar) olacak Tabloların tanımın yapılması Tablolarda kullanılan nitelikler, alanlar türleri ne olacak Anahtar nitelikler varmı? Varsa tanımı. SQL tarafından desteklenen, veritabanı ve veritabanı nesnelerinin oluşturulması, silimmesi ve düzenleme ile ilgili ifadeler. İlişkilerin veritabanında indekslenmesi. İlişkilerin güvenlik ve erişim hakları ile ilgili bilgilerin tutulması. Her ilişkinin disk üzerinde fiziksel olarak saklanması.  Veri Tanımlama Dili aşağıdaki amaçlar için kullanılır:

4 ©Silberschatz, Korth and Sudarshan3.4Database System Concepts - 5 th Edition, June 15, 2005 Yaygın SQL Veri Tipleri char(n). Belirlenen boyuttaki sabit uzunluklu karakter verileri ifade etmelkte kullanılır. Varsayılan uzunluk 1 dir. varchar(n). Değişken uzunluklu karakter verileri ifade eder. n sütunun alabileceği en fazla karakter sayısını sınırlar.. int. tam sayı verleri tanımlar. numeric(p,n) veya (number (p,n)) n tanesi noktadan sonra olmak üzere toplam p haneli ondalık sayıları tanımlar. real, double precision. Ondalık sayıları tanımlar. Kısım 4 te devam....

5 ©Silberschatz, Korth and Sudarshan3.5Database System Concepts - 5 th Edition, June 15, 2005 Tablo oluşturmak (Create Table) ifadesi SQL de yeni bir ilişki (tablo) oluşturmakiçim create table komutu kullanılır. create table r (A 1 D 1, A 2 D 2,..., A n D n, (zorlayıcı-ifade 1 ),..., (zorlayıcı-ifade k )) r tablo (ilişki) ismi A i sütun (nitelik) isimleri D i ise A i niteliğinin veri tipini ifade eder. Zorlayıcı ifadeler (integrity constarints) bir niteliğin uyması gereken özel koşulları (eğer varsa) ifade eder. Örnek: create table sube (sube_isimchar(15) not null, sube_isimchar(30), mevduat_birikimi integer)

6 ©Silberschatz, Korth and Sudarshan3.6Database System Concepts - 5 th Edition, June 15, 2005 Zorlayıcı ifadeler not null: sütunun null değerini alamayacağını belirtir. primary key (A 1,..., A n ) : tablonun birincil anahtarını oluşturan sütun(ları) tanımlar. Örnek: sube_isim as sütununu sube tablosu için birinci anahtar olarak tanımla. create table sube (sube_isimchar(15), sube_isimchar(30), mevduat_birikimi integer, primary key (sube_isim)) Bir niteliğin birincil anahtar (primary key) olarak tanınması durumunda not null zorlayıcı ifadesi de ayni zamanda sağlanmış (SQL-92 ve sonrası)

7 ©Silberschatz, Korth and Sudarshan3.7Database System Concepts - 5 th Edition, June 15, 2005 Drop ve Alter Table İfadeleri drop table veritabanı içerisinde kullanılan tabloların silinmesi için kullanılır alter table daha önce oluşturulmuş bir tablonun özelliğinin değiştirilmesi için kullanılır. (sütun ekleme – silme) alter table r add A D ifadesinde A isminde ve D veri tipinde yeni bir sütun r ilişkisine eklenir. Tabloda halahazırda var olan tüm satırların yeni sütun için değeri null olarak eşitlenir. alter table komutu daha önceden tabloda var olan bir sütunu silmek için de kullanılabilir. alter table r drop A ifadesinde A ismindki sütun r tablosundan silinir. alter table ifadesinde kullanılan drop ile drop table ifadesi birbirine karıştırılmamalıdır!

8 ©Silberschatz, Korth and Sudarshan3.8Database System Concepts - 5 th Edition, June 15, 2005 Temel SQL Sorgu Yapısı SQL’in temeli ilişkisel cebire dayalıdır. select A 1, A 2,..., A n from r 1, r 2,..., r m where P şeklinde bir SQL sorgusu’nda A i nitelikleri, r i ilişkileri, P ise seçme koşulunu ifade eder. Bu sorgunun ilişkisel cebirdeki karşılığı: Bir SQL sorgusun sonucu her zaman yeni bir ilişkidir!!

9 ©Silberschatz, Korth and Sudarshan3.9Database System Concepts - 5 th Edition, June 15, 2005 select ifadesi Tablo veya tablolardan istenilen verilerin seçimi için kullanılır. select bir sorgunun sonucunda gösterilmesi istenen nitelikleri (sütunları) listeler. ilişkisel cebirde atma işlemine karşılık gelir. Örnek: borc tablosundaki tüm şubelerin isimlerini listele select sube_isim from borc İlişkisel cebirde sorgunun karşılığı:  sube_isim (borc) SQL ifadeleri büyük-küçük harf ayırımı yapmaz.

10 ©Silberschatz, Korth and Sudarshan3.10Database System Concepts - 5 th Edition, June 15, 2005 select ifadesi (devam) SQL sorgusu sonucunda aynı bilgi birden fazla satırda bulunuyorsa bunların tamamı listelenecektir. Tekrarlanan satırların tek bir kez listelenmesi için distinct ifadesi kullanılır. Örnek: borc tablosundaki tüm şube isimlerini, her şube bir kez listelenecek şekilde göster. select distinct sube_isim from borc

11 ©Silberschatz, Korth and Sudarshan3.11Database System Concepts - 5 th Edition, June 15, 2005 select ifadesi (devam) select ifadesinde kullanılan * opratörü tüm sütunların listelenmesine yol açar. select * from borc select ifadesinde +, –, , ve /, gibi aritmetik operatörler kullanılabilir. Örnek: select borc_no, sube_isim, mevduat_miktari  100 from borc sorgusu sonucunda mevduat_miktari sütunundaki rakamlar 100 ile çarpılmış olarak borc tablosu tekrardan oluşturulur.

12 ©Silberschatz, Korth and Sudarshan3.12Database System Concepts - 5 th Edition, June 15, 2005 where ifadesi where ifadesi kullanılarak koşula bağlı sorgulamalar yapılabilir. Seçmek, güncellemek veya silmek istediğimiz kayıt veya kayıtları belileyen koşul cümlelerini içerir. İstenen, seçilen satırların listelenmesini sağlar. Ör. Perryridge şubesindeki borç miktarı $1200 ‘ın üzerindeki tüm borç numaralarını listele. select borc_no from borc where sube_isim = ‘ Perryridge’ and borc_miktari > 1200 Karşılaştırma koşulu içerisinde karşılaştırma operatörleri ve and, or, ve not gibi mantıksal operatörler kullanılabilir. Kıyaslamalar aritmetik ifadelerin sonucunu da uygulanabilir.

13 ©Silberschatz, Korth and Sudarshan3.13Database System Concepts - 5 th Edition, June 15, 2005 where ifadesi (devam) between ve AND operatörü ile aralık sorgulama: İki değer aralığındaki verileri sorgulamak için kullanılır. Ör: Borç miltarı $90,000 ile $100,000 arasında olan tüm borçları bul. select borc_no from borc where borc_miktari between and

14 ©Silberschatz, Korth and Sudarshan3.14Database System Concepts - 5 th Edition, June 15, 2005 from ifadesi from ifadesi sorguda kullanılacak tabloları içerir. İlişkisel cebirde Kartezyen Çarpımı işlemine eşdeğerdir. borc_sahibi X borc ifadesinin SQL’deki karşılığı: select  from borc_sahibi, borc Ör: Perryridge şubesinde borcu olan müşterilerin isimlerini, borç numaralarını ve borç miktarlarını bul. having a loan at the Perryridge branch. select musteri_isim, borc_sahibi.borc_no, borc_miktari from borc_sahibi, borc where borc_sahibi.borc_no = borc.borc_no and sube_isim = ‘Perryridge’

15 ©Silberschatz, Korth and Sudarshan3.15Database System Concepts - 5 th Edition, June 15, 2005 Yeniden adlandırma operatörü Yediden adlandırma operatörü sorgu sonucunda oluşacak tablolar ve sütunlar için takma isim vermek için kullanılır. SQL ilişkilerin (tabloların) ve ntiteliklerin (sütunların) as ifadesi kullanarak yeniden adlandırılmasına olanak tanır. eski-isim as yeni-isim Örnek: Borcu olan tüm müşterilerin isimlerini, borç numaralarını ve borç miktarlarını bul. Borc_no sütununu borc_id olarak yeniden adlandır. select musteri_isim, borc_sahibi.borc_no as borc_id, borc_miktari from borc_sahibi, borc where borc_sahibi.borc_no = borc.borc_no

16 ©Silberschatz, Korth and Sudarshan3.16Database System Concepts - 5 th Edition, June 15, 2005 Çokuzlu değişkenler (Tuple variables) Çokuzlu değişkenler as ifadesi kullanılarak from ifadesi içerisinde tanımlanırlar. Ör: Herhangi bir şubede borcu olan tüm müşterilerin isimlerini ve borç numaralarını bul. select distinct T.sube_isim from sube as T, sube as S where T.mevduat_birikimi > S.mevduat_birikimi and S.sube_sehir = ‘ Brooklyn’  Burada T ve S çokuzlu değişken olarak tanımlanmışlardır. Ör: Brooklyn şehrindeki herhangi bir şubeden daha fazla mevduat birikimi olan tüm şubleri bul. some branch located in Brooklyn. select musteri_isim, T.borc_no, S.mevduat_miktari from borc_sahibi as T, borc as S where T.borc_no = S.borc_no Burada ayni tabloya ait satırlar arasında kıyaslama yapmak durumunda olduğumuzdan çokuzlu değişkenler kullanmak zorundayız !!

17 ©Silberschatz, Korth and Sudarshan3.17Database System Concepts - 5 th Edition, June 15, 2005 Karakter Kümesi işlemleri Karakter kümesi içerisinde bulunan verileri sorgulamak için joker karakterler kulanılır. % Sıfır veya daha fazla herhangi bir karakteri ifade eder. _ (alt çizgi) herhangi bir tek karakteri ifade eder. like ifadesi ile birlikte kullanılır. Sokak isminde “Main” geçen tüm müşterileri bul. select musteri_isim from musteri where musteri_sokak like ‘ %Main% ’ Sokak ismi «Main» ile başlayan müşterleri bul: where musteri_sokak like ‘ Main% ’ Sokak ismi iki harften oluşan ve «M» ile bitenmüşterileri bul: where musteri_sokak like ‘ _M ’

18 ©Silberschatz, Korth and Sudarshan3.18Database System Concepts - 5 th Edition, June 15, 2005 Sorgu sonucunu sıralama (order by) Sorgulama sonucu satırlar artan şekilde listelenecektir. listeleme sırası order by ifadesi kullanılarak değiştirilebilir. Perryridge şubesinde borcu bulunan müşterilerin isimlerini alfabetik sıraya göre listele. select distinct musteri_isim from borc_sahibi, borc where borc_sahibi borc_no = borc.borc_no and sube_isim = ‘ Perryridge ’ order by musteri_isim asc ifadesi varsayılan yöntemdir. (küçükten büyüğe doğru sıralama) desc ifadesi kullanılırsa sıralama büyükten küçüğe şeklinde değiştirilebilinir. Ör: order by musteri_isim desc

19 ©Silberschatz, Korth and Sudarshan3.19Database System Concepts - 5 th Edition, June 15, 2005 Küme işlemleri union, intersect, ve except küme operatörleri ilişkisel cebirde  operatörlerine karşılık gelen operatörlerdir. Küme operatörleri kullanımı sonucunda elde edilen tablolardaki tekrarlanan satırlardan sadece bir tanesi listelenir, Terkrarlalan satırların tamamını listelemek için union all, intersect all ve except all ifadeleri kullanılır. Bir satır r tablosunda m kez s tablosunda ise n kez tekrarlanıyorsa; r union all s ifadesinde m + n kez, r intersect all s ifadesinde min(m,n) kez, r except all s ifadesinde max(0, m – n) kez tekrarlanır.

20 ©Silberschatz, Korth and Sudarshan3.20Database System Concepts - 5 th Edition, June 15, 2005 Küme işlemleri Borcu, mevduatı yada her ikisi de olan müşterileri bul. (select musteri_isim from mevduat_sahibi) except (select musteri_isim from borc_sahibi) (select musteri_isim from mevduat_sahibi) intersect (select musteri_isim from borc_sahibi) Mevduatı olan ama borcu olmayan müşterileri bul. (select musteri_isim from mevduat_sahibi) union (select musteri_isim from borc_sahibi) Hem borcu hem de mevduatı olan müşterileri bul.

21 ©Silberschatz, Korth and Sudarshan3.21Database System Concepts - 5 th Edition, June 15, 2005 Fonksiyonlar 5 temel fonksiyon vardır avg: averaj değeri bulur. min: en küçük değeri bulur. max: en büyük değeri bulur. sum: değerlerin toplamını bulur. count: sayma işleminde kullanılır.

22 ©Silberschatz, Korth and Sudarshan3.22Database System Concepts - 5 th Edition, June 15, 2005 Fonkisiyonlar (devam) Perryridge şubesindeki mevduatların averajını bul. Bankada mevduat sahibi olan müşterilerin sayısını bul. musteri tablosundaki satırların sayısını bul. select avg (mevduat_miktari) from hesap where sube_isim = ‘Perryridge’ select count (*) from musteri select count (distinct musteri_isim) from mevduat_sahibi

23 ©Silberschatz, Korth and Sudarshan3.23Database System Concepts - 5 th Edition, June 15, 2005 Gruplandırarak sorgulama (Group By) Gruplandırma işlemi bir tablo içerisinde ortak özelliklere sahip satırları kapsamaktadır. Birden fazla satır kümesiyle ilgili işlemlerin yapılması gerekiyorsa grup fonksiyonları kullanılır. group by ifadesi where ifadesinden sonra ve varsa orderby ifadesinden önce kullanılır. Ör: Her şubede mevduat hesabı olan müşterilerinn sayısını bul. Not: select ifadesinde kullanılan ancak fonksiyon parametreleri dışında kalan sütun isimleri group by ifadesinde listelenmelidir. select sube_isim, count (distinct musteri_isim) from mevduat_sahibi, hesap where mevduat_sahibi.hesap_no = hesap.hesap_no group by sube_isim

24 ©Silberschatz, Korth and Sudarshan3.24Database System Concepts - 5 th Edition, June 15, 2005 Having ifadesi Koşullu gruplandırma işlemi yapılırken, koşul ifadesi bir fonksiyondan dönen değere göre yazılılacaksa where yerine having ifadesi kullanılır. Having ifadesi group by ifadesinden sonra ve varsa order by ifadesinden önce yazılmalıdır. Having ifadesindeki koşullar grupların oluşmasın sonrasında uygulanır. ( Halbuki where ifadesindeki koşullar, grupları oluşturmak için kullanılır) Örnek: Averaj mevduat miktarının $1200 den fazla olduğu şubelerin isimlerini ve ilgili şubedeki averaj mevduat miktarını bul. select sube_isim, avg (mevduat_birikimi) from hesap group by sube_isim having avg (mevduat_birikimi) > 1200

25 ©Silberschatz, Korth and Sudarshan3.25Database System Concepts - 5 th Edition, June 15, 2005 Null değer sorgulama Null içerisinde değer bulundurmayan sütunlardır. Bazı satırlar için bazı sütun değerleri null olabilir. null olmayan yada bilinmeyen bir değeri temsil eder. Değerin null olup olmadığını bulmak için is null ifadesi kullanılır. Null değer içermeyen kayıtlar bulunmak isteniyorsa is not null ifadesi kullanılır. Ör: borc tablosunda borc_miktari null olan borç numaralarını bul. select borc_no from borc where mevduat_miktari is null null ifadesinin herhangi bir aritmetik işlmede kullanılması null değeri ile sonuçlanır. Örnek: 5 + null ifadesi null değeri iele sonuçlanır.

26 ©Silberschatz, Korth and Sudarshan3.26Database System Concepts - 5 th Edition, June 15, 2005 Null değer ve fonksiyonlar Fonksiyonlar (count() dışında) nıull değerlerini yok farzederler. Örnek: Tüm borçların toplamını bul. select sum (borc_miktari ) from borc ifadesi null borç miktarı değerlerini toplama katmaz (dikkate almaz) Tüm borç miktarlarının null değeri olması durumunda sonuş null dur.

27 ©Silberschatz, Korth and Sudarshan3.27Database System Concepts - 5 th Edition, June 15, 2005 Alt Sorgular Alt sorgular, bir SQL sorgusunun içerisinde başka bir SQL sorgusu kullanılarak oluşturulan SQL ifadeleridir. İç içe sorgu veya iç sorgu olarak da ifade edilirler. Çoklu tablodan değer almanın bir başka yoludur. Çoğunlukla SQL ifadelerinin where ve having bölümlerinde kullanılır. Genel olarak bir sorgudan dönen değerler diğer sorgunun şart kısmını oluşturur. Select, insert, update, ve delete SQL ifadeleriyle ve karşılaştırma operatörleri ve IN, NOT IN, SOME, ALL gibi SQL ifadeleri ile birlikte kullanılabilir. Alt sorgu order by ifadesini içeremez. Order by veya group by içerisinde alt sorgu kullanılamaz. Alt sorguda birleştirme (join) işlemi kullanılamaz. Alt sorgu kendi from ifadesi veya diğer from ifadesinde kullanılan sütunları kullanabilir.

28 ©Silberschatz, Korth and Sudarshan3.28Database System Concepts - 5 th Edition, June 15, 2005 Alt sorgular (devam) Temel sorgunun koşul kısmında karşılaştırma operatörleri (=,, >=, <=) kullanıldığında alt sorgudan tek değer dönmesi gerekir. Alt sorgudan dönen değer birden fazlaysa koşul kısmında IN, NOT IN, SOME, ALL gibi çoklu değerleri karşılaştırmak için kulanılan ifadeler kullanılmalıdır. Karşılaştırma operatörü kullanımı: Ör: Bankada hem borcu hem de mevduatı bulunan John isimli müşterlerileri bul. select distinct musteri_isim from borc_sahibi where musteri_isim = (select musteri_isim from mevduat_sahibi where musteri_isim= ‘John’)

29 ©Silberschatz, Korth and Sudarshan3.29Database System Concepts - 5 th Edition, June 15, 2005 Alt sorgular (IN, NOT IN kullanımı) Bankada hem borcu hem de mevduat hesabı bulunan tüm müşterilerin isimlerini bul. Bankada hem borcu bulunan ama mevduat hesabı olmayan tüm müşterilerin isimlerini bul. select distinct musteri_isim from borc_sahibi where musteri_isim not in (select musteri_isim from mevduat_sahibi ) select distinct musteri_isim from borc_sahibi where musteri_isim in (select musteri_isim from mevduat_sahibi )

30 ©Silberschatz, Korth and Sudarshan3.30Database System Concepts - 5 th Edition, June 15, 2005 Alt sorgular (devam) Alt sorgudan birden fazla sütun döndürülmesi: Find all customers who have both an account and a loan at the Perryridge branch Not: Yukardaki sorgu daha basit bir şekilde yazılabilir ancak SQL’in alt sorgudaki özelliklerini göstermek için bu şekilde yazılmıştır. select distinct musteri_isim from borc_sahibi, borc where borc_sahibi.borc_no = borc.borc_no and sube_isim = ‘Perryridge’ and (sube_isim, musteri_isim ) in (select sube_isim, musteri_isim from mevduat_sahibi, hesap where mevduat_sahibi.hesap_no = hesap.hesap_no ) Bankada hesabı bulunan müşterilerin  isimlerini ve şube isimlerini bulur

31 ©Silberschatz, Korth and Sudarshan3.31Database System Concepts - 5 th Edition, June 15, 2005 Alt sorgular (some [any] ve all kullanımı) Brooklyn şehrindeki herhangi bir şubeden daha fazla mevduat birikimi olan tüm şubeleri bul. some ifadesi kullanılarak ayni sorgu aşağıdaki şekilde yazılabilir: select sube_isim from sube where mevduat_birikimi > some (select mevduat_birikimi from sube where sube_sehir = ‘ Brooklyn ’ ) select distinct T.sube_isim from sube as T, sube as S where T.mevduat_birikimi > S.mevduat_birikimi and S.sube_sehir= ‘ Brooklyn ’ Brooklyn şehrindeki mevduat_birikimlerini bulur 

32 ©Silberschatz, Korth and Sudarshan3.32Database System Concepts - 5 th Edition, June 15, 2005 Some ifadesi’nin tanımı F some r  t  r  c:      olabilir (5 < some) = doğru ) = yanlış (5  some) = doğru (çünkü 0  5) (5 < some ) = doğru (5 = some (= some)  in Fakat, (  some)  not in

33 ©Silberschatz, Korth and Sudarshan3.33Database System Concepts - 5 th Edition, June 15, 2005 Alt sorgular (all kullanımı) Brooklyn şehrindeki tüm şubelerden daha fazla mevduat birikimi olan tüm şubeleri bul select sube_isim from sube where mevduat_birikimi > all (select mevduat_birikimi from sube where sube_sehir = ‘Brooklyn’) Brooklyn şehrindeki mevduat_birikimlerini bulur 

34 ©Silberschatz, Korth and Sudarshan3.34Database System Concepts - 5 th Edition, June 15, 2005 All ifadesi’nin tanımı F all r  t  r  (F t) (5 < all) = yanlış ) = doğru (5  all ) = doğru (çünkü 5  4 and 5  6) (5 < all ) = yanlış (5 = all (  all)  not in Fakat, (= all)  in

35 ©Silberschatz, Korth and Sudarshan3.35Database System Concepts - 5 th Edition, June 15, 2005 Alt sorgular (EXISTS ve NOT EXISTS kullanımı) Alt sorgudan dönen değerlerin olup olmadığını kontrol etmek için kullanılır. Alt sorgu sonucunda en az bir satır dönmüşse exists true değerini, hiçbir satır dönmesse false değerini alır. exists true değerini alırsa temel sorgunun koşul kısmı true değerini alacağından temek sorgu işlevini gerçekleştirir. exists false değerini alırsa temel sorgunun koşulu sağlanmamış olur not exists ifadesi exists ifadesinin tam tersidir. Alt sorgu sonucunda en az bir satır dönmüşse not exists false değerini, hiçbir satır dönmesse true değerini alır. not Exists true değerini alırsa temel sorgunun koşul kısmı true değerini alacağından temek sorgu işlevini gerçekleştirir. not Exists false değerini alırsa temel sorgunun koşulu sağlanmamış olur

36 ©Silberschatz, Korth and Sudarshan3.36Database System Concepts - 5 th Edition, June 15, 2005 Alt sorgular (unique, not unique kullanımı) unique ifadesi alt sorgudan dönen değerlerde tekraralana satır olup olmadığını kontrol eder. Tekrarlanan satır varsa unique true değerini alır. Tekrarlanan satır yoksa unique false değerini alır. unique true değerini alırsa temel sorgunun koşul kısmı true değerini alacağından temek sorgu işlevini gerçekleştirir. unique false değerini alırsa temel sorgunun koşulu sağlanmamış olur not unique ifadesi unique ifadesinin tam tersidir. Tekrarlanan satır varsa not unique false değerini alır. Tekrarlanan satır yoksa not unique true değerini alır

37 ©Silberschatz, Korth and Sudarshan3.37Database System Concepts - 5 th Edition, June 15, 2005 from ifadesinde alt sorgu kullanımı SQL from ifadesinde de alt sorgu kullanımına imkan verir. SQL ifadelerinde from ifadesindenden sonra kullanılacak tablolar belirtildiğinden, alt sorgu yardımıyla üretilen değerler temel sorgu için tablo veri kaynağı olarak kullanılabilir. Alt sorgu sonucu üretilen tabloya ve sütunlarına as ifadesi kullanarak takma isimler vermemiz gerekir. Ör: Ortalama mevduat miktarı $1200’ün üzerinde olan şubelerin isimlerini ortalama mevduat birikimlerini bul. select sube_isim, ort_mevduat from (select sube_isim, avg (mevduat_miktarı) from hesap group by sube_isim ) as sube_ort ( sube_isim, ort_mevduat) where ort_mevduat > 1200 Not: Burada having ifadesini kullanmaya gerek yoktur çünkü ortalama mevduat miktarı doğrudan temel sorgunun koşul kısmında kullanılabilir.. sube_ort tablosunu oluşturur

38 ©Silberschatz, Korth and Sudarshan3.38Database System Concepts - 5 th Edition, June 15, 2005 Görünümler (views) Görünümler bir nesne içerisindeki ortak sorguları saklama ve sorguların tekrar kullanılabilmesini sağlayan kavramlardır. Özellikle karmaşık sorguları tekrar tekrar yazmak iş yükü getireceğinden görünüm kulanmak faydalıdır. Bazı durumlarda her türlü bilgiye her kullanıcının erişmesini engellemek isteyebiliriz. Görünümler bazı verilerin bazı kuulanıcıların göremesini engellemek için kullanılabilir. Görünümler, bir veya birden fazla tablodaki satır veya sütunların bir alt kümesini oluşturmaya yarar. Mantıksal tasarımın bir parçası olmayan ama bir gurup kullanıcın erişimine sunulan iliskilere (tablolara) görünümler denir. Ör: Müşterinin ismi ve borç numarasının görülmesinin uygun olduğu ama borç miktarını göstermenin uygun olamdığı bir durumda aşağıdaki SQL ifadesi kullanılır: (select musteri_isim, borc_no from borc_sahibi, borc where borc_sahibi.borc_no = borc.borc_no )

39 ©Silberschatz, Korth and Sudarshan3.39Database System Concepts - 5 th Edition, June 15, 2005 Görünüm oluşturma Bir görünüm oluşturmak için aşağıdaki ifade kullanılır. create view v as Burada, bir SQL sorgusu v ise oluşturulan görünümün ismidir. Bir görünüm oluşturulduktan sonra, oluşturulan görünümün ismi kullanılarak SQL sorguları yazılabilir. Görünüm oluşturmak veritabanına yeni bir tablo oluşturmak ile eşdeğer değildir. Oluşturulan bir görünümü silmek için drop view görünüm-ismi ifadesi kullanılır. Bir görünüm sadece o görünümü silme yetkıisi olan bir kullanıcı (yani sahibi) tarafından silinebilir. Görünüm silindiğinde ona ait tüm izinler ve tanımlar ortadan kalkar.

40 ©Silberschatz, Korth and Sudarshan3.40Database System Concepts - 5 th Edition, June 15, 2005 Örnekler Bnakadaki tüm müşterilerin isimlerini ve hesapları ve veya borçları olan tüm şubelerin isimlerini gösteren bi rgörünüm tanımla. Yukardaki görünüm kullanılarak Perryridge şubesindeki tüm müşterileri göster. create view tum_musteriler as (select sube_isim, musteri_isim from mevduat_sahibi, hesap where mevduat_sahibi.hesap_no = hesap.hesap_no ) union (select sube_isim, musteri_isim from borc_sahibi, borc where borc_sahibi.borc_no = borc.borc_no ) select musteri_isim from tum_musteriler where sube_isim = ‘Perryridge’

41 ©Silberschatz, Korth and Sudarshan3.41Database System Concepts - 5 th Edition, June 15, 2005 Görünüm’den Görünüm elde etme Var olan bir görünüm yeni oluşturulacak bir görünüm için kaynak teşkil edebilir. Sadece from ifadesinden sonra tablo adı kısmına kullanılacak görünüm ismi yazılır. Örnek: create view tum_musteriler as (select sube_isim, musteri_isim from mevduat_sahibi, hesap where mevduat_sahibi.hesap_no = hesap.hesap_no ) union (select sube_isim, musteri_isim from borc_sahibi, borc where borc_sahibi.borc_no = borc.borc_no ) create view Perryridge_musterileri (select musteri_isim from tum_musteriler where sube_isim = ‘Perryridge’)

42 ©Silberschatz, Korth and Sudarshan3.42Database System Concepts - 5 th Edition, June 15, 2005 Tabloların birleştirilmesi (Join) Tablo birleştirme işlemi iki tablo kullanarak yeni bir tablo oluşturur. Birleştirilen tabloların yapısında veya içerdiği değerlerde bir değişiklik meydana gelmez, sadece o anki sorgulamanın sonucu için kaynak oluşturur. Birleştirme Şartları – her iki tablodan ortak olan satırları ve birleştirme sonucu ortaya çıkan tabloda yer alacak sütunları tanımlar. Birleştirme Türleri– tablolarda ortak olmayan satırların sonuç tablosunda ne şekilde yer alacağını tanımlar. Birleştirme Türleri Birleştirme Şartları koşul

43 ©Silberschatz, Korth and Sudarshan3.43Database System Concepts - 5 th Edition, June 15, 2005 Tabloların birleştirilmesi (örnek) borc tablosu borc_noborc_miktari L-170 L-230 L-260 sube_isim Downtown Redwood Perryridge borc_sahibi tablosu: musteri_isimborc_no Jones Smith Hayes L-170 L-230 L-155

44 ©Silberschatz, Korth and Sudarshan3.44Database System Concepts - 5 th Edition, June 15, 2005 Tabloların birleştirilmesi (örnek) borc inner join borc_sahibi on borc.borc_no = borc_sahibi.borc_no borc left outer join borc_sahibi on borc.borc_no = borc_sahibi.borc_no borc_noborc_miktari L-170 L musteri_isim Jones Smith sube_isim Downtown Redwood borc_no L-170 L-230 Jones Smith null borc_noborc_miktari L-170 L-230 L musteri_isimsube_isim Downtown Redwood Perryridge

45 ©Silberschatz, Korth and Sudarshan3.45Database System Concepts - 5 th Edition, June 15, 2005 Tabloların birleştirilmesi (örnek) borc natural inner join borc_sahibi borc natural right outer join borc_sahibi (similar to borc inner join borc_sahibi on borc.borc-number = borc_sahibi.borc-number but no repetition of common attributes) borc_noborc_miktari L-170 L musteri_isim Jones Smith sube_isim Downtown Redwood borc_noborc_miktari L-170 L-230 L null musteri_isim Jones Smith Hayes sube_isim Downtown Redwood null

46 ©Silberschatz, Korth and Sudarshan3.46Database System Concepts - 5 th Edition, June 15, 2005 Tabloların birleştirilmesi (örnek) borc full outer join borc_sahibi using (borc_no) Ör: Bankada ya mevduat hesabı yada borcu bulunan ama her ikisi birden bulunmayan müşterlileri bul. select musteri_isim from (mevduat_sahibi natural full outer join borc_sahibi ) where hesap_no is null or borc_no is null Tablodaki sütunların soldan sağa doğru listeleniş sırası şu şekildedir: 1- Ortak sütun 2- ortak olmayan soldaki tabloya ait sütunlar 3- ortak olmayan sağdaki tabloya ait sütunlar borc_noborc_miktari L-170 L-230 L-260 L null musteri_isim Jones Smith null Hayes sube_isim Downtown Redwood Perryridge null

47 ©Silberschatz, Korth and Sudarshan3.47Database System Concepts - 5 th Edition, June 15, 2005 Veritabanındaki kayıtların değiştirilmesi Veritabanında tutulan veriler üzerinde işlem yapmak için Veri İşleme Dili (DML) kullanılır. Veritabanındaki kayıtlar üç şekilde değiştirilebilir: Tablodan bir satır silerek (Deletion) Tabloya yeni bir satır ekleyerek (Insertion) Tablodaki herhangi bir kayda ait değeri değiştirerek

48 ©Silberschatz, Korth and Sudarshan3.48Database System Concepts - 5 th Edition, June 15, 2005 Tablodan veri silme (Delete) Kullanım şekli: delete from tablo_adı where koşul Ör: Perryridge şubesindeki tüm hesapları sil. delete from hesap where sube_isim = ‘ Perryridge ’ ‘Needham’ şehrindeki tüm şubelerdeki tüm hesapları sil. delete from hesap where sube_isim in (select sube_isim from sube where sube_sehir = ‘ Needham ’ )

49 ©Silberschatz, Korth and Sudarshan3.49Database System Concepts - 5 th Edition, June 15, 2005 Tablodan veri silme (devam) Ör: mevduat miktarı prtalama mevduat miktarının altında olan tüm hesapları sil. delete from hesap where mevduat_miktari < (select avg (mevduat_miktari ) from hesap )

50 ©Silberschatz, Korth and Sudarshan3.50Database System Concepts - 5 th Edition, June 15, 2005 Tabloya yeni veri girişi (Insert) Kullanım şekli: insert into tablu_ismi values (deger1, deger2, deger3,...degern) Ör: hesap tablosuna yeni bir satır ekle. insert into hesap values (‘A-9732’, ‘Perryridge’,1200) veya insert into hesap (sube_isim, balance, hesap_no) values (‘Perryridge’, 1200, ‘A-9732’) Ör: hesap tablosuna mevduat miktarı bilinmeyen yeni bir hesap ekle. insert into hesap values (‘A-777’,‘Perryridge’, null )

51 ©Silberschatz, Korth and Sudarshan3.51Database System Concepts - 5 th Edition, June 15, 2005 Tabloya yeni veri girişi (devam) Perryridge şubesinde borcu bulunan tüm müşteriler $200 lık bir hediye mevduat hesabı aç. Burada borç tablosundan hesap numarası almak mümkün olmadığından borç numaralarını mevduat hesaplarındaki hesap numarası olarak kullanacağız. insert into hesap select borc_no, sube_isim, 200 from borc where sube_isim = ‘Perryridge’ insert into mevduat_sahibi select musteri_isim, borc_no from borc, borc_sahibi where sube_isim = ‘ Perryridge’ and borc.hesap_no = borc_sahibi.hesap_no hesap ve mevduat_sahibi tablolarına satır eklenmeden önce select from where ifadeleri tamamlanır.

52 ©Silberschatz, Korth and Sudarshan3.52Database System Concepts - 5 th Edition, June 15, 2005 Tablo’da var olan kayıtların değiştirilmesi (Update) Kullanım şekli: update tablo_adı set sütun1=değer, sütun2=değer,....., sütunn=değer where koşul Ör: Burada iki update ifadesine ihtiyaç vardır. update hesap set mevduat_miktarı = mevduat_miktarı  1.06 where mevduat_miktarı > update hesap set mevduat_miktarı = mevduat_miktarı  1.05 where mevduat_miktarı  Update işlemlerinin sırası önemlidir. Bu işlem case ifadesi kullanılarak da yapılabilir (sonraki slayt) Mevduat miktarı $10,000 üzerinde olan hesaplara %6 faiz uygulayarak artır, diğer tüm hesaplara ise %5 faiz uygulayarak artır.

53 ©Silberschatz, Korth and Sudarshan3.53Database System Concepts - 5 th Edition, June 15, 2005 Case ifadesinin kullanımı Kullanım şekli: case when koşul1 then işlem1 when pred2 then işlem2 …….. when koşuln then işlemn else işlem0 end Bir önceki örneğe alternatif çözüm: update hesap set mevduat_miktari= case when mevduat_miktari <= then mevduat_miktari *1.05 else mevduat_miktari * 1.06 end

54 Database System Concepts, 5th Ed. ©Silberschatz, Korth and Sudarshan See for conditions on re-usewww.db-book.com Bölüm 3 Sonu

55 ©Silberschatz, Korth and Sudarshan3.55Database System Concepts - 5 th Edition, June 15, 2005 Şekil 3.1: Veritabanı Şeması sube (sube_isim, sube_isim, mevduat_birikimi) musteri (musteri_isim, musteri_sokak, musteri_sehir) borc (borc_no, sube_isim, borc_miktari) borc_sahibi (musteri_isim, borc_no) hesap (hesap_no, sube_isim, balance) mevduat_sahibi (musteri_isim, hesap_no)


"Database System Concepts, 5th Ed. ©Silberschatz, Korth and Sudarshan See www.db-book.com for conditions on re-usewww.db-book.com Bölüm 3: SQL." indir ppt

Benzer bir sunumlar


Google Reklamları