Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Bölüm 3: SQL.

Benzer bir sunumlar


... konulu sunumlar: "Bölüm 3: SQL."— Sunum transkripti:

1 Bölüm 3: SQL

2 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) 1

3 Veri Tanımlama Dili (DDL)
Veri Tanımlama Dili aşağıdaki amaçlar için kullanılır: 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ı.

4 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 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 (A1 D1, A2 D2, ..., An Dn, (zorlayıcı-ifade1), , (zorlayıcı-ifade k)) r tablo (ilişki) ismi Ai sütun (nitelik) isimleri Di ise Ai 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_isim char(15) not null, sube_isim char(30), mevduat_birikimi integer)

6 Zorlayıcı ifadeler not null: sütunun null değerini alamayacağını belirtir. primary key (A1, ..., An ) : 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_isim char(15), sube_isim char(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 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 Temel SQL Sorgu Yapısı SQL’in temeli ilişkisel cebire dayalıdır.
select A1, A2, ..., An from r1, r2, ..., rm where P şeklinde bir SQL sorgusu’nda Ai nitelikleri, ri 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!! 2

9 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. 3

10 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 4

11 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  from borc sorgusu sonucunda mevduat_miktari sütunundaki rakamlar 100 ile çarpılmış olarak borc tablosu tekrardan oluşturulur. 5

12 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. 6

13 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 7

14 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’ 8

15 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 9

16 Ç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 musteri_isim, T.borc_no, S.mevduat_miktari from borc_sahibi as T, borc as S where T.borc_no = S.borc_no 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 distinct T.sube_isim from sube as T, sube as S where T.mevduat_birikimi > S.mevduat_birikimi and S.sube_sehir = ‘ Brooklyn’ Burada ayni tabloya ait satırlar arasında kıyaslama yapmak durumunda olduğumuzdan çokuzlu değişkenler kullanmak zorundayız !! 10

17 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 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 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 Küme işlemleri Borcu, mevduatı yada her ikisi de olan 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. (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) except (select musteri_isim from borc_sahibi)

21 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 Fonkisiyonlar (devam)
Perryridge şubesindeki mevduatların averajını bul. select avg (mevduat_miktari) from hesap where sube_isim = ‘Perryridge’ musteri tablosundaki satırların sayısını bul. select count (*) from musteri Bankada mevduat sahibi olan müşterilerin sayısını bul. select count (distinct musteri_isim) from mevduat_sahibi

23 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. select sube_isim, count (distinct musteri_isim) from mevduat_sahibi, hesap where mevduat_sahibi.hesap_no = hesap.hesap_no group by sube_isim Not: select ifadesinde kullanılan ancak fonksiyon parametreleri dışında kalan sütun isimleri group by ifadesinde listelenmelidir.

24 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 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 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 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 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 Alt sorgular (IN, NOT IN kullanımı)
Bankada hem borcu hem de mevduat hesabı bulunan tüm müşterilerin isimlerini bul. select distinct musteri_isim from borc_sahibi where musteri_isim in (select musteri_isim from mevduat_sahibi ) 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 )

30 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 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 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.

31 Alt sorgular (some [any] ve all kullanımı)
Brooklyn şehrindeki herhangi bir şubeden daha fazla mevduat birikimi olan tüm şubeleri 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’ 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’) Brooklyn şehrindeki mevduat_birikimlerini bulur 

32 Some ifadesi’nin tanımı
F <comp> some r t r <comp> c:      olabilir. 5 6 (5 < some ) = doğru (5 < some ) = yanlış 5 (5 = some ) = doğru 5 (5  some ) = doğru (çünkü 0  5) 5 (= some)  in Fakat, ( some)  not in

33 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 All ifadesi’nin tanımı
F <comp> all r t r (F <comp> t) 5 6 (5 < all ) = yanlış 6 (5 < all ) = doğru 10 4 (5 = all ) = yanlış 5 4 (5  all ) = doğru (çünkü 5  4 and 5  6) 6 ( all)  not in Fakat, (= all)  in

35 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 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 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 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 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 < sorgu ifadesi > Burada, < sorgu ifadesi > 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 Ö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. 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 ) Yukardaki görünüm kullanılarak Perryridge şubesindeki tüm müşterileri göster. select musteri_isim from tum_musteriler where sube_isim = ‘Perryridge’

41 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 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 Tabloların birleştirilmesi (örnek)
borc tablosu. 3000 4000 1700 borc_no borc_miktari L-170 L-230 L-260 sube_isim Downtown Redwood Perryridge borc_sahibi tablosu: musteri_isim borc_no Jones Smith Hayes L-170 L-230 L-155

44 Tabloların birleştirilmesi (örnek)
borc inner join borc_sahibi on borc.borc_no = borc_sahibi.borc_no borc_no borc_miktari L-170 L-230 3000 4000 musteri_isim Jones Smith sube_isim Downtown Redwood borc_no L-170 L-230 borc left outer join borc_sahibi on borc.borc_no = borc_sahibi.borc_no Jones Smith null borc_no borc_miktari L-170 L-230 L-260 3000 4000 1700 musteri_isim sube_isim Downtown Redwood Perryridge

45 Tabloların birleştirilmesi (örnek)
borc natural inner join borc_sahibi borc_no borc_miktari L-170 L-230 3000 4000 musteri_isim Jones Smith sube_isim Downtown Redwood (similar to borc inner join borc_sahibi on borc.borc-number = borc_sahibi.borc-number but no repetition of common attributes) borc natural right outer join borc_sahibi borc_no borc_miktari L-170 L-230 L-155 3000 4000 null musteri_isim Jones Smith Hayes sube_isim Downtown Redwood

46 Tabloların birleştirilmesi (örnek)
borc full outer join borc_sahibi using (borc_no) borc_no borc_miktari L-170 L-230 L-260 L-155 3000 4000 1700 null musteri_isim Jones Smith Hayes sube_isim Downtown Redwood Perryridge 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 Ö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

47 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 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 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 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 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, 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 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ı  where mevduat_miktarı > 10000 update hesap set mevduat_miktarı = mevduat_miktarı  where mevduat_miktarı  10000 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 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 * else mevduat_miktari * end

54 Bölüm 3 Sonu

55 Ş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)


"Bölüm 3: SQL." indir ppt

Benzer bir sunumlar


Google Reklamları