You are on page 1of 348

Veri Tabanı Yönetim Sistemleri TBIL-403

AHMET YESEVİ ÜNİVERSİTESİ

Uzaktan Eğitim Fakültesi TÜRTEP

TBIL-403

VERİ TABANI YÖNETİM


SİSTEMLERİ

Dr. Yalçın ÖZKAN

Veri Tabanı Yönetim Sistemleri TBIL-403 -> Ahmet Yesevi Ünv

file:///D|/Belgeler/Universite/Donem_III/Dersler/temp/Kapak_TBIL403.html [24.11.2006 21:26:14]


Untitled Document

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/kunye.htm [24.11.2006 21:26:14]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01002.htm

Veri tabaný sistemleri bilgisayar sistemlerinin önemli bir bileþeni olarak deðerlendirilir. Veri Tabaný Yönetim Sistemleri
(VTYS), birbirleriyle iliþkili veri ve programlar topluluðundan oluþmaktadýr. Veri topluluðu bir "veri tabaný" olarak
deðerlendirilir. Veri tabaný, bir kuruluþa iliþkin bilgilerin yer aldýðý ortamdýr. Veri tabaný sistemleri, veri kümelerinin
düzenli biçimde tutulduðu ve bu verilerin çeþitli yazýlýmlar aracýlýðýyla yönetildiði ortamlardýr.

Bu derste; temel kavramlar ardýndan, veri tabaný tasarýmýnýn esasýný oluþturan "Varlýk-Ýliþki modeli" ele
alýnarak incelenecektir. Ardýndan "Ýliþkisel Model" ele alýnacak ve "Ýliþkisel Veri Tabaný" tasarýmý üzerinde durulacaktýr.

Veri Tabaný Yönetim Sistemlerinin temel sorgulama dili olan SQL, bu ders kapsamýnda ayrýntýlý biçimde ele
alýnarak incelenecekir. Bu dilin sorgulama olanaklarý ve veri tabanýný deðiþtirme özellikleri üzerinde durulacaktýr. Bu
dersi tamamlayan öðrenci, veri tabaný sistemleri üzerinde ayrýntýlý bilgi sahibi olacak, SQL sorgulama dilini etkin bir
biçimde kullanabilecektir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01002.htm [24.11.2006 21:26:15]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01005.htm

TEMEL KAVRAMLAR

Bu bölümde,

● Klasik Dosya Yapýlarý,


● Veri Tabaný Sistemleri,
● Veri Tabaný Sistemlerinin Üstünlükleri,
● Veri Modelleri

anlatýlmaktadýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01005.htm [24.11.2006 21:26:15]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01010.htm

Bölüm Hedefi
Bu bölümde,

● Bilgisayardaki dosya kavramýný,


● Temel dosya tiplerini,
● Veri Tabaný kavramýný,
● Veri Tabaný sistemlerinin neden tercih edilmesi
gerektiðini,
● Veri modelinin ne olduðunu ve
● Baþlýca veri modellerini

öðreneceksiniz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01010.htm [24.11.2006 21:26:15]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01020.htm

1.1 Klasik Dosya Yapýlarý

Bilgisayarlarýn ilk ortaya çýktýðýndan bu yana hem donaným hem de yazýlým alanýnda pek çok deðiþim ortaya çýkmýþtýr.
Doðal olarak bu deðiþim, kuruluþlarýn ve kiþilerin gereksinimlerine daha iyi cevap verebilmek amacýyla ortaya çýkmaktadýr.
Pek çok kuruluþta eskiye oranla çok daha fazla veri üretildiðinden, geleneksel veri saklama ve iþleme tekniklerinin yetersiz
kaldýðý gözlemlenmiþtir. Veri saklama birimlerinde depolanan veri topluluklarýna “dosya” (file) denir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01020.htm [24.11.2006 21:26:16]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01025.htm

1.1.1 Kayýt ve Alan

Dosyalar kendi içinde kayýtlara bölünmüþtür. Bir sýnýftaki öðrenci listesini göz önüne alalým. Bu liste çok sayýda veri içerebilir.
O halde, listenin ana bellekte tutulmasý söz konusu olamaz. Ana bellekte tutulduðu takdirde, bilgisayarýn kapatýlmasý
durumunda bu bilgiler yok olacaktýr. O halde bu verilerin kalýcý bir ortamda, örneðin sabit disk üzerinde yer almasý
gerekecektir. Disk üzerinde tutulan bu bilgiler, yeni öðrenci eklendiðinde büyüyecek veya çýkarýldýðýnda küçülecektir.
Ayrýca zaman zaman içeriði deðiþecektir. Bu listedeki her bir öðrenci bilgisi bir mantýksal kayýt oluþturur. Her kayýt da
farklý bilgiler içerebilir. Örneðin; öðrencinin adý, baba adý, doðduðu yer vb gibi bilgileri içerebilir. Sayýlan bu bilgilerin
herbirine alan (field) adýný veriyoruz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01025.htm [24.11.2006 21:26:16]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01030.htm

1.1.2 Sýralý Dosyalar

Klasik bilgisayar dosyalarý birbirinden baðýmsýz; muhasebe, stok, pazarlama, üretim ve diðer uygulamalarda kullanýlmak
üzere hazýrlanýr. Bu dosyalar, sýralý ya da doðrudan eriþim yöntemleri kullanýlarak iþlenir. Sýralý eriþimde, dosyanýn
tüm kayýtlarý tek tek taranarak istenilen kayýtlara ulaþýlýr. Doðrudan eriþim yönteminde ise, kayýtlar tek tek sýrayla
okutulmaz, istenilen kayýda doðrudan eriþerek iþlenir.

Sýralý dosyalar, bir baþka deyiþle ardýþýk dosyalar, içerdiði kayýtlara birinci kayýttan baþlamak üzere sýrayla eriþim
yapmak üzere tasarlanmýþ dosyalardýr. Bu tür dosyalarýn kayýtlarýna ardýþýk olarak eriþilebilmesine karþýlýk, kayýtlar
fiziksel olarak ardýþýk olmayabilir. Sýralý dosyalarýn herbir kayýtýna ardýþýk olarak eriþilmesi bazý durumlarda yararlý
olmasýna raðmen, bazý uygulamalarda sorunlar yaratýr.

Örneðin; okuldaki tüm öðrencilerin tümü listelenecek ise, kayýtlara peþpeþe eriþim söz konusudur. Bu durumda dosyanýn
sýralý olarak tasarlanmýþ olmasý sorun yaratmaz. Ancak sadece birkaç öðrencinin listelenmesi isteniliyorsa, tüm
öðrencilerin okunarak bu listenin elde edilmesi uygun bir yöntem olmayacaktýr. Söz konusu öðrencilere doðrudan eriþilmesi
en uygun yoldur.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01030.htm [24.11.2006 21:26:16]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01035.htm

1.1.3 Ýndeksli Dosyalar

Sýralý dosyalarda tüm kayýtlar ardarda gelimesi gerkiyordu. Bu soruna çözüm bulmak amacýyla doðrudan eriþimli
dosyalar kullanýlýr. Bu tür dosyalarda, herbir arama iþlemi dosyanýn baþýndan itibaren yapýlmaz. Belirlenen kayýtlara
doðrudan eriþilerek üzerinde iþlem yapýlýr.

Doðrudan eriþimli dosyalarýn en tanýnmýþý, indeksli dosyalar olarak bilinir. Ýndeksli dosyalar veya bir baþka deyiþle indeks
sýralý dosyalar, veri dosyasýndan ayrý olarak bir indeks dosyasýnýn oluþturulmasý ile birlikte hazýrlanýr. Bir dosya
için oluþturulan indeks; söz konusu dosyanýn anahtarlarý ile bu anahtarlarýn disk üzerinde bulunduðu adresi içerir. Anahtar
alan, eriþimde kulanýlmak üzere seçilen alan olarak deðerlendirilir.

Örneðin; öðrenci dosyasýnda, öðrenci numarasýný içeren alanýnýn indeks alaný olarak tasarlandýðýný varsayalým. Herhangi
bir öðrencinin bilgilerine ulaþmak söz konusu olduðunda; bu numara önce indeks üzerinde aranýlarak bulunur ve söz
konusu kayýda iliþkin adres bilgisi elde edilerek, bu adrese doðrudan eriþilir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01035.htm [24.11.2006 21:26:17]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01040.htm

1.1.4 Hesaba Dayalý Dosyalar

Bir diðer doðrudan eriþimli dosya türü hesaba dayalý dosyalar (hashed files) olarak bilinir. Bu tür dosyalar, indeksli dosyalar gibi
ayrý bir indeksin tutulmasýný gerektirmez. Dosyanýn herhangi bir kaydýna doðrudan doðruya eriþebilmek için bir hesaplama
algoritmasý kullanýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01040.htm [24.11.2006 21:26:17]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01045.htm

1.2 Veri Tabaný Sistemleri

Karmaþýk dosya yapýlarý ve çok sayýda dosya arasý iliþki ve kullanýcýlarýn dosyalara eriþimi söz konusu olduðunda,
geleneksel dosya sisteminin yetersiz kaldýðý görülmüþtür. Bu sorunu çözmek üzere, veriyi saklama ve veriye eriþim
konusunda yeni yazýlým teknolojilerine yönelme baþlamýþ ve Veri Tabaný Yönetim Sistemleri (VTYS) yaklaþýmý ortaya çýkmýþtýr.

Veri Tabaný Yönetim Sistemleri (VTYS) yaklaþýmýnda veri giriþi ve depolanmasý, veriye eriþen uygulama
programlarýndan baðýmsýzdýr. Klasik dosya kullanýmýnda ise, kayýt desenleri ve dosya yapýlarýnda ortaya çýkabilecek en
ufak bir deðiþiklik bile uygulama programlarýnýn deðiþmesine ve yeniden derlenmesine neden olmaktadýr.

Veri tabaný sistemleri bilgisayar sistemlerinin önemli bir bileþeni olarak deðerlendirilir. Veri tabaný yönetim sistemleri
(VTYS), birbirleriyle iliþkili veri ve programlar topluluðundan oluþmaktadýr. Veri topluluðu bir “veri tabaný” olarak
deðerlendirilir. Veri tabaný bir kuruluþa iliþkin bilgilerin yer aldýðý ortamdýr. Veri tabaný sistemleri, veri kümelerinin
düzenli bçimde tutulduðu ve bu verilerin çeþitli yazýlýmlar aracýlýðýyla yönetildiði ortamlardýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01045.htm [24.11.2006 21:26:18]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01050.htm

1.3 Veri Tabaný Sistemlerinin Üstünlükleri

Veri tabaný kullanýmý, geleneksel dosya kullanýmýna göre birçok yönden üstünlük saðlamaktadýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01050.htm [24.11.2006 21:26:18]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01055.htm

1.4 Veri Modelleri

Veri Tabaný Yönetim Sistemleri belirli bir veri modeline dayanýr. Bir veri tabaný yapýsýnýn temelini veri modeli
kavramý oluþturmaktadýr. Veriyi mantýksal düzeyde düzenlemek için; kullanýlan kavramlar, yapýlar ve iþlemler topluluðuna
“Veri Modeli” denir.

Þu ana dek birçok veri modeli geliþtirilmiþtir. Baþlýca veri modelleri yandaki animasyonda yer almaktadýr.

Sayýlan bu veri modellerinin ilk ikisi þu anda kullanýlmamaktadýr. En yaygýn kullanýlaný ise, Ýliþkisel Veri Modelidir.
Günümüzde kullanýlan VTYS’lerin hemen hemen tümü iliþkisel veri modeline dayalýdýr. Son zamanlarda ortaya çýkan
Nesneye Yönelik Veri Modeli, Ýliþkisel Veri Modeli ile birlikte bazý VTYS’lerde kullanýlmaktadýr.

! Veri Modellerini görmek için "DEVAM"


düðmesine týklayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01055.htm [24.11.2006 21:26:18]


Untitled Document

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT01060.htm [24.11.2006 21:26:19]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02005.htm

VARLIK ÝLÝÞKÝ MODELÝ

Bu bölümde,

● Varlýk Ýliþki Modeli,


● Varlýk,
● Varlýk Dizisi,
● Varlýk ve Ýliþki Kümeleri,
● Nitelikler,
● Varlýklarýn Eþlendirilmesi,
● Varoluþ Koþulu,
● Anahtarlar,
● Varlýk Ýliþki Þemalarý,
● Varlýk Ýliþki Modelinin Tablolaþtýrýlmasý,

anlatýlmaktadýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02005.htm [24.11.2006 21:26:19]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02010.htm

Bölüm Hedefi
Bu bölümde,

● Varlýk ve iliþki kavramlarýný,


● Varlýk Ýliþki modelinin temel kavramlarýný ,
● Varlýklarý eþlendirme türlerini,
● Varoluþ koþulu kavramýný,
● Anahtar ve süper anahtarý ve görevlerini,
● Varlýk-iliþki þemalarýnýn görevlerini,
● Varlýk Ýliþki þemalarýnýn düzenlenmesini,
● Varlýk-iliþki þemalarýnýn veri tabaný tablolarýna
dönüþtürülmesini,

öðreneceksiniz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02010.htm [24.11.2006 21:26:19]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02020.htm

2.1 Varlýk Ýliþki Modeli

Zaman içinde, her bir veri modeli için birçok VTYS’leri üretilmiþtir. Ancak þu ana kadar hiçbir VTYS içinde kullanýlmamýþ bir
veri modeli daha bulunmaktadýr. Bu veri modeli varlýk-iliþki modeli (Entity-Relationship Model) adýyla bilinmektedir.
Varlýk Ýliþki modelini kýsaca Türkçe kelimelerinin baþ harflerinden türeterek VÝ veya Ýngilizce kelimelerinin baþ
harflerinden türeterek kýsaca ER modeli olarak isimlendirilir.

Varlýk-iliþki modeli herhangi bir VTYS’de kullanýlmasa bile, veri çözümlemede, modellemede ve iliþkilerin ortaya
konulmasý açýsýndan çok kullanýlan bir araçtýr. Bu model kullanýlarak, VTYS’den baðýmsýz olarak veri çözümlenir,
modellemesi ve iliþkileri tamamlandýktan sonra herhangi bir VTYS veri tabaný þemasýna dönüþtürülür.

Örnek bir varlýk iliþki modeli þemasý

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02020.htm [24.11.2006 21:26:20]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02025.htm

2.2 Varlýk

Varlýk (Entity), var olan ve diðer varlýklardan ayýrt edilebilen bir nesnedir. Örneðin,

● bir bilgisayar,
● bir kaplan,
● bir savaþ uçaðý,
● bir kýz çocuðu

birer varlýk olarak deðerlendirilir. Bu kavram, aslýnda dünyamýzdaki var olan nesneleri, olaylarý ve kavramlarý
tanýmlamaktadýr. Yandaki nesnelerden her biri bir varlýk olarak deðerlendirilir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02025.htm [24.11.2006 21:26:20]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02030.htm

2.3 Varlýk Dizisi

Ayný türdeki varlýklar bir varlýk dizisi ya da bir baþka deyiþle varlýk kümesi oluþturur. Örneðin, bir okuldaki tüm
öðrenciler “öðrenci”, bu okuldaki tüm dersler “ders” isimli varlýk olarak deðerlendirilebilir. Çok sayýdaki öðrenci topluluðu da
bir varlýk oluþturur.

Örneðin; “Burak” bir varlýk olmasýna karþýlýk; onun yer aldýðý “öðrenci” tanýmý da bir varlýk olarak deðerlendirilir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02030.htm [24.11.2006 21:26:21]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02035.htm

2.4 Varlýk ve Ýliþki Kümeleri

Varlýklar arasýndaki baðlantýya iliþki adý verilir. Örneðin, “Burak” varlýðý ile “Dersler” varlýðý arasýnda
bir iliþki vardýr çünkü; “Burak” bir öðrencidir ve aldýðý dersler “Dersler” varlýðý ile gösterilmektedir.

Ýliþki kümesi, ayný türdeki iliþkilerin bir kümesidir. Biçimsel olarak, bu varlýk seti üzerindeki bir
matematiksel iliþki olarak ifade edilebilir. Ayný tür iliþkilerin oluþturduðu kümeye iliþki kümesi denir ve
bu iliþki kümelerini R ile gösterilir.

E1, E2,.... En varlýk kümeleri ise, bu kümeler arasýndaki R iliþkisi þu þekilde tanýmlanýr:

Örnek

Aþaðýdaki iki varlýk kümesini gözönüne alalým. Bu varlýk kümelerinden birincisi öðrencileri, ikincisi ise bu
öðrencilerin aldýklarý dersleri içermektedir.

E1= {Burak, Begüm}


E2= {Matematik, Fizik}

Bu iki küme arasýndaki iliþki, öðrencilerle dersler arasýnda olan iliþkidir. Bu iliþkileri, öðrenci-ders çiftleri
biçiminde ifade edebiliriz. Tüm öðrencilerle tüm dersler arasýndaki iliþki ise kartezyen çarpým yapýlarak
ortaya konulur. Kartezyen çarpým, iki küme arasýnda olasý tüm çiftleri ifade etmektedir. Ýki varlýk kümesi
için kartezyen çarpým þu þekildedir:

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02035.htm (1 of 3) [24.11.2006 21:26:21]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02035.htm

E1 x E2 = {(Burak, Matematik), (Burak, Fizik), (Begüm, Matematik), (Begüm, Fizik)}

Aþaðýda gösterildiði biçimde üç iliþki kümesi tanýmlayalým:

R1 = {(Burak, Matematik)}
R2 = {(Burak, Fizik)}
R3 = {(Burak, Matematik), (Begüm, Matematik)}

Bu iliþki kümeleri için aþaðýdaki baðýntýlarýn doðru olduðu görülür:

R1 ⊆ E1 x E2

R2 Í E x E
1 2

R3 Í E x E
1 2

Bu örnek bize, iki veri kümesi arasýnda geçerli tüm iliþki kümelerinin, R iliþki kümesinin bir alt kümesi
olduðunu göstermektedir.

Örnek

Bir bankanýn müþterileri ve bu müþteriler için bankanýn düzenlediði hesaplar birer varlýk olarak kabul
edilir. Bu iki varlýk arasýnda müþteri-hesap no biçiminde ifade edilen bir iliþki bulunmaktadýr.

"Müþteri" ve "Hesaplar" varlýklarý arasýnda ikili iliþki bulunmaktadýr. Bu iliþki kümeleri þu þekilde ifade
edilebilir:

R1 = {(Burak, 1350), (Burak, 1400)}


R2 = {(Begüm, 1525}
R3 = {(Selin,1111)}
R4 = {(Sezin, 1200)}
R5 = {(Dilay, 1500), (Dilay, 1750)}

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02035.htm (2 of 3) [24.11.2006 21:26:21]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02035.htm

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02035.htm (3 of 3) [24.11.2006 21:26:21]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02040.htm

2.5 Nitelikler

Bir varlýk, çok sayýda nitelik yardýmýyla tanýmlanabilir.


Örneðin, “PERSONEL” varlýðýnýn nitelikleri yandaki þekildeki gibi olabilir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02040.htm [24.11.2006 21:26:22]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02045.htm

2.5.1 Etki Alaný

Niteliðin aldýðý deðerlere etki alaný (domain) adý verilir. Örneðin, “PERSONEL” varlýðýnýn “adý ve soyadý” niteliði, birçok
PERSONEL adýný ve soyadýný içeren bir dizidir.

O halde nitelik, matematiksel anlamda bir fonksiyon olarak da deðerlendirilebilir. Bir varlýk kümesinden bir etki alanýna
eþlendirmeyi saðlar. Bu sayede her varlýk, nitelik ve veri deðeri olarak veri çiftleri biçiminde gösterilebilir.

Örneðin bir “PERSONEL” varlýðý;


(nitelik, etki alaný)

çiftleri biçiminde ifade edilebilir. “PERSONEL” varlýðýnýn bir elemaný için veri çiftleri yandaki þekildeki gibi ifade edilebilir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02045.htm [24.11.2006 21:26:22]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02050.htm

2.5.2 Türetilen Nitelik

Bir nitelik kullanýlarak, bir baþka varlýk niteliði elde edilebiliyorsa, bu yeni niteliðe türetilen nitelik adý verilir.
Örneðin; “PERSONEL” varlýðýnýn “doðum tarihi” niteliðinden yararlanýlarak, “yaþ” niteliði elde edilebilir.

ÖRNEK:
PERSONELin doðum tarihi 1960 ise, içinde bulunduðumuz yýldan yararlanýlarak, bu tarih çýkarýlýr ve PERSONELin yaþý
bulunur. O halde, PERSONELin “doðum tarihi” niteliði belirli ise, “yaþ” isimli bir nitelik tanýmlamaya gerek yoktur. “Yaþ” niteliði
bir türetilen nitelik olarak deðerlendirilir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02050.htm [24.11.2006 21:26:23]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02055.htm

2.5.3 Çok Deðere Sahip Nitelikler

Bir nitelik birden fazla deðer ile eþlenebiliyorsa, çok deðere sahip nitelik adý verilen bir kavramdan söz edilir.

ÖRNEK: Bir kiþinin “beðendiði araba markalarý” isimli nitelik, birden çok arabayý kapsayacaðý için bu niteliðin çok deðere
sahip bir nitelik olduðu kabul edilir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02055.htm [24.11.2006 21:26:23]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02060.htm

2.5.4 Birleþik Nitelikler

Birden fazla nitelik birleþtirilerek yeni bir nitelik oluþturulabilir. Bu tür niteliklere birleþik nitelik adý verilir.

ÖRNEK:
PERSONELin “cadde” ve “þehir” nitelikleri birleþtirilerek “adres” isimli yeni bir nitelik oluþturulabilir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02060.htm [24.11.2006 21:26:23]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02065.htm

2.5.5 Rol

Bir iliþki varlýðýn bir fonksiyonu ise, buna rol adý verilir. Örneðin, “PERSONEL” varlýðý hem yöneticileri hem de
iþçileri kapsayacaktýr. Bu varlýklar arasýnda bazýlarý diðerlerinin yöneticisidir. “Kim kimin yöneticisidir?” biçimindeki bir iliþkiyi
göz önüne alalým. Bu iliþki;

(Yönetici, Ýþçi) çiftleriyle karakterize edilir. Ancak bu çiftler arasýnda,

(Ýþçi, Yönetici) çiftleri göz ardý edilir.

ÖRNEK:
“PERSONEL” varlýðý ile niteliklerini göz önüne alalým. Bu varlýðýn nitelikleri ve etki alaný, yani içerdiði deðerler gösterilmiþtir.

Buna hangi PERSONELin, diðerinin yöneticisi olduðunu belirleyen “çalýþtýðý kiþi” iliþkisini göz önüne alarak rol çiftlerini belirleyelim.

(Begüm, Burak)
(Begüm, Dilay)
(Selin, Sezin)

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02065.htm [24.11.2006 21:26:24]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02070.htm

2.6 Varlýklarýn Eþlendirilmesi

Bir varlýkla iliþkiye girebilecek varlýklarýn sayýsýna eþleme sayýsý denir. Eþleme sayýlarý n>2 varlýk için söz konusudur ve
ikili iliþkilerin ortaya konulmasý açýsýndan yararlýdýr. A ve B gibi iki varlýk kümesi arasýndaki R iliþki kümesi için dört
farklý eþleme durumlarý olabilir.

! Varlýk Eþleme þekillerinin tamamýný


görmek için "Devam" düðmesine
týklayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02070.htm [24.11.2006 21:26:24]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02075.htm

2.6.1 Birden-bire Ýliþki

A varlýk kümesi içindeki bir varlýk, B varlýk kümesi içindeki sadece bir varlýk ile iliþkili ve B varlýk kümesi içindeki bir varlýk,
A varlýk kümesi içinde sadece bir varlýk ile iliþkili ise birden-bire iliþki söz konusudur.

A ve B kümelerinin,

biçiminde olduðunu varsayalým. A kümesinin her bir elemanýnýn, B kümesindeki bir elemanla iliþkide olmasý bire-bir
iliþkiyi ifade etmektedir.

ÖRNEK 1:
Müþteri-hesaplar iliþkisini göz önüne alalým. Her müþteri için sadece bir hesap açtýrýlabildiðini ve birden fazla kiþi için ortak
hesap açýlmasýna izin verilmediðini varsayalým.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02075.htm (1 of 2) [24.11.2006 21:26:25]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02075.htm

Þekil üzerinde gösterildiði gibi, her bir müþteri sadece bir hesap numarasý ile eþlenebilmektedir. Ayný biçimde bir hesap
numarasý sadece bir müþteriye verilebilmektedir. O halde bu birden-bire iliþkidir.

Diðer örnekler için týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02075.htm (2 of 2) [24.11.2006 21:26:25]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02075_2.htm

ÖRNEK 2:
Aşağıdaki varlıkları gözönüne alalım:

Bu varlıklar için aşağıdaki eşlemeler yapılabiliyorsa, birden-bire ilişkiden söz edilebilir.

R1 = {(a1,b2),(a2,b4)}

R2 = {(a2,b1),(a3,b2),(a4,b3)}

R3={(a1,b3),(a2,b2),(a3,b1)}

ÖRNEK 3:
Aşağıdaki iki kümeyi gözönüne alalım:

Bu iki küme içinde yer alan evli eşler birden-bire bir eşlemeye sahiptir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02075_2.htm [24.11.2006 21:26:25]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02080.htm

2.6.2 Birden-çoða Ýliþki

A kümesi içindeki bir varlýk, B kümesi içindeki birden fazla


varlýk ile iliþkili ise, bu eþlemeye birden-çoða iliþki adý verilir.
Bu durumun tersi geçerli deðildir. Yani B kümesindeki bir varlýk,
A kümesindeki sadece bir varlýk ile eþleþebilir.

ÖRNEK:
A varlýk kümesi anne isimlerinden oluþmaktadýr. B kümesi ise bu anne varlýklarýnýn çocuklarýndan
oluþmaktadýr.

küme elemanlarýný daha açýkca yazabiliriz:

Bu iki küme arasýndaki iliþki, doðal olarak birden-çoða biçiminde olacaktýr. Çünkü bir annenin bir veya daha
fazla çocuðu olabilir. Ancak bir çocuðun sadece bir annesi olacaktýr. O halde iki küme arasýndaki R iliþki
kümesi þu þekilde ifade edilebilir:

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02080.htm [24.11.2006 21:26:25]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02085.htm

2.6.3 Çoktan-bire Ýliþki

A varlýk kümesindeki birden fazla varlýk, B kümesindeki bir varlýk ile iliþkili ise, bu eþlemeye çoktan-bire iliþki adý verilir.

ÖRNEK:
A kümesi çocuklarý; B kümesi ise bu çocuklarýn annelerini içermektedir.

Bu iki varlýk kümesi arasýndaki iliþki þu þekilde ifade edilebilir :

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02085.htm [24.11.2006 21:26:26]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02090.htm

2.6.4 Çoktan-çoða Ýliþki

A varlýk kümesi içindeki bir varlýk B varlýk kümesi içindeki birden fazla varlýk ile iliþkili ise ve B kümesindeki bir varlýk
A kümesindeki birden fazla varlýk ile eþleniyorsa çoktan-çoða iliþki vardýr.

ÖRNEK:
Müþteri-hesap iliþkilerinde, aile üyelerinin ortak hesap açabilmesi durumunda çoktan-çoða iliþki söz konusu olmaktadýr.

Bu þekil, müþteri-hesap iliþkisinin çoktan-çoða biçiminde olduðunu göstermektedir. Müþteriler birden fazla hesaba
sahip olabilmekte ve birden fazla müþteri ayný hesabý açabilmektedir. Örneðin, “Burak” isimli kullanýcý 4500 ve 2310 numaralý
iki hesaba sahiptir. Buna karþýlýk, 4500 numaralý hesabýn ayný aileye üye “Burak” dýþýnda “Begüm” isimli bir baþka
müþterisi bulunmaktadýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02090.htm [24.11.2006 21:26:26]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02095.htm

2.7 Varoluþ Koþulu

Eðer X varlýðýnýn bulunmasý, Y varlýðýnýn bulunmasýna baðlý ise, X’in Y’ye baðlý olduðundan söz edilir. Bir baþka deyiþle,
Y silinirse X’in bir anlamý kalmayacaktýr. O halde “X’de silinmelidir” sonucuna ulaþýlýr. Böyle bir durumda Y’ye baskýn
varlýk (dominant entity), X’e baðýmlý varlýk (subordinate entity) adý verilir.

ÖRNEK:

Bir iþletmede “ürün” ve “stok hareket” varlýklarýnýn mevcut olduðunu varsayalým.

ürün={ürün isimleri}

stok hareket={Günlük ürün giriþ ve çýkýþ miktarlarý}

Burada varlýklar arasýndaki iliþki birden çoða doðrudur. Her ürün birden fazla stok hareketi ile iliþkilidir. Bu
durumda, “stok hareket” varlýk kümesinden bir varlýðýn silinmesi durumunda, “ürün” varlýk kümesinden bir
varlýk silinmesi söz konusu olmaz. Çünkü bu varlýk “stok hareket” kümesindeki baþka varlýklarla da iliþkilidir.

Yukarýda söylenenin aksine “ürün” kümesinden bir varlýk silinmesi söz konusu ise, bu varlýkla iliþkili olan tüm
“stok hareket” varlýklarýnýn da silinmesi gerekecektir. Bu durumda “ürün” varlýðý baskýn varlýk, “stok
hareket” varlýðý ise baðýmlý varlýk olarak deðerlendirilir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02095.htm [24.11.2006 21:26:27]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02100.htm

! 2.8 Anahtarlar

Varlýklarý ve iliþkileri tanýmlamýþ bulunuyoruz. Ancak, bir varlýk kümesi veya bir iliþki kümesi içinde yer alan
varlýklarý birbirinden nasýl ayýrt edebileceðiz sorunu karþýmýza çýkmaktadýr. Örneðin “öðrenci” varlýk kümesi içinde her
bir öðrenciyi diðerinden ayýrt eden nitelikler neler olabilir? Öðrencileri birbirinden ayýrt etmek için, öðrenci
numarasýný kullanabileceðimizi söyleyebiliriz. Varlýk kümesi içindeki varlýklarý birbirinden ayýrt etmek için kullanýlan bu
tür niteliklere varlýk kümesinin anahtarý denir. "Süper ve Aday Anahtar" olmak üzere iki tür anahtar vardýr.

Diðer anahtar türünü görmek için


"Devam" düðmesine týklayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02100.htm [24.11.2006 21:26:27]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02105.htm

2.8.1 Süper Anahtar

Varlýk kümesi içinde yer alan bir varlýðý kesin olarak tanýmlamaya yarayan anahtara süper anahtar denir. Bu anahtar sadece
bir nitelikten oluþabileceði gibi, birden fazla niteliðin birleþiminden de oluþabilir. Süper anahtarlar süper küme oluþturur. Bir
süper anahtarýn herhangi bir süper kümesi daima bir süper anahtar olarak kabul edilir.

ÖRNEK:
SSK numarasý bir PERSONELi diðerinden ayýrt etmek için yeterlidir. Çünkü bir ülkedeki tüm çalýþanlarýn sadece bir SSK
numarasý vardýr ve iki farklý kiþinin ayný SSK numarasýna sahip olmasý olanaksýzdýr.

PERSONELin “adý” süper anahtar olarak tanýmlanamaz. Çünkü ayný isme sahip birçok PERSONEL var olabilir. Ancak,
“SSK numarasý” bir süper anahtar olmasý nedeniyle, "SSK numarasý" ve "PERSONELin adý" birlikte süper anahtar
olarak deðerlendirilebilir. Hatta “SSK Numarasý, Adý, Bölümü” nitelikleri birlikte bir süper anahtar olarak kabul edilebilir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02105.htm [24.11.2006 21:26:27]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02110.htm

2.8.2 Aday Anahtar

Varlýk kümesi içinde yer alan bir varlýðý kesin olarak tanýmlamaya yarayan bir baþka anahtar da aday anahtar
olarak bilinmektedir. Bir varlýk kümesinin süper anahtarý bir veya daha fazla niteliðin birleþiminden oluþabiliyordu. Bu tür bir
süper anahtarýn herhangi bir alt kümesi ayný zamanda bir süper anahtar deðil ise, bu anahtara aday anahtar ya da
kýsaca anahtar adý verilir.

Bazý durumlarda; varlýklara iliþkin birkaç nitelik, birlikte bir anahtar olarak tanýmlanabilir.

ÖRNEK:

Personel için; “SSK No, Adý, Bölümü” nitelikleri, birlikte "PERSONEL" varlýðý içindeki her bir varlýðý diðerinden ayýrt etmek
için kullanýlabilir. Süper anahtar, varlýklarý kesin olarak birbirinden ayýrt etme özelliðine sahip olmasýna karþýlýk, bu
özelliði kazanmak için gerekenden fazla niteliði içerebilir. Anahtar ise, ayný tanýma uygundur. Ancak gerekenden fazla
nitelik içermeme özelliðine sahiptir. Yukarýda görüldüðü gibi, “SSK No” niteliði süper anahtarýn bir parçasý olmasýna karþýlýk,
tek baþýna varlýklarý birbirinden kesin olarak ayýrt etmekte kullanýlabilir. O halde “SSK No” niteliði bir anahtardýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02110.htm [24.11.2006 21:26:28]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02115.htm

2.8.3 Zayýf ve Kuvvetli Varlýklar

Bazý durumlarda varlýk kümesi içinde bir anahtar bulmak mümkün olmayabilir. Hatta niteliklerinin
tümü biraraya getirildiðinde yine bir anahtar elde edilemeyebilir. Böyle varlýk kümelerine zayýf
varlýk kümesi adý verilir.

Buna karþýlýk, varlýk kümesinin içerdiði niteliklerden en az biri bir anahtar oluþturabiliyorsa bu
varlýk kümesine kuvvetli varlýk kümesi adý verilir.

ÖRNEK:
Bir “PERSONEL” varlýðýnýn aþaðýda belirtilen niteliklere sahip olduðunu varsayalým.

“Ýsim ve soyadý”
“Doðduðu il”
“Eðitim düzeyi”

Bu üç nitelikten oluþan varlýk kümesi, bir zayýf varlýk kümesi olarak deðerlendirilir. Çünkü, bu küme içinde ayný isim ve
soyadýna sahip çok sayýda PERSONEL olabilir. O halde bir anahtar olarak kabul edilemez. Benzer biçimde “doðduðu il” ve
“eðitim düzeyi” nitelikleri de ayný nedenlerden ötürü birer anahtar olamaz. Bu niteliklerin tümünün birleþimi bile bir
anahtar olamaz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02115.htm [24.11.2006 21:26:28]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02120.htm

2.9 Varlýklar Ýliþki Þemalarý

Varlýk iliþki modelinde varlýklar ve iliþkileri tanýmlamak için aþaðýda belirtilen þema öðeleri kullanýlýr.

! Diðer Varlýk iliþki þema elementlerini görmek için "Devam" düðmesine týklayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02120.htm [24.11.2006 21:26:29]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02125.htm

2.9.1 Ýliþki Türlerinin Gösterilmesi

Ýliþki türleri,

● Birden-bire
● Birden-çoða
● Çoktan-bire
● Çoktan-çoða

biçiminde tanýmlanmýþtý. Bu iliþkiler varlýk-iliþki, yani ER þemalarý ile aþaðýdaki þekilde gösterilebilir.

1. Örnek için týklayýnýz

2. Örnek için týklayýnýz

3. Örnek için týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02125.htm [24.11.2006 21:26:29]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02125_1.htm

ÖRNEK 1:

Bir “PERSONEL” varlýðýnýn aþaðýda belirtilen niteliklere sahip olduðunu varsayalým.

● Adý
● Cadde
● Sokak
● Apartman
● Doðum tarihi
● Sevdiði yiyecekler

a) “Cadde”, “sokak” ve “apartman” nitelikleri “adres” isimli adýyla birleþtirilecektir.


b) “Doðum tarihi” isimli nitelikten yararlanýlarak “yaþý” isimli yeni bir nitelik elde edilecektir.

Yapýlan tanýmlara uygun olarak varlýk-iliþki þemasýný þöyle oluþturabiliriz:

2. Örnek için týklayýnýz

3. Örnek için týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02125_1.htm [24.11.2006 21:26:30]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02125_2.htm

ÖRNEK 2:

“Müþteri” ve “Hesap” isimli iki varlýk kümesi birbirine “musHes” isimli iliþki ile baðlýdýr.

“Müþteri” varlýðýnýn nitelikleri:

● Adý
● SSK no
● Adres

“Hesap” varlýðýnýn nitelikleri:

● Hesap no
● Bakiye

Varlýk-iliþki þemasý yanda belirtilen þekilde olabilir:

1. Örnek için týklayýnýz

3. Örnek için týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02125_2.htm [24.11.2006 21:26:30]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02125_3.htm

ÖRNEK 3:

“PERSONEL” isimli varlýk kümesini göz önüne alalým. Bu varlýk kümesinin nitelikleri þunlardýr:

● Adý
● Adresi
● Tel no

Bu “PERSONEL” varlýk kümesindeki PERSONELin bir kýsmý diðerlerinin yöneticisidir. Bu iliþki þu þekilde gösterilebilir:

1. Örnek için týklayýnýz

2. Örnek için týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02125_3.htm [24.11.2006 21:26:30]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02130.htm

2.10 Varlýk Ýliþki Modelinin Tablolaþtýrýlmasý

Bir veri tabaný, tablolardan oluþur. Varlýk-iliþki þemalarý biçiminde çizilen bir veri tabaný tablolar halinde gösterilebilir.
Veri tabanýnýn her varlýk kümesi ve her iliþki kümesi için, bu isimlerle simgelenen birer tablo düzenlenir.

ÖRNEK 1:

ÖRNEK 2:

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02130.htm (1 of 3) [24.11.2006 21:26:31]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02130.htm

ÖRNEK 3:

ÖRNEK 4:

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02130.htm (2 of 3) [24.11.2006 21:26:31]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02130.htm

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02130.htm (3 of 3) [24.11.2006 21:26:31]


Untitled Document

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT02135.htm [24.11.2006 21:26:31]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03005.htm

ÝLÝÞKÝSEL VERÝ MODELÝ

Bu bölümde,

● Ýliþkisel Veri Modeli,


● Ýliþkisel Veri Tabaný,
● Veri Tabaný Bütünlüðü,

anlatýlmaktadýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03005.htm [24.11.2006 21:26:31]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03010.htm

Bölüm Hedefi
Bu bölümde,

● Ýliþkisel veri tabaný kavramýný ve ana bileþeni olan


tablolarýn özelliklerini,
● Veri tabaný þemasý kavramýný,
● Veri tabaný bütünlüðü kavramýný,
● Anahtarlarýn bütünlük sýnýrlamalarýndaki önemini,
● Veri tabaný sýnýrlamasý türlerini,

öðreneceksiniz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03010.htm [24.11.2006 21:26:32]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03015.htm

3.1 Ýliþkisel Model

Ýliþkisel model (relational model), günümüzde en yaygýn biçimde kullanýlan ( veri tabaný modelidir ) bir modeldir. Ticari
veri tabaný yönetim sistemlerinin hemen hemen tümünde bu model kullanýlmaktadýr. Ýliþkisel model, varlýklar
arasýndaki baðlantýnýn, içerdiði deðerlere göre saðlanmasý esasýna dayanýr. Ýliþkisel model, varlýklar arasýnda oluþan
karmaþýk iliþkileri basite indirgemek amacýyla geliþtirilmiþtir. Bu yaklaþýmda, veri tabanýndaki tüm iliþkiler tablolar
biçiminde tanýmlanmaktadýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03015.htm [24.11.2006 21:26:32]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03020.htm

3.2 Ýliþkisel Veri Tabaný

Ýliþkisel veri tabaný, her biri özel isimlere sahip tablolardan oluþur. Ýliþkisel veri tabanýnda her bir tablo bir varlýða veya
bir iliþkiye karþýlýk gelmektedir. Tablonun sütunlarý nitelikleri; satýrlar ise bu niteliklerin deðerlerini ifade eder. Her bir satýr
bir “kayýt” olarak da düþünülebilir. Anahtar alan, tablonun tanýmlayýcýsýdýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03020.htm [24.11.2006 21:26:32]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03025.htm

3.2.1 Tablolarýn Özellikleri

Ýliþkisel veri tabaný içinde yer alan her bir tablo;

● Sütunlardan (kolonlardan) oluþur ve


● Her bir sütunun ayrý bir adý vardýr.
● Her bir sütun, ayný niteliðin tanýmlandýðý ayný etki alanýnýn (domain) belirlediði deðerleri içerir.
● Her bir satýr birbirinden farklýdýr.
● Satýrlarýn sýrasý önemsizdir.
● Sütunlarýn sýrasý önemsizdir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03025.htm [24.11.2006 21:26:33]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03030.htm

3.2.2 Veri Tabaný Þemasý

Veri tabanýnýn mantýksal tasarýmýna “veri tabaný þemasý” adý verilir. Tablolar ve onlarýn nitelikleri; veri tabaný
þemasýný oluþturur. Veri tabaný þemalarýný iki ana grup altýnda ortaya koymak mümkündür.

! Fiziksel ve Kavramsal Þema düðmelerine týkladýðýnýzda onlar hakkýnda bilgi alabilirsiniz.

Veri tabaný þemasý veya bir baþka deyiþle kavramsal þema tasarlandýktan sonra, her bir uygulama için alt-þemalar
hazýrlanýr. Örneðin, muhasebe uygulamasý bir alt þemadýr. Çünkü bu uygulama veri tabanýnýn tümü ile ilgilenmez.

Alt þema, veri tabaný þemasýnýn herhangi bir uygulama programý tarafýndan gereksinim duyulan alt-düzey
mantýksal görünümüdür. Bir uygulama programýnýn veri tabanýnýn her noktasýna eriþmesi gerekmez. Çoðunlukla kendisi ile
ilgili bölümlere yani alt-þemaya ulaþmasý yeterlidir. Örneðin, firmanýn satýþlarla ilgili alt-þemasý, ürünler ve müþterilerle
ilgili verileri kapsayacaktýr. Bu uygulama, veri tabanýnýn diðer kaynaklarý ile ilgilenmez.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03030.htm [24.11.2006 21:26:33]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03035.htm

3.2.3 Veri Tabaný Örneði

Veri tabanlarý, zaman içinde veri eklemeleri ya da veri silinmesi gibi iþlemlere tabi tutulurlar. Bu iþlemler sonucunda veri
tabaný sürekli olarak deðiþime uðrar. Ancak veri tabanýnýn herhangi bir andaki durumu önem taþýr. Veri tabanýnýn herhangi
bir andaki durumuna “Veri Tabaný Örneði” (database instance) adý verilir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03035.htm [24.11.2006 21:26:34]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03040.htm

3.3 Veri Tabaný Bütünlüðü

Veri tabanýnýn doðru ve tutarlý biçimde çalýþmasý ve iþlemleri yerine getirmesi gerekir. Verinin doðru ve tutarlý olmasýna
"veri bütünlüðü" denir. Veri bütünlüðünün saðlanmasý sonucunda, veri tabanýnýn eksik, yanlýþ, tutarsýz ve çeliþkili
olmamasý saðlanýr.

Veri tabanýnda veri bütünlüðünü saðlamak için birçok yol bulunmaktadýr. Bunlardan en önemlisi,
“bütünlük sýnýrlamalarý” (integrity constraints) adýný almaktadýr. Bütünlük sýnýrlamalarý, veri tabaný yönetim sistemi
veya uygulama programlarý tarafýndan tanýmlanýr. Sözü edilen sýnýrlamalar; kullanýcý tarafýndan yapýlmasý gereken
ekleme, silme ve güncelleþtirme iþlemlerinden önce bir denetim yapýlmasýna neden olur. Bu denetim sonucunda,
sadece sýnýrlamalara uyan iþlemlerin yapýlmasýna izin verilir. Diðerleri reddedilir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03040.htm [24.11.2006 21:26:34]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03045.htm

3.3.1 Anahtar Sýnýrlamalarý

Bütünlük sýnýrlamalarýnýn saðlanmasýnda anahtarlar önemli rol oynar. Anahtar türü belirlenerek, bu sýnýrlamalarýn veri
tabaný yönetim sistemi tarafýndan otomatik olarak yapýlmasý saðlanýr. Söz konusu anahtarlar:

● Birincil anahtar (Primary key)


● Yabancý anahtar (Foreign key)

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03045.htm [24.11.2006 21:26:35]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03050.htm

3.3.1.1 Birincil Anahtar Sýnýrlamalarý

Ýliþkisel veri tabanlarýnda bir tablonun benzer deðerler içermeyen (unique) bir sütunu ya da birkaç sütunu birlikte
“birincil anahtar” olarak tanýmlanabilir. Birincil anahtar, bir aday anahtardýr ve söz konusu varlýðýn kayýtlarýný en iyi
biçimde karakterize eder. Birincil anahtar tanýmlandýðýnda, þu þekilde bir sýnýrlama konulmuþ olacaktýr; “Birincil anahtar
NULL deðerleri veya birbirinin ayný deðerleri içeremez.” “Boþ” olan deðerlere NULL adýný veriyoruz. Bu sýnýrlamanýn
kontrolünü ise veri tabaný yönetim sistemi yapacaktýr.

Birincil anahtar tek bir sütundan oluþabileceði gibi, birden fazla sütunun birleþiminden de oluþabilir. Bu durumda “bileþik
birinci anahtar” dan söz edilir. Bileþik birincil anahtarýn içerdiði deðer “tek” olmalýdýr. Ancak bileþik anahtarý oluþturan
sütunlarýn her biri çift deðerler içerebilir. Bununla birlikte birincil anahtarý oluþturan sütunlarýn hiçbiri NULL deðer içeremez.

Birincil anahtar sýnýrlamalarý ile ilgili örnek için týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03050.htm [24.11.2006 21:26:35]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03050_1.htm

Örnek

PERSONEL tablosunun No isimli sütunu birincil anahtar olarak tanýmlanmýþtýr. Bu tabloya, þekil üzerinde görüldüðü biçimde
25 numaraya sahip yeni bir PERSONEL eklemeye çalýþýyoruz. Bu isteðimiz gerçekleþmeyecektir. Çünkü, bir tabloda
birincil anahtara sahip bir sütunda birbirinin ayný olan deðerlere yer verilmez.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03050_1.htm [24.11.2006 21:26:35]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03055.htm

3.3.1.2 Dýþ Anahtar Sýnýrlamalarý

Bir dýþ anahtar, bir sütun veya çok sayýdaki sütunlarýn birleþiminden oluþur. Dýþ anahtar, ayný tablo ya da bir baþka tabloda
yer alan bir birincil anahtarla eþleþtirilir.

Dýþ anahtarýn deðeri bir birincil anahtar deðeriyle eþleþmeli veya NULL olmalýdýr. Eðer dýþ anahtar birincil anahtarýn
bir kýsmýný oluþturuyorsa, doðal olarak NULL deðer içeremez.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03055.htm [24.11.2006 21:26:36]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03060.htm

3.3.1.3 Ýliþkisel Bütünlük

Ýki tablo birbirleriyle dýþ anahtar kullanýlarak iliþkilendirildikten sonra, bu sýnýrlamalara dayanarak, iki tablo arasýnda silme
ve güncelleþtirme iþlemleri otomatik olarak yerine getirilebilir.

Örneðin; PERSONEL ve BÖLÜM isimli iki tabloyu göz önüne alalým. PERSONEL tablosunun “Bölüm no” isimli sütunu,
BÖLÜM tablosuna iliþkin bir dýþ anahtar olarak tanýmlanmýþtýr. Bu tür bir taným beraberinde iliþkisel bütünlük
özelliklerini getirecektir. BÖLÜM isimli tablodan bir satýrý, örneðin “10” numaralý bölümü silmek istiyoruz. Bu satýr
silindiðinde, PERSONEL tablosunda da ayný satýr ile ilgili tüm kayýtlar otomatik olarak yok olacaktýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03060.htm [24.11.2006 21:26:36]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03065.htm

3.3.2 Veri Deðerleri Sýnýrlamasý

Tablonun herhangi bir sütununda yer alacak verilerin hangi deðerlere sahip olabileceði konusunda sýnýrlamalar getirilebilir.
Bir deðerin NULL olamayacaðý belirtilerek bir sýnýrlama yapýlabilir.

Bunun yaný sýra, örneðin, PERSONELin þehir içi telefon numarasýnýn 7 haneden fazla olmasýný önlemek için böyle bir
sýnýrlama konulabilir. Benzer biçimde, bir öðrencinin doðduðu ilin trafik kodunun 3 haneden fazla olamayacaðý ve 1 ile
81 rakamlarý arasýnda olabileceði biçiminde sýnýrlamalar getirilebilir.

ÖRNEK:
PERSONEL tablosu için þöyle bir sýnýrlama tanýmlandýðýný varsayalým; “Bölüm numaralarý 1-99 arasýnda, yani iki
haneli olacaktýr.” Bu sýnýrlamaya uymayan bir giriþ yapýlmaya çalýþýldýðýnda, örneðin bölüm numarasý 400 olan bir
kayýt girilmeye çalýþýldýðýnda, sýnýrlama nedeniyle kayýt ekleme iþlemi yerine getirilmeyecektir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03065.htm [24.11.2006 21:26:37]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03070.htm

3.3.3 Ýþletme Kurallarý Sýnýrlamasý

Tablolar üzerinde iþletme kurallarýna dayalý sýnýrlamalar yapýlabilir. Bu sayede, iþletme kurallarýna uygun olarak veri
bütünlüðü söz konusu olabilir. Örneðin, iþletmenin muhasebe bölümünde “programcý” kadrosuna sahip eleman
çalýþtýrmak anlamlý deðildir. Bunu denetlemek gerekecektir. Veri tabanýna bilgi giriþleri esnasýnda, muhasebe bölümüne
yeni PERSONEL kaydý eklemek gerektiðinde, söz konusu iþletme kuralý, uygunsuz veri giriþlerini engelleyecektir. Bu
tür sýnýrlamalar çoðunlukla uygulama programlarý aracýlýðýyla denetlenir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03070.htm [24.11.2006 21:26:37]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03075.htm

3.3.4 Nitelikler Arasý Baðýmlýlýklarýn Kullanýlmasý

Veri bütünlüðünün ve tutarlýlýðýnýn saðlanmasýnda, nitelikler arasýndaki baðýmlýlýklarýn kullanýlmasý yararlý


olabilir. Niteliklerin birbirleriyle olan baðýmlýlýðý göz önüne alýnmadan veri tabaný tasarýmýnýn yapýlmasý sorunlara
neden olacaktýr. Nitelikler arasýndaki fonsiyonel baðýmlýlýklar belirlenerek, þema üzerinde düzenlemeler yapýlýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03075.htm [24.11.2006 21:26:37]


Untitled Document

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT03080.htm [24.11.2006 21:26:38]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04005.htm

ÝLÝÞKÝSEL VERÝ TABANI TASARIMI

Bu bölümde,

● Normalleþtirme,
● Fonksiyonel Baðýmlýlýk,
● Birinci Normal Form ve Sorunlarý,
● Ýkinci Normal Form ve Sorunlarý,
● Üçüncü Normal Form,
● Boyce-Codd Normal Formu,
● Dördüncü Normal Form,
● Beþinci Normal Form,

anlatýlmaktadýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04005.htm [24.11.2006 21:26:38]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04010.htm

Bölüm Hedefi

Bu bölümde,

● Baþlangýç seviyesinde iliþkisel veri tabaný tasarýmýný,


● Veri tabaný tasarýmýnda karþýlaþýlan sorunlarý,
● Bu sorunlarýn çözülmesi için normal formlarýn
kullanýlmasý gerektiðini,
● Normal formlarýn neler olduðunu,
● Normal formlarýn hangi sorunlarý çözümlediðini

öðreneceksiniz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04010.htm [24.11.2006 21:26:38]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04015.htm

4.1 Normalleþtirme

Ýliþkisel veri tabanýnýn tasarlanmasý aþamasýnda, verinin tekrarlanmasýný, veri kaybýný veya veri yetersizliðini önlemek
için normalleþtirme iþlemi uygulanýr. Normalleþtirme teorisi normal form kavramýna dayanýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04015.htm [24.11.2006 21:26:39]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04020.htm

4.2 Fonksiyonel Baðýmlýlýk

R bir iliþki þemasý olsun. X ve Y niteliklerinin R'nin iki alt kümesi olduðunu varsayalým.

Eðer X nitelikler kümesinin deðerleri Y nitelikler kümesinin deðerlerini belirliyorsa; Y, X 'e fonksiyonel baðýmlýdýr denir.
O halde; R iliþkisinin Y niteliði, R'nin X niteliðine iliþkisel olarak baðýmlýdýr. X 'in her bir deðeri
Y'nin bir deðerine
karþýlýk geliyorsa da fonksiyonel baðýmlýlýktan söz edilir. Bu iþlevsel baðýmlýlýk,

biçiminde ifade edilir. Eðer bu baðýntý geçerli ise ve X'den bir nitelik çýkarýldýðý halde bu baðýmlýlýk hala geçerli
oluyorsa; burada kýsmi baðýmlýlýk söz konusudur.

Fonksiyonel baðýmlýlýðý bir örnek ile ortaya koymak istiyoruz.

Örnek

Bir þirketin müþterilerine partiler biçiminde ürün gönderdiðini varsayalým. Her bir müþteri ayrý bir ilde yer almaktadýr. Bir
þehir birden fazla müþteri içerebilir. Her bir þehir "þehir kodu" na sahiptir. Her bir müþteriye birden fazla parti ürün
gönderebilir. Bu bilgileri saklamak için bir iliþkisel tablo yaratýldýðýný varsayalým. Bu tablonun adý DAÐITIM olsun. Söz
konusu DAÐITIM þemasý þu þekilde gösterilebilir;

DAÐITIM (m#, þehir_kodu, þehir, p#, miktar)

Burada m#, þehir_kodu ve þehir alanlarý müþteri bilgilerini, p# ve miktar ise daðýtým iþlemi bilgilerini oluþturmaktadýr.
file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04020.htm (1 of 2) [24.11.2006 21:26:40]
file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04020.htm

Bir müþteriye birden fazla parti ürün gönderilebilir.

Verinin tekrarlý olmasýný önlemek için m# ve p# birleþik anahtar olarak tanýmlanmýþtýr. Bu verilere dayanarak
fonksiyonel baðýmlýlýklarý þu þekilde ifade edebiliriz:

m#®þehir_kodu,þehir
þehir®þehir_kodu
(m#,p#)®miktar

Burada iki türlü baðýmlýlýk tanýmlanmýþtýr. Birinci ve üçüncüsü anahtarlara göre baðýmlýlýklarý ortaya koymaktadýr.
Ýkinci baðýmlýlýk ise, anahtara baðýmlý olmayan, geçiþli baðýmlýlýklardýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04020.htm (2 of 2) [24.11.2006 21:26:40]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04025.htm

4.3 Birinci Normal Form

Aþaðýdaki tablo birinci normal form olarak tanýmlanýr. Ýliþkisel veri tabaný modelinin temel kuralýdýr. Bütün niteliklerin aldýðý
deðerler atomik olmak zorundadýr.

Birinci formdaki bir tablo, belirli bazý alanlarda tekrarlý verilere sahiptir. Örneðin; sehir kodu ve þehir verileri her müþteri için
tekrarlýdýr. Bu tekrarlar güncelleme sorunlarýna yol açacaktýr. Ayrýca bu formda bilgi giriþi ve silme iþlemlerinde sorunlara neden
olacaktýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04025.htm [24.11.2006 21:26:40]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04030.htm

4.3.1 Birinci Normal Formun Sorunlarý

Birinci normal formda bazý sorunlarla karþýlaþabiliriz. Bu sorunlar yandaki animasyonda verilmiþtir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04030.htm [24.11.2006 21:26:40]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04035.htm

4.3.1.1 Satýr Ekleme Sorunu

Bir baþka þehirdeki, örneðin "ÝZMÝR" deki müþterinin m#, þehir_kodu ve þehir bilgilerinin girilebilmesi için; mutlaka bir
daðýtým iþleminin gerçekleþtirilmesi gerekir. Ekleme iþleminin yapýlabilmesi için, bu müþteriye iliþkin bir daðýtým iþleminin
yapýlmýþ olmasý ve p# ile miktar deðerlerinin belirlenmiþ olmasý gerekir. Bu deðerler olmadan kayýt ekleme iþlemi yapýlamaz.

! "Ekle" düðmesine týklayarak yeni satýr eklemeyi deneyiniz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04035.htm [24.11.2006 21:26:41]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04040.htm

4.3.1.2 Satýr Silme Sorunu

Bir daðýtým iþleminin iptal edilerek ilgili kaydýn silinmeye çalýþýldýðýný varsayalým. Bir satýr silindiðinde, sadece daðýtým
ve miktarý deðil, müþteri hakkýndaki diðer bilgiler de yok olacaktýr. Örneðin, M3 müþterisi ile ilgili satýr silindiðinde, müþterinin
þehir_kodu ve þehir bilgileri de yok olacaktýr.

! Satýr silmek için "Satýr Sil" düðmesine týklayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04040.htm [24.11.2006 21:26:41]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04045.htm

4.3.1.3 Güncelleme Sorunu

M1 müþterisinin yeri ÝSTANBUL'dan ANKARA'ya taþýnýrsa, bu yeni bilgi nedeniyle tablo içinde M1'e ait beþ satýrýn
güncelleþtirilmesi gerekecektir. Eðer tablo çok büyük ise, sadece bir müþteri ile ilgili bu tür küçük bir deðiþiklik belki de binlerce
kaydýn güncelleþtirilmesi sorununu yaratacaktýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04045.htm [24.11.2006 21:26:41]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04050.htm

4.4 Ýkinci Normal Form

Birinci normal formun, veri tabaný tasarýmý esnasýnda bazý sorunlara neden olduðunu öðrendik. Bu sorunlardan bir kýsmýný
çözmek için birinci normal formdaki tablolar, baþka normal formlara dönüþtürülür.

Tablolarýn sütunlarý arasýndaki fonksiyonel baðýmlýlýktan yararlanarak, 1NF (birinci normal form) tablolarýnýn birden fazla
tabloya dönüþtürülmesi sonucunda; ikinci normal forma (2NF) ulaþýlýr.

Eðer bir iliþki þemasýndaki birincil anahtar olmayan bir nitelik, R'nin herhangi bir anahtar niteliðine kýsmi fonksiyonel olarak
baðýmlý deðilse (yani tam fonksiyonel baðýmlý ise), bu iliþki ikinci normal formdadýr.

Ýkinci normal formda iliþkisel tablonun her bir anahtar olmayan sütunu, birincil anahtara tam fonksiyonel baðýmlýdýr. Bu;
anahtar olmayan her kolon, birincil anahtara baðýmlý olmalýdýr demektir. DAÐITIM tablosu birinci normal formdadýr. Çünkü,
þehir_kodu ve þehir sütunlarý (m#, p#) birleþik anahtarýnýn sadece m# sütunu üzerinde fonksiyonel baðýmlýdýr.

Ýkinci normal form, kendisi anahtar olmayan tüm sütunlarýn anahtara baðlanarak yeni tablolara ayrýþtýrýlmasý ile oluþturulur.

Örnek; DAÐITIM isimli tabloda m# ve p# anahtarlarý göz önüne alýnarak, bu tablo iki ayrý tabloya dönüþtürülebilir. Bu tablodaki
fonksiyonel baðýmlýlýklar þu þekilde ifade edilebilir:

m# -> þehir_kodu, þehir


þehir -> þehir_kodu
(m#,p#) -> miktar

Bu fonksiyonel iliþkilerden birincisi ve üçüncüsü, anahtarlara fonksiyonel baðlý olarak tanýmlanmýþtýr. Bu tanýmlar 2NF formunun
yapýsýný belirler. 2NF durumunda DAÐITIM tablosu ÞEHÝRLER ve MÝKTARLAR isimli iki tabloya dönüþür.

DAÐITIM(m#, þehir_kodu, þehir, p#, miktar)

ÞEHÝRLER(m#, þehir_kodu, þehir)


MÝKTARLAR(m#, p#, miktar)

Bu tablolarýn görünümü aþaðýdaki animasyonda canlandýrýlmýþtýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04050.htm (1 of 2) [24.11.2006 21:26:42]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04050.htm

! Ýkinci normal form tablolarýný oluþturmak için aþaðý yöndeki oka týklayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04050.htm (2 of 2) [24.11.2006 21:26:42]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04055.htm

4.4.1 Ýkinci Normal Formun Sorunlarý

Ýkinci normal formda bazý sorunlarla karþýlaþabiliriz. Bu sorunlar yandaki animasyonda verilmiþtir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04055.htm [24.11.2006 21:26:42]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04060.htm

4.4.1.1 Satýr Ekleme Sorunu

ÞEHIRLER isimli tabloya yeni bir müþteri kayýtý girilmediði sürece, yeni bir þehir kodu ve þehir adý girilmesine olanak yoktur.
Örneðin bu tabloya, 61 þehir koduna sahip TRABZON ilini eklemek gerektiðinde bir sorunla karþýlaþýlacaktýr. Bu ili tabloya dahi
etmek için, bu ilde yerleþmiþ bir müþteriye ihtiyaç vardýr. Böyle bir müþteri olmadýðý sürece þehir ile ilgili bu tür bilgiler tabloya
eklenemez.

! Yeni satýr eklemek için "Ekle" düðmesine týklayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04060.htm [24.11.2006 21:26:42]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04065.htm

4.4.1.2 Satýr Silme Sorunu

Tablodan bir müþteri silindiðinde, þehir kodu ve þehir adý bilgileri de yok olacaktýr. Örneðin, ÞEHÝRLER tablosundan M5
müþterisi silindiðinde, o müþterinin yerleþtiði ÝZMÝR iline iliþkin veriler de tablodan yok olur.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04065.htm [24.11.2006 21:26:43]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04070.htm

4.5 Üçüncü Normal Form

R'deki herhangi bir anahtar içinde yer almayan nitelik, R'nin herhangi bir niteliðine geçiþli fonksiyonel baðýmlý deðil ve ayrýca 2NF
özelliklerine sahip ise; bu iliþkinin üçüncü normal formda (3NF) olduðu söylenir.

Ýkinci normal formda sadece anahtarlara iliþkin fonksiyonel baðýmlýlýklar kullanýlmýþtý. Bunun dýþýndaki geçiþli baðýmlýlýklar
da tablolara dönüþtürülerek, üçüncü normal form elde edilir. Örneðimizdeki fonksiyonel baðýmlýlýklarý þu þekilde tanýmlamýþtýk;

m# -> þehir_kodu, þehir


þehir -> þehir_kodu
(m#,p#) ->miktar

Bu durumda, bir anahtara baðlý olmayan,

þehir -> þehir_kodu

geçiþli baðýntýsý da ayrý bir tabloya dönüþtürülerek, 3NF'deki aþaðýdaki tablo tanýmlarýna ulaþýlýr;

MÜÞTERÝ_ÞEHÝR(m#, þehir)
ÞEHÝR_KOD(þehir_kodu, þehir)
MÝKTARLAR(m#, p#, miktar)

Tablolar bu tanýmlara göre yeniden düzenlenir.

! Üçüncü normal form tablolarýný oluþturmak için aþaðý yöndeki oka týklayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04070.htm [24.11.2006 21:26:43]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04075.htm

4.6 Boyce-Codd Normal Formu

2NF, 3F durumunda olup geçiþli baðýmlýlýk içermeyen bir iliþkidir. Kendisi anahtar olmayan özellikler, anahtara fonksiyonel olarak
baðlý bulunmamaktadýr.

3NF'da da bazý sorunlarla karþýlaþýlabilir. Bu sorunlarý önlemek için Boyce-Codd normal formu (BCNF) kullanýlýr.

Örnek olarak aþaðýdaki iliþkiyi göz önüne alalým;

ÖÐRENCÝ(öðrenci_no, bölüm, öðretim_üyesi)

Burada birincil anahtar; (öðrenci_no, bölüm) olarak belirlenmiþtir. Aday anahtar ise; (öðrenci_no, öðretim
üyesi) biçimindedir. Fonksiyonel baðýntý ise þu þekilde ifade edilebilir;

Öðretim_üyesi -> bölüm

Þekil üzerindeki iliþki 3NF durumuda olup bazý sorunlara sahiptir. Örneðin, bir öðrenci birden çok bölüme yazýlabildiði gibi; bir
bölümde birden fazla öðretim üyesi de yer alabilmektedir. Bu durumda, öðrenci birden çok bölüme yazýlabildiði için, öðrenci_no
anahtarý bölümü ve öðretim üyesini belirleyememektedir.

Burada öðrenci_no ile bölüm anahtarlarý birlikte, öðretim üyesi niteliðini; öðrenci_no ile öðretim_üyesi anahtarlarý da bölüm
niteliðini belirlemektedir. Bu kombinasyonlarýn her ikisi de anahtar olabilir.

ÖÐRENCÝ þemasý taným olarak, birinci normal formdadýr. Anahtarsýz nitelikler, bir anahtara baðlý olduðu için de ikinci normal
formdadýr. Ayrýca geçiþli baðýmlýlýk bulunmadýðý için, üçüncü normal formdadýr.

Buna raðmen yukarýdaki þema yine bazý sorunlara sahiptir. Örneðin, 98 numaralý öðrencinin kaydýnýn silinmesi durumunda, B.
ÖZKAN 'a ait olan bilgi de yok olacaktýr. Ayný þekilde, yeni bir öðrenci EKONOMÝ bölümüne yazýlýncaya kadar bu bölüm tablo
üzerinde görülmeyecektir.

Bu sorunlarý önlemek için, Boyce-Codd normal formu elde edilmeye çalýþýlýr. BCNF, her belirleyicinin bir anahtar oluþu halidir.
ÖÐRENCÝ þemasýnda öðretim_üyesi bir aday anahtar deðil, bir belirleyici olduðu için, bu iliþki BCNF'da bulunmamaktadýr.
ÖÐRENCÝ þemasý aþaðýda görüldüðü biçimde iki iliþkiye ayrýlmasý halinde, BCNF oluþturulur ve yukarýda sayýlan sorunlara son
verilmiþ olur.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04075.htm (1 of 2) [24.11.2006 21:26:44]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04075.htm

! Boyce-Codd normal formu tablosunu oluþturmak için aþaðý yöndeki oka týklayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04075.htm (2 of 2) [24.11.2006 21:26:44]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04080.htm

4.7 Dördüncü Normal Form

Bazý durumlarda BCNF'daki bir iliþkide de sorunlar görülebilmektedir. Örnek olarak aþaðýdaki tabloyu göz önüne alalým:

ÖÐRENCÝ(öðrenci_no, bölüm, spor)

Bu iliþki; deðerlerin atomik oluþu, anahtarlarýnýn bulunuþu, geçiþli belirleyicilerinin olmamasý ve belirleyicilerinin anahtar
oluþu özellikleri nedeniyle 1NF, 2NF, 3NF ve BCNF koþullarýna uymaktadýr. Buna karþýlýk, yine de bazý sorunlarý bulunmaktadýr.

Burada bir öðrenci, birden çok sayýda bölüme ve spor etkinliðine sahip olabilmektedir. Bu nedenle, öðrenci_no ile bölüm ve
öðrenci_no ile spor arasýndaki iliþkiler birer fonksiyonel baðýntý deðil; çok deðerli baðýmlýlýk halindedir. Çok deðerli
baðýmlýlýklar -> -> simgesi ile ifade edilir .

Bir iliþki þemasýnda bir A anahtar olmak üzere, bütün fonksiyonel baðýmlýlýklar için; A -> X ve bütün çok deðerli baðýmlýlýklar
için; A -> -> Y biçiminde ise, dördüncü normal form söz konusudur.

Çoklu baðýntýlarda ekleme ve silme esnasýnda sorunlarla karþýlaþýlabilir. Örneðin, MATEMATÝK ve MUHASEBE bölümleri
ile KAYAK ve TENÝS spor etkinliklerine katýlan 65 numaralý öðrenci için 4 ayrý kayýt yapýlmaktadýr. Bu öðrencinin FUTBOL
etkinliðine katýlabilmesi için ayrýca 2 kayýt daha eklenmesi söz konusudur. Böylece çok sayýda yineleme sorunu ortaya
çýkmaktadýr. Bu sorunu önlemek için, yukarýda verilen iliþki iki ayrý iliþkiye ayrýlarak, çoklu baðýmlýlýk durumu eklenmekte ve
dördüncü normal form (4NF) oluþturulmaktadýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04080.htm (1 of 2) [24.11.2006 21:26:44]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04080.htm

! Dördüncü normal form tablolarýný oluþturmak için aþaðý yöndeki oka týklayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04080.htm (2 of 2) [24.11.2006 21:26:44]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04085.htm

4.8 Beþinci Normal Form

Bir iliþkinin iki veya daha çok sayýda


iliþkiye ayrýlmasý halinde, bilgi kaybýna
düþülmemesi önem taþýmaktadýr.
Genellikle 4NF durumunda bu koþul
saðlanmaktadýr. Ancak yine de iliþkinin,
ikiden çok sayýda iliþkiye ayrýlmasý
halinde, veri kaybý söz konusu
olabilmektedir. Bu sakýnca 5NF kurularak
giderilebilir.

Beþinci normal form; iliþki içerisindeki her birleþik baðýntýnýn, bu iliþkideki aday anahtarlardan
oluþturulmasý ile saðlanmaktadýr. Örnek olarak, aþaðýdaki þemayý göz önüne alalým:

ÖDÜNÇ (þube_adý, toplam_mevduat, þube_þehri, kredi_no, müþteri_adý, miktar)

Bu þema; silme, ekleme ve deðiþtirme iþlemlerinde kaydýn tamamýnýn yazýlmasýný gerektirdiði için,
iyi bir veri tabaný þemasý olarak deðerlendirilmez. Bu þema, önce iki ayrý þemaya bölünür.

ÞUBE (þube_adý, toplam_mevduat, þube_þehri)


KREDÝ (þube_adý,kredi_no, müþteri_adý, miktar)

KREDÝ þemasý da aþaðýda belirtildiði biçimde ikiye ayrýlýr:

KREDI_MÝKTAR (þube_adý, kredi_no, miktar)


MÜÞTERÝ_KREDÝ (kredi_no,müþteri_adý)

Böylece kayýpsýz ayrýþtýrma iþlemi gerçekleþtirilmiþ olur. Burada ortak özellik, kredi_no olup;

Kredi_no -> miktar, þube_adý

baðýntýsý kurulmaktadýr. Böylece KREDÝ þemasý,

KREDÝ1 (kredi_no, þube_adý)


KREDÝ2 (kredi_no, müþteri_adý)
KREDÝ3 (kredi_no, miktar)

biçiminde üç ayrý þemaya ayrýlarak 5NF oluþmaktadýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04085.htm (1 of 2) [24.11.2006 21:26:45]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04085.htm

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04085.htm (2 of 2) [24.11.2006 21:26:45]


Untitled Document

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT04090.htm [24.11.2006 21:26:45]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05005.htm

ÝLÝÞKÝSEL CEBÝR

Bu bölümde,

● Ýliþkisel cebrin temel iþlemleri,


● Kayýtlar arasýnda seçim,
● Sütunlarýn seçimi,
● Kartezyen çarpým,
● Birleþtirme iþlemi,
● Kesiþme iþlemi,
● Fark,
● Doðal birleþtirme,
● Bölme iþlemi,

anlatýlmaktadýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05005.htm [24.11.2006 21:26:45]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05010.htm

Bölüm Hedefi

Bu bölümde,

● Ýliþkisel cebir kavramýný,

● Ýliþkisel cebrin temel iþlemlerinden

1. Seçimi,
2. Atma Ýþlemini,
3. Çarpmayý,
4. Birleþtirmeyi,
5. Kesiþmeyi,
6. Farký,
7. Doðal birleþtirmeyi,
8. Bölmeyi,

öðreneceksiniz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05010.htm [24.11.2006 21:26:46]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05015.htm

5.1 Ýliþkisel Cebir Kavramý

Ýliþkisel cebir (relational algebra), bir iliþkisel sorgulama dilidir. Bir veya iki iliþkiyi girdi olarak alýp sonuç olarak yeni bir
iliþki üreten bir dizi iþlemden oluþur. Ýliþkisel cebir, bir veri tabaný sorgulama dilidir.

Ancak bu sorgulamalar sadece biçimsel olarak yapýlýr. Ýliþkisel Cebrin sorgulama dili için bir yorumlayýcý ya da bir
derleyici yoktur. Bu açýdan, sonraki bölümlerde inceleyeceðimiz SQL (Standart Sorgulama Dili)'den farklýdýr.

Ýliþkisel cebrin temel iþlemlerini yanda görebilirsiniz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05015.htm [24.11.2006 21:26:46]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05020.htm

5.1.1 Seçim

Belirli bir iliþkiden, bazý sýralarý (kayýtlarý) seçerek ortaya koymaya seçme iþlemi denir. Bu iþlem iþareti ile gösterilir ve
þu þekilde tanýmlanýr:

Seçim iþleminde, bir seçim kriteri kullanýlýr. Seçim kriteri bir eþitlik biçiminde ortaya konabilir. Bu tür bir iþlemde
"=" karþýlaþtýrma iþleci yerine " " iþleçlerinden biri de kullanýlabilir.

Ayrýca mantýksal iþleçlere de yer vermek mümkündür. "Ve" için " "; "veya" için " " iþleçleri kullanýlabilir.

! Seçim iþleminin nasýl yapýldýðýný görmek için "Seç" düðmesine týklayýnýz.

Örnek

MÜÞTERÝ iliþkisini (tablosunu) göz önüne alalým. "Beþiktaþ" ilçesindeki müþterileri seçmek için aþaðýda belirtildiði biçimde
bir sorgu düzenlenebilir;

Bu sorgu tablodan iki kayýdýn seçilmesine neden olur. Sorgulamayý þu þekilde anime edebiliriz :
file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05020.htm (1 of 3) [24.11.2006 21:26:47]
file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05020.htm

Örnek

MÜÞTERÝ tablosunu yeniden göz önüne alalým. Ýlçesi "Beþiktaþ" ve bakiye miktarý 100'den büyük olan müþterileri
seçmek istiyoruz. Amacýmýza uygun sorgu þu þekilde tanýmlanabilir;

Bu sorgu, tablodan bir kayýdýn seçilmesine neden olur. Sorgulamayý þu þekilde göstebiliriz;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05020.htm (2 of 3) [24.11.2006 21:26:47]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05020.htm

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05020.htm (3 of 3) [24.11.2006 21:26:47]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05025.htm

5.1.2 Atma Ýþlemi

Belirli bir iliþkiden bazý sütunlarý atmak suretiyle yapýlan seçim iþlemidir. Bu iþlem iþareti ile gösterilir. Atma
(projection) adý verilen bu iþlem þu þekilde tanýmlanýr;

! Seçim iþleminin nasýl yapýldýðýný görmek için "Seç" düðmesine týklayýnýz.

Örnek

MÜÞTERÝ tablosunda yer alan kayýtlara bir sorgu uygulayarak, sadece müþteri adý ve þehir bilgisi elde edilmek istenmektedir.
Söz konusu sorgu iliþkisel cebir ifadeleriyle þu þekilde ortaya konulabilir;

Sorgulamayý þu þekilde gösterebiliriz;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05025.htm (1 of 2) [24.11.2006 21:26:47]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05025.htm

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05025.htm (2 of 2) [24.11.2006 21:26:47]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05030.htm

5.1.3 Çarpma

Belirli bir iliþkiden mümkün olabilecek tüm çiftleri elde ederek tek bir iliþki biçiminde göstermek için
kartezyen çarpým oluþturulur. Kartezyen çarpým iþareti ile gösterilir. Kartezyen çarpým þu þekilde
ifade edilir;

! Kartezyen çarpým iþleminin nasýl yapýldýðýný görmek için "Çarp" düðmesine týklayýnýz.

Örnek

Aþaðýdaki ÖÐRENCÝ ve DERSLER iliþkilerini göz önüne alalým. Ýki tablonun kartezyen çarpýmý, her iki
tablonun tüm satýrlarýnýn birbirleriyle eþlenmesi sonucunda elde edilir. Sonuç, mümkün olabilecek tüm
eþleþmeleri kapsayacaktýr. Söz konusu çarpým þu þekilde ifade edilir;

Sorgulamayý þu þekilde gösterebiliriz;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05030.htm (1 of 4) [24.11.2006 21:26:48]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05030.htm

Örnek

ÖÐRENCÝ ve DERSLER iliþkilerini göz önüne alalým. "Ýktisat" bölümünde okuyan ve tüm dersleri alan
öðrencileri bulmak için;

sorgusu tanýmlanabilir. Bu sorgu iþleminde yer alan

ifadesi, ÖÐRENCÝ ve DERSLER tablolarýndan elde edilebilecek tüm ikilileri ifade etmektedir.

biçimindeki bir taným ise, bu sonuç

üzerinden bölümü "Ýktisat" olan satýrlarý seçmektedir. Sorgulamayý þu þekilde gösterebiliriz;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05030.htm (2 of 4) [24.11.2006 21:26:48]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05030.htm

Örnek

"Ýktisat" bölümünde okuyan ve hem "Matematik" hem de "Ýstatistik" dersi alan öðrenciler
listelenecektir. Ancak bunlara iliþkin olarak sadece ders ve öðrenci adý elde edilecektir. Amacýmýza uygun
sorgu þu þekilde olabilir;

Sorgulamayý þu þekilde gösterebiliriz;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05030.htm (3 of 4) [24.11.2006 21:26:48]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05030.htm

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05030.htm (4 of 4) [24.11.2006 21:26:48]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05035.htm

5.1.4 Birleþtirme

Ýki iliþkiden birinde veya her ikisinde birden bulunan kayýtlarýn

seçilmesi için yapýlan bir iþlemdir. Bu iþlem simgesi ile


gösterilmektedir.

Örnek

Aþaðýdaki iliþkileri göz önüne alalým. Bankanýn "Beþiktaþ" þubesinde mevduat ve/veya kredi hesabý bulunan
kiþileri seçmek ve sadece isimlerini sunmak için þöyle bir ifade tanýmlanabilir;

Sorgulamayý þu þekilde gösterebiliriz;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05035.htm (1 of 2) [24.11.2006 21:26:48]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05035.htm

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05035.htm (2 of 2) [24.11.2006 21:26:48]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05040.htm

5.1.5 Kesiþme

Ýki iliþkide de bulunan kayýtlarýn belirlenmesi için kesiþme iþlemi

uygulanýr. Bu iþlem iþareti ile gösterilir.

Örnek

Aþaðýdaki iliþkileri göz önüne alarak, bankanýn "Beþiktaþ" þubesinde hem mevduat hem de kredi hesabý olan
müþterileri bulmak için aþaðýdaki sorgu düzenlenebilir;

Sorgulamayý þu þekilde gösterebiliriz;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05040.htm (1 of 2) [24.11.2006 21:26:49]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05040.htm

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05040.htm (2 of 2) [24.11.2006 21:26:49]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05045.htm

5.1.6 Fark

Ýki iliþkiden birinde bulunup diðerinde bulunmayan kayýtlarýn


bulunmasý iþlemidir. Fark iþlemi (-) iþareti ile gösterilir.

Örnek

Aþaðýdaki iliþkileri göz önüne alarak, bankanýn "Ulus" þubesinde mevduatý olup kredisi olmayan
müþterilerin isimlerini bulmak için þu þekilde bir iþlem tanýmlanýr;

Sorgulamayý þu þekilde gösterebiliriz;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05045.htm (1 of 2) [24.11.2006 21:26:49]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05045.htm

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05045.htm (2 of 2) [24.11.2006 21:26:49]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05050.htm

5.1.7. Doðal Birleþtirme

(A,B) ve (B,C) niteliklerine sahip iki ayrý iliþkinin, (A,B,C) niteliklerine sahip tek bir iliþki haline
dönüþtürülmesine Doðal Birleþtirme denir. Bu iþlem iþareti ile gösterilir.

! Doðal Birleþtirme iþleminin nasýl yapýldýðýný görmek için "Doðal Birleþtirme" düðmesine týklayýnýz.

Örnek

Aþaðýdaki iliþkileri göz önüne alarak, kredi hesabý olan ve ayný ilçede oturan tüm müþterilerin isimlerini
bulmak için þu þekilde bir ifade tanýmlanýr;

Bu taným sonucunda KREDÝ ve MÜÞTERÝ tablolarýnda yer alan adý ve ilçe nitelikleri karþýlaþtýrýlýr ve
birbirleriyle eþleþen kayýtlar birleþtirilir. Sorgulamayý þu þekilde gösterebiliriz;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05050.htm (1 of 2) [24.11.2006 21:26:50]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05050.htm

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05050.htm (2 of 2) [24.11.2006 21:26:50]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05055.htm

5.1.8 Bölme

Ýkili ve birli; iki ayrý iliþkiyi karþýlaþtýrarak, birli olan iliþkiye eþ olan ikinci iliþkinin deðerlerinden oluþan,
yeni bir iliþki oluþturulabilir. Bu tür bir iþlem bölme iþlemidir ve (:) iþareti ile gösterilir.

! Bölme iþleminin nasýl yapýldýðýný görmek için "Bölme" düðmesine týklayýnýz.

Örnek

Bir bankanýn ÝSTANBUL ilindeki bütün þubelerinde mevduat hesabý olan müþterilerini öðrenmek
istiyoruz.

Adým 1:

Þube isimleri ÞUBE iliþkisi ile tanýmlýdýr. Önce ÝSTANBUL 'da yer alan tüm þubeleri elde edelim.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05055.htm (1 of 3) [24.11.2006 21:26:50]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05055.htm

Adým 2:

Bu kez aþaðýdaki MEVDUAT tablosunu göz önüne alalým. MEVDUAT tablosundan tüm müþterilerin adýný
ve þubesini elde etmek için aþaðýda belirtilen iþlem uygulanýr;

Adým 3:

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05055.htm (2 of 3) [24.11.2006 21:26:50]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05055.htm

Bölme iþlemi biçiminde tanýmlanýr. Bu iþlem sonucunda aþaðýda belirtilen sonuç elde edilir. Burada
Adým 1'deki þube isimlerinin Adým 2'dekilerle karþýlaþtýrýldýðý ve eþleþen kayýtlarýn elde edildiði
anlaþýlmaktadýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05055.htm (3 of 3) [24.11.2006 21:26:50]


Untitled Document

Testin nasýl cevaplanacaðýný görmek için buraya týklayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT05060.htm [24.11.2006 21:26:50]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06005.htm

SQL YAPISAL SORGULAMA DÝLÝ

Bu bölümde, SQL yapýsal programlama dilini


öðrenmeye baþlayacaðýz. SQL bir sorgulama dilidir.
SQL'in kendine özgü deyimleri ve kurallarý vardýr.
Hemen hemen tüm iliþkisel veri tabaný yönetim
sistemlerinin ortak dili olarak kabul edilmiþtir.

Verileri sorgulamak için SQL kullanan baþlýca veri


tabaný yönetim sistemleri þunlardýr:

● Oracle
● Sysbase
● Microsoft SQL Server
● DB2
● Informix
● MySQL
● Microsoft Acces

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06005.htm [24.11.2006 21:26:51]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06010.htm

Bölüm Hedefi

Bu bölümde SQL'de;

● SELECT deyiminin temel yapýsýný,


● Aritmetik ifadelerin sorgularda kullanýmýný,
● Ayný deðere sahip satýrlarýn denetlenmesini,
● Karþýlaþtýrma iþleçlerini,
● Mantýksal iþleçlerin kullanýmýný,
● Ýþleçlerin iþlem sýrasýný,
● Verinin sýralanmasýný,

öðreneceksiniz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06010.htm [24.11.2006 21:26:51]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06015.htm

6.1. Sorgulama Ýþlemleri

SQL'de sorgulama iþlemleri, SELECT deyimi yardýmýyla yerine getirilir. SELECT deyimi temel olarak üç farklý iþlemi
yerine getirmek için kullanýlýr:

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06015.htm [24.11.2006 21:26:52]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06020.htm

6.1.1. SELECT Deyiminin Yapýsý

SELECT deyimi en basit biçimde þu þekilde ifade edilmektedir;

SELECT [DISTINCT] { * | sütun, ....}


FROM tablo;

Taným içinde bazý SQL anahtar kelimelerine yer verilmektedir. Bu anahtar kelimeler, SQL 'in kendi özel kelimeleridir ve aynen
bu þekilde ifade edilmelidir.

SELECT SQL'in sorgulama deyimidir.

FROM Hangi tablonun sorgulanacaðýný ifade eder.

DISTINCT Çift kayýtlarý önleyen anahtar kelimedir.

Tanýmdaki her bir iþaretin veya farklý gösterimin hangi anlama geldiðini aþaðýdaki tablodan görebilirsiniz.

[] Kullanýlmasý zorunlu olmayan SQL sözcükleri, bu iþaretler arasýnda tanýmlanýr.

Altý çizili ve italik olan bu ifadeler, kullanýcý tarafýndan verilen isimleri ifade etmektedir.
Bunlar SQL sözcüðü deðildir.

Bu biçimde gösterilen ifadeler, birden fazla seçeneðin varlýðýný ve bu seçeneklerden


{..|.. } birinin mutlaka seçilmesi gerektiðini ifade eder. Seçenekler birbirlerinden | iþareti ile
ayrýlmaktadýr.

* Tek bir sütunu deðil, tüm sütunlarý ifade eder.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06020.htm [24.11.2006 21:26:52]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06025.htm

6.1.2. SELECT Yazým Kurallarý

SQL deyimleri düzenlenirken bazý kurallarý ve önerileri göz önünde tutmak gerekmektedir. Aksi takdirde sorgu hata verir
ve çalýþmaz.

SQL sorgu yazým kurallarýný aþaðýdaki animasyonu inceleyerek görebilirsiniz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06025.htm [24.11.2006 21:26:52]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06030.htm

6.1.3 Bir Tablonun Tüm Satýrlarýný Seçmek

Bir tablonun tüm sütunlarýný seçmek söz konusu ise, SELECT deyimi içinde sütun isimleri yerine; * iþareti kullanýlýr.

Örnek:

BÖLÜM isimli tablonun sütunlarý þunlardýr;

Sütun adý Açýklama

Bölüm_no Bölüm numarasýdýr.

Bölüm_adý Bölümün adýdýr.

Konumu Bölümün bulunduðu yerin adýdýr.

Bu tablonun içerdiði tüm verileri görüntülemek istiyoruz. Bunun için aþaðýda belirtilen SELECT deyimi düzenlenir:

SELECT * FROM BÖLÜM;

Bu deyimi, daha izlenebilir olmasýný saðlamak için þu þekilde de yazabiliriz;

SELECT * FROM
BÖLÜM;

Sorgunun nasýl çalýþtýðýný aþaðýda görebilirsiniz.

! Sorguyu çalýþtýrmak için "Çalýþtýr" düðmesine týklayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06030.htm (1 of 2) [24.11.2006 21:26:53]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06030.htm

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06030.htm (2 of 2) [24.11.2006 21:26:53]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06035.htm

6.1.4. Belirli Sütunlarýn Seçilmesi

Tablo içinde belirlenen sütunlarýn elde edilmesi söz konusu ise, SELECT deyimi içinde bu sütun isimlerine yer verilir. Sütun
isimleri virgüllerle birbirlerinden ayrýlýr.

Örnek:

BÖLÜM tablosunun sadece bölüm numaralarýný ve bölüm isimlerini içeren sütunlarýný, yani BÖLÜM_NO ve
BÖLÜM_ADI sütunlarýný seçerek görüntülemek istiyoruz. Amacýmýza uygun SELECT deyimi þu þekilde düzenlenebilir;

SELECT BÖLÜM_NO, BÖLÜM_ADI


FROM BÖLÜM;

Sütun isimleri, tablo isimleriyle birlikte ifade edilebilir. Özellikle birden fazla tablo varsa bu yola baþvurulur. Bunun için,
tablo ismi her bir alanýn baþýna eklenir ve araya bir nokta iþareti konur.

SELECT BÖLÜM.BÖLÜM_NO, BÖLÜM.BÖLÜM_ADI


FROM BÖLÜM;

Sorgunun nasýl çalýþtýðýný aþaðýda görebilirsiniz.

! Sorguyu çalýþtýrmak için "Çalýþtýr" düðmesine týklayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06035.htm (1 of 2) [24.11.2006 21:26:53]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06035.htm

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06035.htm (2 of 2) [24.11.2006 21:26:53]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06040.htm

6.2. Aritmetik ifadeler

Aritmetik ifadeler; sütun isimleri, sabit sayýsal deðerler ve aritmetik iþleçlerden oluþur.

Örneðin, bir tablonun ÜCRET isimli sütunundaki sayýsal deðeri 12 ile çarpmak için,

ÜCRET*12

biçiminde bir ifade tanýmlanabilir. SELECT deyimi içinde bir ifade tanýmlandýðýnda, bu ifade ayrý bir sütun biçiminde
yaratýlmýþ olacaktýr.

Örnek

PERSONEL tablosunun PERSONEL ve ÜCRET isimli iki sütunu listelenecektir. Ayrýca ÜCRET sütununun içerdiði deðere;
1500 deðeri eklenerek (yani ücretlere zam yapýlýyor) ayrý bir sütun elde etmek istiyoruz. Amacýmýza uygun SELECT
deyimi aþaðýda görüldüðü biçimde düzenlenebilir;

SELECT PERSONEL_NO, ADI, ÜCRET+1500


FROM PERSONEL;

! Aritmetik Ýþleçleri ve anlamlarýný


görmek için 'DEVAM' düðmesine Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz
týklayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06040.htm [24.11.2006 21:26:54]


6.2. Aritmetik ifadeler

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06040_1.htm [24.11.2006 21:26:54]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06045.htm

6.2.1. Aritmetik Ýfadelerde Ýþlem Sýrasý

Aritmetik iþleçler, SELECT deyiminin FROM sözcüðü dýþýnda herhangi bir yerinde kullanýlabilir.

Örnek

PERSONEL tablosunun, PERSONEL ve ÜCRET isimli iki sütunu listelenecektir. Burada ÜCRET, aylýk ücret
rakamýný içermektedir. Yýllýk ücrete 500 deðerini eklemek istiyoruz. Söz konusu hesaplamayý saðlayan ifade þu
þekilde olacaktýr;

12*ÜCRET+500

Buna göre * iþlecinin önceliðinden dolayý önce 12 ile ÜCRET çarpýlacak ve bulunan deðere 500 eklenecektir. Amacýmýza
uygun SELECT deyimi þu þekilde olabilir;

SELECT PERSONEL_NO, ADI, 12*ÜCRET+500


FROM PERSONEL;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

Aritmetik Ýfadelerde Ýþlem Sýrasý

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06045.htm [24.11.2006 21:26:54]


6.2.1. Aritmetik Ýfadelerde Ýþlem Sýrasý

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06045_1.htm [24.11.2006 21:26:55]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06050.htm

6.2.2 Aritmetik Ýfadelerde Parantezlerin Kullanýmý

Parantezler, aritmetik ifadeler içinde diðer tüm iþleçlere göre bir önceliðe sahiptir. Önce parantez içindeki iþlemler
gerçekleþtirilir.

Örnek

Önceki kýsýmdaki örnekte 12*ÜCRET+500 biçiminde bir taným yaparak, yýllýk ücrete zam yapmýþtýk. Bu kez aylýk ücrete
500 zam yapmak istiyoruz. Amacýmýza uygun ifade þu þekilde olabilir:

12*(ÜCRET+500)

Bu durumda, ücret sütununun içerdiði deðere 500 eklenir ve bulunan deðer 12 ile çarpýlýr. Amacýmýza uygun SELECT deyimi
þu þekilde olabilir;

SELECT PERSONEL_NO, ADI, 12*(ÜCRET+500)


FROM PERSONEL;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06050.htm [24.11.2006 21:26:55]


6.2.2 Aritmetik Ýfadelerde Parantezlerin Kullanýmý

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06050_1.htm [24.11.2006 21:26:55]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06055.htm

6.2.3 Aritmetik Ýfadelerde NULL Deðerlerin Kullanýmý

NULL Deðer; var olmayan, atanamayan, bilinmeyen bir deðer olarak kabul edilir. NULL Deðer, bir sýfýr ya da boþluk olarak
da deðerlendirilmez. Eðer bir sütun NULL deðerler içeriyorsa, SELECT deyimi çalýþtýrýldýðýnda bu deðerler boþ
olarak görüntülenir.

Örnek

Eðer bir aritmetik ifade içinde NULL deðer içeren bir sütun varsa, ifade ne olursa olsun o satýrlarla ilgili sonuç da NULL olarak
elde edilir. KOMÝSYON isimli sütunun NULL deðerler içerdiði bilinmektedir. O halde;

SELECT ADI, ÜCRET,KOMÝSYON, 12*ÜCRET+KOMÝSYON


FROM PERSONEL;

deyimi çalýþtýrýldýðýnda, tanýmlanan aritmetik ifade her satýr için NULL deðerler üretecektir. NULL ile yapýlan
hesaplamalara dikkat ediniz. Örneðin,

12*7000+NULL ® NULL

olduðu unutulmamalýdýr.

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06055.htm [24.11.2006 21:26:56]


6.2.2 Aritmetik Ýfadelerde NULL Deðerlerin Kullanýmý

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06055_1.htm [24.11.2006 21:26:56]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06060.htm

6.3. Sütunlar Ýçin Takma Ýsimler Kullanýmý

SELECT deyimi çalýþtýrýldýðýnda, elde edilen sonuçlar yine sütunlar biçiminde olacaktýr. Tablonun sütun isimleri,
SELECT deyiminin çalýþmasý sonucu elde edilen listenin sütun baþlýklarý olacaktýr.

Bunun yerine, çýktý sütunlarýna istenilen baþlýklar atanabilir. AS anahtar kelimesi bu amaçla kullanýlýr. Eðer takma isim
birden fazla kelimeden oluþuyorsa týrnak iþaretleri arasýnda belirtilebilir.

Örnek

PERSONEL tablosunun PERSONEL sütunu için ÝSÝM, ücret sütunu için AYLIK_ÜCRET takma isimlerini atayacaðýz.
Ayrýca yýllýk ücreti hesaplayarak bu sütuna da YILLIK_ÜCRET takma ismini vermek istiyoruz. Amacýmýza uygun SELECT
deyimi þu þekilde olabilir;

SELECT ADI AS ÝSÝM, ÜCRET AS AYLIK_ÜCRET,


12*ÜCRET+KOMÝSYON AS YILLIK_ÜCRET
FROM PERSONEL;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06060.htm [24.11.2006 21:26:57]


6.3. Sütunlar Ýçin Takma Ýsimler Kullanýmý

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06060_1.htm [24.11.2006 21:26:57]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06065.htm

6.4. Sütun Ýçeriklerini Birleþtirme

Sütunlarýn içerdikleri deðerleri, birbiriyle ya da bir baþka karakter dizisi ile birleþtirerek yeni deðerler elde edilebilir.
Birleþtirme iþleci olarak (||) simgesi kullanýlabilir. Bu iþlecin kulllanýmý veri tabanlarýnda farklýlýk gösterebilir. Örneðin,
ORACLE veri tabanýnda (||); MS Access veri tabanýnda ise (&) iþleci ayný amaçla kullanýlýr.

Örnek

PERSONEL adý ve görev bilgisini birleþtirerek, iki sütun bilgisi arasýna "-" iþaretini yerleþtirmek ve tek sütun
biçiminde görüntülemek istiyoruz. SELECT deyimini ORACLE veri tabaný için þu þekilde düzenleyebiliriz;

SELECT ADI || '-' || GÖREVÝ AS ADI_GÖREVÝ


FROM PERSONEL;

Ayný amaca SELECT deyimini MS Access veri tabanýnda þu þekilde kullanarak ulaþabiliriz;

SELECT ADI & "-" & GÖREVÝ AS ADI_GÖREVÝ


FROM PERSONEL;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06065.htm [24.11.2006 21:26:57]


6.4. Sütun Ýçeriklerini Birleþtirme

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06065_1.htm [24.11.2006 21:26:58]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06070.htm

6.5. Ayný Deðere Sahip Satýrlar

Bir SELECT deyimi çalýþtýrýldýðýnda, ayný deðerlere sahip satýrlarýn görüntülenmesi engellenemez. Örneðin,

SELECT BÖLÜM_NO
FROM PERSONEL;

deyimi çalýþtýrýldýðýnda, PERSONEL tablosunun BÖLÜM_NO sütunu içerikleri aynen listelenir. Bu sütunun içerdiði
deðerlerin çoðu birbirinin ayný olabilir. Eðer tekrarlý deðerlerin sadece bir tanesinin elde edilmesi söz konusu ise, SELECT
deyimi DISTINCT anahtar kelimesi ile birlikte kullanýlýr.

SELECT DISTINCT BÖLÜM_NO


FROM PERSONEL;

Örnek

PERSONEL tablosunun BÖLÜM_NO sütunundaki verileri tekrarlatmadan listelemek istiyoruz. Bunun için aþaðýda belirtilen
yol izlenir;

SELECT DISTINCT BÖLÜM_NO


FROM PERSONEL;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06070.htm [24.11.2006 21:26:58]


6.5. Ayný Deðere Sahip Satýrlar

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06070_1.htm [24.11.2006 21:26:58]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06075.htm

6.6. Verinin Sýnýrlandýrýlmasý

Veri tabanýndan veriyi alma sýrasýnda, satýrlara bazý kýsýtlamalar koyarak, tablonun tüm satýrlarý yerine bir kýsmý
elde edilebilir.

Tablonun belirli kýsýmlarýný seçmek için WHERE sözcüðü kullanýlýr. Bu sözcük SELECT deyimi içinde aþaðýda
gösterildiði biçimde yer alýr. WHERE sözcüðü içinde tanýmlanan koþul; sütun içindeki deðerleri, literal deðerleri, aritmetik
ifadeleri veya fonksiyonlarý içerebilir.

Örnek

PERSONEL tablosu içinde yer alan PERSONEL arasýnda görevi MEMUR olanlarý seçerek listelemek istiyoruz. Amacýmýza
uygun SELECT deyimi þu þekilde düzenlenebilir;

SELECT ADI,GÖREVÝ,BÖLÜM_NO
FROM PERSONEL
WHERE GÖREVÝ='MEMUR';

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06075.htm [24.11.2006 21:26:59]


6.6. Verinin Sýnýrlandýrýlmasý

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06075_1.htm [24.11.2006 21:26:59]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06080.htm

6.6.1. Karþýlaþtýrma Ýþleçleri

WHERE sözcüðü içinde tanýmlanan kýsýtlama ifadelerinde, yani koþul ifadelerinde çeþitli karþýlaþtýrma iþleçleri kullanýlýr.

Örnek

Ücreti 2500'den daha az ya da eþit olan PERSONELi seçerek listelemek istiyoruz. Amacýmýza uyan SELECT deyimi þu þekildedir;

SELECT ADI,GÖREVÝ,ÜCRET
FROM PERSONEL
WHERE ÜCRET<=2500;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06080.htm [24.11.2006 21:26:59]


6.6.1. Karþýlaþtýrma Ýþleçleri

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06080_1.htm [24.11.2006 21:27:00]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06085.htm

6.6.2. Diðer Karþýlaþtýrma Ýþleçleri

Þu ana kadar öðrendiðimiz karþýlaþtýrma iþleçleri dýþýnda, bazý özel amaçlarla kullanýlabilecek baþka karþýlaþtýrma iþleçleri
de bulunmaktadýr. Aþaðýdaki etkileþimli listeden bu iþleçleri ve anlamlarýný görebilirsiniz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06085.htm [24.11.2006 21:27:00]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06090.htm

6.6.2.1 BETWEEN…AND.. Ýþleci

Bu iþleç; iki deðer arasýnda kalan satýrlarý belirlemek ve bir alt deðer ile bir üst deðer arasýnda kalan deðerleri seçmek
için kullanýlabilir.

Örnek

Ücreti 3000 ile 5000 arasýnda olan personeli listelemek için SELECT deyimi þu þekilde kullanýlabilir;

SELECT ADI,ÜCRET
FROM PERSONEL
WHERE ÜCRET BETWEEN 3000 AND 5000;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06090.htm [24.11.2006 21:27:00]


6.6.2.1 BETWEEN…AND.. Ýþleci

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06090_1.htm [24.11.2006 21:27:01]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06095.htm

6.2.2.2 IN Ýþleci

Sütun deðerlerinin, bir listedeki deðerler ile karþýlaþtýrýlmasý söz konusu ise, SELECT deyimi ile birlikte IN iþleci kullanýlýr.
Liste içindeki deðerler birbirlerinden virgüllerle ayrýlýr. IN iþleci herhangi bir veri türü için kullanýlabilir. Karakter ve tarih
veri türleri, týrnak iþareti arasýnda yer almalýdýr.

IN( liste)

Örnek

Görevi MEMUR veya PAZARLAMACI olan tüm personeli listelemek istiyoruz. Bunun için IN iþlecini kullanabiliriz.

SELECT ADI,GÖREVÝ
FROM PERSONEL
WHERE GÖREVÝ IN('MEMUR', 'PAZARLAMACI');

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06095.htm [24.11.2006 21:27:01]


6.2.2.2 IN iþleci

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06095_1.htm [24.11.2006 21:27:01]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06100.htm

6.6.2.3 LIKE Ýþleci

WHERE sözcüðü ile, bir sütunun deðerini tam olarak deðil, sadece bir kýsmýný belirterek arayabiliriz. Örneðin, adý "A" harfi
ile baþlayan personeli aramak gibi. Bu tür amaçlar için LIKE iþleci kullanýlabilir. Bu operatör ile birlikte, farklý amaçlar için
(%) veya (_) iþaretleri kullanýlabilir.

Bunlardan (%) iþareti, bu iþaretten önce ya da sonra gelen karakterler için arama yapýlacaðýný belirtir. Örneðin, "A" harfi
ile baþlayanlar, 'A%' biçiminde; "S" harfi ile bitenler, 'S%' biçiminde ifade edilir. (_) iþareti ise herhangi bir tek
karakteri simgeler. LIKE ile birlikte kullanýlan (%) iþareti yerine, MS Access'de (*) iþareti kullanýlýr.

LIKE ( kural)

Örnek

Adý "A" harfi ile baþlayan tüm personeli listelemek istiyoruz. Amacýmýza uygun SELECT deyimi þu þekilde düzenlenebilir;

SELECT ADI, GÖREVÝ


FROM PERSONEL
WHERE ADI LIKE "A*";

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06100.htm [24.11.2006 21:27:02]


6.6.2.3 LIKE Ýþleci

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06100_1.htm [24.11.2006 21:27:02]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06105.htm

6.6.2.4 IS NULL Ýþleci

NULL deðeri; var olmayan, atanamayan ve bilinmeyen bir deðer olduðu için NULL ile ilgili karþýlaþtýrmalarda (=)
iþleci kullanýlamaz. Bunun yerine, sütun deðerlerinin NULL olup olmadýðýný denetlemek için IS NULL iþleci kullanýlýr.

Eðer söz konusu tabloda NULL olmayan alanlar aranacak ise, bu kez IS NOT NULL iþlecine baþvurmak
gerekecektir.

Örnek

PERSONEL tablosu içinde komisyon alan personeli listelemek istiyoruz. Komisyon almayan personelin bu sütunlarý NULL
deðerler içerdiði için, NULL olmayan deðerleri seçerek amacýmýza ulaþýyoruz.

SELECT ADI, GÖREVÝ,KOMÝSYON


FROM PERSONEL
WHERE KOMÝSYON IS NOT NULL;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06105.htm [24.11.2006 21:27:03]


6.6.2.4 IS NULL Ýþleci

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06105_1.htm [24.11.2006 21:27:03]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06110.htm

6.6.3. Mantýksal Ýþleçler

Koþullarý içeren karþýlaþtýrma iþlemlerinde mantýksal iþleçlere de yer verilebilir. Bu iþleçlerden; AND ve OR iki koþulu
birlikte deðerlendirmek üzere kullanýlýrlar.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06110.htm [24.11.2006 21:27:03]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06111.htm

6.6.3.1 AND Ýþleci

AND iþleci; iki koþulun yandaki doðruluk deðeri tablosuna göre TRUE veya FALSE deðerinin döndürülmesini saðlar. Eðer, her
iki koþulun doðruluk deðeri TRUE ise istenen seçme iþlemi gerçekleþir.

Örnek

Ücreti 2000'e eþit veya daha büyük ve iþi MEMUR olan personeli listelemek istiyoruz. Amacýmýza uygun SELECT deyimi,
þu þekilde olabilir;
AND Ýþleci Doðruluk Tablosu
SELECT ADI, GÖREVÝ, ÜCRET
FROM PERSONEL
WHERE ÜCRET>=2000
AND GÖREVÝ='MEMUR';

Eðer belirli bir personelin ücreti 2000'e eþit veya daha fazla ise; ÜCRET>=2000 koþulu doðru olacaktýr. Yani TRUE
deðerini döndürür. Ayný personelin görevi memur ise yani, GÖREVÝ='MEMUR' koþulu doðru ise, bu koþul da TRUE
deðerini döndürür. Böylece her iki koþul için TRUE deðerlerine sahip olan personel isimleri listelenir.

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06111.htm [24.11.2006 21:27:04]


6.6.3.1 AND Ýþleci

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06111_1.htm [24.11.2006 21:27:04]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06112.htm

6.6.3.2 OR Ýþleci

OR iþleci; iki koþulun yandaki doðruluk deðeri tablosuna göre TRUE veya FALSE deðerinin döndürülmesini saðlar. Eðer, her
iki koþulun doðruluk deðeri TRUE ise istenen seçme iþlemi gerçekleþir.

Örnek

Komisyon alan veya görevi MEMUR olan personeli listelemek istiyoruz. Amacýmýza uygun SELECT deyimi þu þekildedir;

OR Ýþleci Doðruluk Tablosu


SELECT ADI, GÖREVÝ, ÜCRET
FROM PERSONEL
WHERE KOMÝSYON IS NOT NULL
OR GÖREVÝ='MEMUR';

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06112.htm [24.11.2006 21:27:04]


6.6.3.2 OR Ýþleci

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06112_1.htm [24.11.2006 21:27:04]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06113.htm

6.6.3.3 NOT Ýþleci

NOT iþleci; bir koþulun doðruluk deðeri TRUE ise FALSE; FALSE ise TRUE deðerini döndürmesini saðlar. Bu iþleç IN,
LIKE, NULL ve BETWEEN iþleçleriyle birlikte kullanýlabilir.

Örnek

Mesleði MEMUR, ÞEF veya PAZARLAMACI olmayan personeli listelemek için aþaðýdaki SELECT deyimi kullanýlabilir;

NOT Ýþleci Doðruluk Tablosu


SELECT ADI, GÖREVÝ
FROM PERSONEL
WHERE GÖREVÝ NOT IN('MEMUR', 'ÞEF', 'PAZARLAMACI');

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06113.htm [24.11.2006 21:27:05]


6.6.3.3 NOT Ýþleci

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06113_1.htm [24.11.2006 21:27:05]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06115.htm

6.6.4. Ýþleçlerin Ýþlem Sýrasý

WHERE sözcüðü içinde yer alan iþleçler, yanda gösterilen sýraya göre iþlem görürler. Bu iþleçlerin dýþýnda, parantezler
de kullanýlabilir. Parantezler tüm iþleçlere göre bir önceliðe sahiptir. Yani öncelikle parantez içindeki iþlemler yapýlýr, ardýndan
da yandaki tabloya göre iþlem sýrasý uygulanýr.

Örnek

Aþaðýdaki SELECT deyimini göz önüne alalým:

SELECT ADI, GÖREVÝ,ÜCRET


FROM PERSONEL
WHERE GÖREVÝ='MEMUR'
OR GÖREVÝ='ÞEF'
AND ÜCRET>3000;

Ýþleçlerin öncelik sýrasýný göz önüne alarak deðerlendirme yapmamýz gerekiyor. AND iþleci OR dan daha öncelikli olduðu
için, AND iþlecini ilgilendiren koþulu öncelikle deðerlendirmemiz gerekiyor. Ardýndan geriye kalan koþulu göz önüne alýyoruz.
O halde aþaðýda belirtildiði biçimde iki koþuldan söz edilebilir;

! Karþýlaþtýrma Ýþleçleri ve anlamlarý 1) Görevi ÞEF olanlar ve ücreti 3000'den fazla olanlar
görmek için 'DEVAM' düðmesine 2) Görevi MEMUR olanlar
týklayýnýz.
Bu iki koþulu öncelik sýralarýný göz önüne alarak birleþtirirsek, þöyle bir seçme iþlemiyle karþýlaþýrýz;

"Görevi ÞEF olanlar ve ücreti 3000'den fazla olanlar veya görevi MEMUR olanlarýn seçimi"

Örnek

Görevi; ÞEF veya MEMUR olanlar ve ücreti 3000'den fazla olanlarýn seçimini yapacak SELECT deyimini yazýnýz.

SELECT ADI, GÖREVÝ,ÜCRET


FROM PERSONEL
WHERE (GÖREVÝ='MEMUR'
OR GÖREVÝ='ÞEF')
AND ÜCRET>3000;

Parantezlerin öncelik sýrasýna sahip olduðunu unutmayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06115.htm [24.11.2006 21:27:06]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06120.htm

6.7. Sýralama Ýþlemleri

Tablolarýn satýrlarýnýn, herhangi bir sütuna göre sýralý olarak elde edilmesi söz konusu ise, SELECT deyimi ORDER BY
sözcükleri ile birlikte kullanýlýr. Sýralama sözcükleri de dahil olmak üzere SELECT deyimi þu þekilde tanýmlanýr;

SELECT [DISTINCT] { * | sütun, ....}


FROM tablo
[WHERE koþul [ORDER BY {sütun, ifade} [ASC | DESC] ];

Örnek

Personeli iþe giriþ tarihine göre sýralamak istiyoruz. Bunun için SELECT deyimi þu þekilde düzenlenebilir;

SELECT ADI, GÖREVÝ, GÝRÝÞ_TARÝHÝ


FROM PERSONEL
ORDER BY GÝRÝÞ_TARÝHÝ;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

Örnek

Bu kez personeli ücretine göre her bölüm içinde sýralamak istiyoruz. Bu durumda, bölümleri ve ücretleri birlikte sýralamýz
söz konusudur. SELECT deyimi þu þekilde düzenlenebilir;

SELECT BÖLÜM_NO, ADI, ÜCRET


FROM PERSONEL
ORDER BY BÖLÜM_NO, ÜCRET DESC;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06120.htm [24.11.2006 21:27:06]


6.7. Sýralama Ýþlemleri

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06120_1.htm [24.11.2006 21:27:06]


6.7. Sýralama Ýþlemleri

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06120_2.htm [24.11.2006 21:27:07]


Untitled Document

Testin nasýl cevaplanacaðýný görmek için buraya týklayýnýz.

Aþaðýda verilen tablolarý göz önüne alarak sorularý yanýtlayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06130.htm (1 of 2) [24.11.2006 21:27:07]


Untitled Document

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT06130.htm (2 of 2) [24.11.2006 21:27:07]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07005.htm

SQL FONKSÝYONLARININ KULLANIMI

Bu bölümde, SQL yapýsal programlama dilinde standart olarak bulunan ve veri tabaný yönetiminde bizlere büyük
kolaylýkar saðlayan temel SQL fonksiyonlarýný ve bu fonksiyonlarýn nasýl kullanýlacaðýný öðreneceksiniz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07005.htm [24.11.2006 21:27:07]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07010.htm

Bölüm Hedefi

Bu bölümde,

● Fonksiyon kavramýný,
● SQL'de fonksiyonlarýn yerini,
● Tek satýr fonksiyonlarýnýn kullanýmýný,
● Karakter fonksiyonlarýný,
● Sayýsal fonksiyonlarý,
● Tarih fonksiyonlarýný,
● Dönüþtürme fonksiyonlarýný,
● Diðer SQL fonksiyonlarýný,
● Ýç içe fonksiyon kullanýmýný,

öðreneceksiniz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07010.htm [24.11.2006 21:27:08]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07015.htm

7.1. FONSÝYON NEDÝR?

Fonksiyonlar veya bir baþka deyiþle iþlevler, SQL'e bazý güçlü özellikler katan olanaklar olarak deðerlendirilir.
SQL fonksiyonlarý, aynen programlama dillerinde olduðu gibi, kullanýcýya bazý özel iþlemleri ve hesaplamalarý otomatik
olarak saðlar. Bir fonksiyon; çeþitli argümanlarý girdi olarak alýp bir sonuç üreten hazýr bileþenlerdir. Kullanýcýnýn,
fonksiyonun adýný ve gerekli argümanlarý tanýmlamasý yeterlidir. Bu bilgilere dayalý olarak fonksiyon, bir sonuç
döndürür (üretir).

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07015.htm [24.11.2006 21:27:08]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07020.htm

7.2. SQL Fonksiyonlarý

SQL fonksiyonlarý iki ana grup altýnda incelenmektedir:

Tek satýr fonksiyonlarý, tablonun bir satýrý için uygulanýr ve her satýr için bir sonuç üretilir. Çoklu satýr fonksiyonlarý ise, bir
grup satýra uygulanýr ve sonuç buna göre elde edilir.

Burada anlatýlan SQL standart ANSI SQL 'dir. Ancak bazý fonksiyonlarý tüm veri tabanlarýnýn
desteklemediðini göreceksiniz. ANSI SQL'in tüm özelliklerini barýndýran ORACLE veri tabaný üzerinde
çalýþtýðýmýzý varsayarak, fonksiyonlarý ona göre anlatacaðýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07020.htm [24.11.2006 21:27:08]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07025.htm

7.3. Tek Satýr Fonksiyonlarý

Tek satýr fonksiyonlarý, tablonun her bir satýrýna uygulanan fonksiyonlardýr. Tek satýr fonksiyonlarýnýn birçok
türü bulunmaktadýr.

Bu derste, aksi söylenmedikçe "fonksiyon" sözcüðü ile tek satýr fonksiyonlarýndan söz edildiði anlaþýlacaktýr. Tek
satýr fonksiyonlarýný aþaðýda belirtildiði biçimde tanýmlýyoruz;

fonksiyon Herhangi bir SQL fonksiyonunu simgeler. Örneðin LOWER bir fonksiyon ismidir.
Bu ismi deðiþtiremeyiz.

Herhangi bir tabloya iliþkin sütun adý


sütun
Herhangi bir karakter dizisi ya da hesaplama ifadesi
ifade
Fonksiyonla birlikte kullanýlabilecek argümanlar
argümanlar

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07025.htm [24.11.2006 21:27:09]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07030.htm

7.3.1. Karakter Fonksiyonlarý

Karakter fonksiyonlarý; karakter verileri girdi olarak alan, karakter ya da sayýsal deðerler döndürebilen fonksiyonlardýr.

Bu fonksiyonlarýn en çok kullanýlanlarýný þu þekilde sýralayabiliriz;

Alfabetik karakterleri küçük harflere dönüþtür.

Alfabetik karakterleri büyük harflere dönüþtür.

Alfabetik karakterlerin birincisini büyük harfe; diðerlerini ise küçük harfe


çevirir.

Katarlarý (karakter dizileri) birleþtirmek için kullanýlýr. (||) ile ayný


görevi yapar.

Bir katarýn m. pozisyonundan itibaren n karakterinden yeni bir katar


oluþturur.

Bir sütunun ya da katarýn içerdiði karakter sayýsýný döndürür.

Bu eðitimde bahsedilen fonksiyonlar, ORACLE veri tabaný için verilmiþtir. Bu fonksiyonlar, bazý veri tabanlarýnda
farklýlýk gösterebilir. Örneðin; MS Access'de bu fonksiyonlarýn bazýlarý farklý biçimdedir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07030.htm (1 of 2) [24.11.2006 21:27:09]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07030.htm

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07030.htm (2 of 2) [24.11.2006 21:27:09]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07035.htm

7.3.1.1 LOWER() ve UPPER() Fonksiyonlarý

Bu fonksiyonlar, bir karakterin büyük harfe ya da küçük harfe dönüþtürülmesi söz konusu olduðunda kullanýlabilir.

a. LOWER() Fonksiyonu

LOWER() fonksiyonu, bir karakter katarýnýn tüm harflerini küçük harflere dönüþtürür.

Örnek

PERSONEL tablosunda personel isimleri büyük harflerle yazdýrýlmýþ olarak yer almaktadýr. Bu isimleri küçük
harflerle görüntülemek için SELECT deyimi þu þekilde düzenlenebilir;

SELECT LCASE(ADI) AS ÝSÝMLER


FROM PERSONEL
WHERE BÖLÜM_NO=10 OR GÖREVÝ='PAZARLAMACI'

Yukarýdaki SELECT deyimi MS Access veri tabaný için düzenlenmiþtir.


MS Access veri tabanýnda LOWER() fonksiyonu yerine LCASE()
fonksiyonu kullanýlmaktadýr.

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

b. UPPER () Fonksiyonu

UPPER() fonksiyonu, bir karakter katarýndaki tüm harfleri büyük harflere çevirir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07035.htm (1 of 2) [24.11.2006 21:27:10]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07035.htm

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07035.htm (2 of 2) [24.11.2006 21:27:10]


7.3.1.1 LOWER() ve UPPER() Fonksiyonlarý

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07035_1.htm [24.11.2006 21:27:10]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07040.htm

7.3.1.2 LENGTH() Fonksiyonu

Bir karakter katarýn kaç karakterden oluþtuðunu veya uzunluðunu bulmak amacýyla ORACLE veri tabanýnda LENGTH(); MS
Access veri tabanýnda LEN() fonksiyonu kullanýlýr. Lenght() fonksiyonu, bir sayýsal deðer döndürür.

Örnek

Personel isimlerinin kaç karakterden oluþtuðunu bulmak istiyoruz. Bu amaçla SELECT deyimi þu þekilde kullanýlabilir;

SELECT ADI,LEN(ADI) AS ÝSÝMLER


FROM PERSONEL;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07040.htm [24.11.2006 21:27:10]


7.3.1.2 LENGTH() Fonksiyonu

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07040_1.htm [24.11.2006 21:27:11]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07045.htm

7.3.2. Sayýsal Fonksiyonlar

Sayýsal veriler üzerinde çeþitli iþlemleri gerçekleþtirmek üzere özel fonksiyonlar bulunmaktadýr. Sayýsal fonksiyonlar,
sayýsal veriler alýr ve yine sayýsal sonuçlar üretirler.

Bu fonksiyonlarýn en çok kullanýlanlarýný þu þekilde sýralayabiliriz:

Sayýsal deðeri yuvarlatmak amacýyla kullanýlýr.

Sayýsal deðeri belirtilen ondalýða göre budamak (kesmek) amacýyla kullanýlýr.

Ýki sayýsal deðerin, m ve n 'nin birbirine bölümünden elde edilen kalaný döndürür.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07045.htm [24.11.2006 21:27:11]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07050.htm

7.3.2.1 ROUND() Fonksiyonu

ROUND() fonksiyonu, bir sütun deðerinin veya bir ifadenin içerdiði sayýsal deðerin yuvarlatýlmasý amacýyla kullanýlýr.
Yuvarlatma iþlemi, bir n ondalýk hanesine göre yapýlýr. Eðer n sýfýr ise veya fonksiyon içinde belirtilmemiþ ise,
yuvarlatma sonunda elde edilecek tamsayýnýn ondalýk hanesi olmayacaktýr. ROUND() fonksiyonu þu þekilde tanýmlanýr;

Örnek

PERSONEL tablosunun ÜCRET sütunundaki bilgiler aylýk ücretleri kapsamaktadýr. Görevi MEMUR olanlar için, aylýk ücretleri
30'a bölerek günlük ücretleri bulmak ve sonucu 2 ondalýk haneye göre yuvarlatmak istiyoruz. Amacýmýza uygun SELECT
deyimi þu þekilde olacaktýr;

SELECT ADI,ÜCRET AS AYLIK,


ROUND(ÜCRET/30,2) AS GÜNLÜK
FROM PERSONEL
WHERE GÖREVÝ='MEMUR';

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07050.htm [24.11.2006 21:27:11]


7.3.2.1 ROUND() Fonksiyonu

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07050_1.htm [24.11.2006 21:27:12]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07055.htm

7.3.2.2 TRUNC() Fonksiyonu

TRUNC() fonksiyonu, bir sütunun içerdiði sayýsal deðerin ya da bir ifade sonunda elde edilen sayýsal deðerin, belirlenen
haneye göre budanmasý (kesilmesi) amacýyla kullanýlýr. Bu fonksiyon, ORACLE veri tabanýnda geçerlidir. Fonksiyon þu
þekilde tanýmlanýr;

Tanýmlamadaki n sayýsal deðerin ondalýk noktadan itibaren kesileceði konumu belirler. Sözü edilen n deðeri sýfýr ise
veya belirtilmemiþ ise, sayýsal deðerin ondalýk noktadan sonrasý budanýr. Eðer n negatif ise, ondalýk noktanýn sonundan
itibaren budama iþlemi gerçekleþir.

Örnek

Personelin günlük ücretini hesaplayan ve sonucu yuvarlatmadan ondalýk noktasýndan itibaren budayan SELECT deyimi
aþaðýda gösterildiði biçimde düzenlenebilir:

SELECT ADI, ÜCRET AS AYLIK, TRUNC(ÜCRET/30) AS GÜNLÜK


FROM PERSONEL

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07055.htm [24.11.2006 21:27:12]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07060.htm

7.3.2.3 MOD() Fonksiyonu

Ýki sayýsal deðerin birbirine bölünmesi sonucunda elde edilen kalaný döndürmek için; MOD() fonksiyonu kullanýlýr. Bu
fonksiyon þu þekilde tanýmlanýr;

Burada m ve n birbirine bölünecek sayýsal deðerleri ifade etmektedir.

Örnek

Personel ücretlerinin komisyonlarýna oranýný hesaplayan ve kalaný bulan SELECT deyimi aþaðýda belirtildiði biçimde olabilir;

SELECT ADI, ÜCRET, KOMÝSYON, MOD(ÜCRET,KOMÝSYON) AS KALAN


FROM PERSONEL;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07060.htm [24.11.2006 21:27:13]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07065.htm

7.3.3. Tarih Fonksiyonlarý

Tarih iþlemlerinde kullanýlan bazý tarih fonksiyonlarýndan söz edilebilir. Bu fonksiyonlarýn en çok kullanýlanlarýndan
biri SYSDATE fonksiyonudur. Bu fonksiyonun herhangi bir argümaný bulunmamaktadýr. O andaki tarih ve zaman bilgisini
elde etmek amacýyla kullanýlýr. Diðer tarih fonksiyonlarýný aþaðýdaki tablo üzerinde görebilirsiniz;

Fonksiyon Ýþlevi
Ýki tarih arasýnda kaç aylýk bir süre olduðunu saptar.

Belirli bir tarih bilgisine n ay ilave edildiðinde hangi tarihe ulaþýlacaðýný belirler.

Haftanýn belirli bir gününün, bir sonra hangi tarihe karþýlýk geldiðini bulmak için
kullanýlýr.

Belirlenen tarihe iliþkin ayýn son gününü bulmak için kullanýlýr.

Örnek 1

Personelin iþe giriþ tarihinden bu zamana kadar olan süreyi ay olarak hesaplatmak istiyoruz. Amacýmýza uygun SELECT deyimi
þu þekilde olabilir;

SELECT ADI, GÝRÝÞ_TAR,


MONTHS_BETWEEN (SYSDATE,GÝRÝÞ_TAR) AS AY
FROM PERSONEL;

Örnek 2

Ýþe giriþ süresi 200 aydan daha az olan personeli listelemek için þu þekilde bir sorgu yapýlabilir;

SELECT ADI,GÝRÝÞ_TAR,
MONTHS_BETWEEN(SYSDATE,GÝRÝÞ_TAR) AS AY
FROM PERSONEL
WHERE MONTHS_BETWEEN(SYSDATE,GÝRÝÞ_TAR)<200;

Örnek 3

Personelin iþe giriþ tarihinden 6 ay sonrasýnýn hangi tarihe karþýlýk geldiðini hesaplayan bir sorgu þu þekilde oluþturulabilir;

SELECT ADI, GÝRÝÞ_TAR, ADD_MONTHS (GÝRÝÞ_TAR,6)


FROM PERSONEL;

Örnek 4

Personelin iþe giriþ tarihlerini göz önüne alarak her bir tarihin ait olduðu ayýn en son gününü belirleyen sorgu ifadesi þu
þekilde olabilir;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07065.htm (1 of 2) [24.11.2006 21:27:13]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07065.htm

SELECT ADI, GÝRÝÞ_TAR, LAST_DAY(GÝRÝÞ_TAR)


FROM PERSONEL;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07065.htm (2 of 2) [24.11.2006 21:27:13]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07070.htm

7.3.4. Dönüþtürme Fonksiyonlarý

Karakter, sayýsal ve tarih verilerinin birbirlerine dönüþtürülmesi ve özellikle biçimlendirme iþlemlerinde çeþitli
fonksiyonlardan yararlanýlýr. Bu fonksiyonlarý aþaðýdaki tabloda görebilirsiniz;

Fonksiyon Ýþlevi

Tarih veya sayýsal bilginin istenildiði gibi biçimlendirilerek karakter dizisine


dönüþtürülmesini saðlar.

Bir karakter katarýnýn içerdiði sayýsal deðerleri istenildiði gibi biçimlendirilerek sayýsal
veri türüne dönüþtürmek için kullanýlýr.

Bir karakter katarýnýn içerdiði tarih verilerini istenildiði gibi biçimlendirilerek tarih veri
türüne dönüþtürmek için kullanýlýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07070.htm [24.11.2006 21:27:14]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07075.htm

7.3.4.1 TO_CHAR Fonksiyonu

Bu fonksiyon, tarih veya sayýsal bilginin istenildiði gibi biçimlendirilerek karakter dizisine dönüþtürülmesini saðlar. Ýki
farklý uygulama alaný bulunmaktadýr. Eðer tarih bilgisini karakter dizisine, yani bir katara dönüþtürmek söz konusu ise;

tanýmý uygulanýr.

Eðer, bir sayýsal deðerin karakter katarýna dönüþtürülmesi isteniyorsa,

tanýmý kullanýlýr. Aþaðýdaki canlandýrmada TO_CHAR fonksiyonu; bir sayýsal deðeri biçimlendirerek karakter dizisine çeviriyor.

Tarihle ilgili biçimlendirme ifadesi; bazý biçimlendirme elemanlarýndan ve kurallardan oluþur. Biçimlendirme ifadesi, tek
týrnaklar arasýnda yazýlýr ve büyük küçük harf ayrýmýna karþý duyarlýdýr. Tarih ile ilgili biçimlendirme ifadelerinde
aþaðýdaki tanýmlardan yararlanýlýr;

Eleman Anlamý

YYYY Dört haneli yýl bilgisi. Örneðin; 2002

YEAR Yýlýn rakamlarla deðil, okunduðu gibi yazýlmasý

MM Ýki haneli ay bilgisi

MONTH Ayýn tam adý

DD Ýki haneli gün bilgisi

DY Haftanýn günü. Üç karakterden oluþur.

DAY Günün tam adý

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07075.htm (1 of 2) [24.11.2006 21:27:14]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07075.htm

Zamanla ilgili biçimlendirme ifadeleri ise aþaðýdaki elemanlardan oluþabilir;

Eleman Anlamý

AM,PM Meridyen göstergesi

HH
Günün saati

MI Dakika bilgisi

SS Saniye bilgisi

Sayýsal deðerleri kullanan TO_CHAR() fonksiyonu, aþaðýdaki tabloda yer alan biçimlendirme elemanlarýný kullanabilir;

Eleman Anlamý

9 Sayýsal deðeri ifade eder.

0 Sýfýr deðerini ifade eder.

$ Dolar iþaretini yerleþtirir.

L Yerel para iþaretini yerleþtirir.

. Ondalýk hanesini gösterir.

, Binler hanesini gösterir.

Örnek 1

Personelin iþe giriþ tarihlerini MM/YY biçiminde elde etmek için þu þekilde bir sorgu düzenlenebilir;

SELECT ADI,TO_CHAR(GÝRÝÞ_TAR,'MM/YY')
FROM PERSONEL;

Örnek 2

Personel ücretlerini, binler hanesinden ayýrarak elde etmek istiyoruz. Ayrýca ücret rakamýnýn sol tarafýna ($)
iþaretini yerleþtireceðiz. Amacýmýza uygun sorgu þu þekilde düzenlenebilir;

SELECT ADI,TO_CHAR(ÜCRET,'$99,999')
FROM PERSONEL;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07075.htm (2 of 2) [24.11.2006 21:27:14]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07080.htm

7.3.4.2 TO_NUMBER Fonksiyonu

Karakter alan olarak tanýmlanmýþ bir sütunun içerdiði sayýsal deðerleri, sayýsal veri türüne dönüþtürmek için TO_NUMBER
() fonksiyonu kullanýlýr. Bu fonksiyon þu þekilde tanýmlanýr;

Aþaðýdaki canlandýrmada, TO_NUMBER() fonksiyonu bir karakter katarý girdisini sayýsal veri türüne çeviriyor.

Biçimlendirme ifadesi, TO_CHAR() fonksiyonunda olduðu gibi, aþaðýda yer alan iþaretler kullanýlarak düzenlenir;

Eleman Anlamý

9 Sayýsal deðeri ifade eder.

0 Sýfýr deðerini ifade eder.

$ Dolar iþaretini yerleþtirir.

L Yerel para iþaretini yerleþtirir.

. Ondalýk hanesini gösterir.

, Binler hanesini gösterir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07080.htm [24.11.2006 21:27:15]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07085.htm

7.3.4.3 TO_DATE Fonksiyonu

Karakter dizisi olarak saklanan ifadeleri tarih bilgisine çevirmek söz konusu olduðunda TO_DATE() fonksiyonuna baþvurulur.
Bu fonksiyon þu þekilde tanýmlanýr;

Biçimlendirme ifadesi içinde, TO_CHAR() fonksiyonu için geçerli olan biçimlendirme ifadeleri kullanýlabilir.

Aþaðýdaki canlandýrma TO_DATE() fonksiyonun çalýþma prensibini anlatmaktadýr.

Örnek

Ýþe giriþ tarihlerine göre PERSONEL tablosunu sorgulayacaðýz. Arama ifadesi "Ocak 1, 1980" biçiminde olabilir. Bu
ifadeyi SELECT deyiminin yorumlayabileceði bir biçime dönüþtürmek gerekiyor. Amacýmýza uygun SELECT deyimi þu
þekilde olabilir;

SELECT ADI, GÝRÝÞ_TAR


FROM PERSONEL
WHERE GÝRÝÞ_TAR=TO_DATE('OCAK 1,1980',MONTH DD, YYYY');

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07085.htm [24.11.2006 21:27:15]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07090.htm

7.3.5. Genel Fonksiyonlar

Bu bölümde daha önce gördüðümüz fonksiyonlarýn dýþýnda SQL'in birçok fonksiyonu bulunmaktadýr. SQL
fonksiyonlarýnýn bir kýsmýný sonraki bölümde gruplama fonksiyonlarý olarak ele alarak inceleyeceðiz.
Ancak burada SQL'in önemli iki fonksiyonu üzerinde duracaðýz. Bu fonksiyonlar, NVL() ve DECODE()
fonksiyonlarýdýr.

! Fonksiyonlarýn görevlerini öðrenmek için, fonksiyon isimleri yazýlý düðmelere týklayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07090.htm [24.11.2006 21:27:15]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07095.htm

7.3.5.1 NVL() Fonksiyonu

Bir sütunun içeriði NULL ise, SELECT deyimi ile yapýlan sorgularda bu içerik boþ olarak görüntüleniyordu. Bunun yerine,
NULL deðer ile karþýlaþýldýðýnda, bir baþka ifadenin görüntülenmesi saðlanabilir. NVL() fonksiyonu, NULL deðerler yerine
bir baþka deðerin yer almasýný saðlar. NVL() fonksiyonu þu þekilde tanýmlanýr;

! NVL() fonksiyonunun EVET ve HAYIR durumlarýnda çalýþma þeklini görmek için; EVET ve HAYIR düðmelerine týklayýnýz.

Örnek 1

Yýllýk toplam ücretleri hesaplamak istiyoruz. Bunun için; aylýk ücret bilgisi, 12 ile çarpýlacak ve bulunan sonuca komisyon
miktarý eklenecektir. Ancak pek çok personelin komisyon bilgisi NULL deðerler içermektedir. NULL deðerler içeren
sütunlar üzerinde aritmetik iþlemler yapamayýz. NULL deðerler yerine 0 deðerini yerleþtirerek hesaplamalar yapýlabilir. O
halde, NVL() fonksiyonunu kullanmamýz söz konusudur. Amacýmýza uygun SELECT deyimi þu þekilde olmalýdýr;

SELECT ADI,ÜCRET,KOMÝSYON,ÜCRET*12+NVL(KOMÝSYON,0)
FROM PERSONEL;

Örnek 2

Ýþe giriþ tarihleri NULL olan personel için '01-01-2002' tarihini iþe baþladýðý tarih olarak görüntüleyen SELECT deyimi þu
þekilde olabilir;

SELECT ADI,GÝRÝÞ_TAR,NVL(GÝRÝÞ_TAR,'01-01-2002')
FROM PERSONEL;

Örnek 3

Görevi henüz belli olmayan personel için, görev olarak "GÖREVÝ BELÝRLENMEDÝ" mesajýný görüntüleyen SELECT deyimi
þu þekilde olabilir;
file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07095.htm (1 of 2) [24.11.2006 21:27:16]
file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07095.htm

SELECT ADI, GÖREVÝ, NVL(GÖREVÝ,'GÖREVÝ BELÝRLENMEDÝ')


FROM PERSONEL;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07095.htm (2 of 2) [24.11.2006 21:27:16]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07100.htm

7.3.5.2 DECODE() Fonksiyonu

Programlama dillerinde kullanýlan CASE veya IF..THEN..ELSE denetim deyimlerinin SQL içinde tam karþýlýðý olabilecek bir
deyim yoktur. Onun yerine, ayný iþlevi yerine getirmek üzere DECODE() fonksiyonundan yararlanýlýr. Bu fonksiyon þu
þekilde tanýmlanýr;

! DECODE() fonksiyonunun EVET ve HAYIR durumlarýnda çalýþma þeklini görmek için; EVET ve HAYIR düðmelerine týklayýnýz.

Örnek

Personel arasýnda görevi; MEMUR olanlara %10, ÞEF olanlara %15, MÜDÜR olanlara ise, %20 zam yapýlacaktýr.
Diðerlerinde ise herhangi bir deðiþiklik olmayacaktýr. Bu iþlemleri yerine getirmek üzere aþaðýdaki SELECT deyimini düzenliyoruz;

SELECT ADI,GÖREVÝ,ÜCRET,
DECODE(GÖREVÝ,'MEMUR', ÜCRET*1.10,
'ÞEF',ÜCRET*1.15,
'MÜDÜR'ÜCRET*1.20,
ÜCRET) AS "YENÝ ÜCRETLER"
FROM PERSONEL;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07100.htm (1 of 2) [24.11.2006 21:27:16]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07100.htm

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07100.htm (2 of 2) [24.11.2006 21:27:16]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07105.htm

7.4. Ýç Ýçe Fonksiyonlar

Bir SELECT deyimi içinde herhangi bir fonksiyonun nasýl kullanýlabildiðini gördük. Bazý uygulamalarda, bir fonksiyonun içinde
bir baþka fonksiyona yer vermek gerekebilir. Örneðin,

DECODE(TRUNC(ücret,0), …)

biçiminde bir taným yapýlabilir. Burada DECODE() fonksiyonu içinde TRUNC() fonksiyonunun kullanýldýðý görülüyor. Ýç
içe fonksiyonlarda, önce iç taraftaki fonksiyon iþlem görür, ardýndan elde edilen sonuç dýþtaki fonksiyon tarafýndan kullanýlýr.

! Adýmlarýn sonuçlarýný görmek için ADIM 1, ADIM 2 ve ADIM 3 düðmelerine týklayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07105.htm [24.11.2006 21:27:17]


Untitled Document

Testin nasýl cevaplanacaðýný görmek için buraya týklayýnýz.

Aþaðýda verilen tablolarý göz önüne alarak sorularý yanýtlayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07115.htm (1 of 2) [24.11.2006 21:27:17]


Untitled Document

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT07115.htm (2 of 2) [24.11.2006 21:27:17]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08005.htm

VERÝLERÝ GRUPLAYARAK ANALÝZ ETMEK

Önceki bölümde SQL'in bize sunduðu hazýr fonksiyonlarýn tek satýrla ifade edilebilen tiplerini öðrendiniz. Bu bölümde ise, SQL
yapýsal sorgulama dilinde bulunan çok satýrlý fonksiyonlarý öðreneceksiniz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08005.htm [24.11.2006 21:27:18]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08010.htm

Bölüm Hedefi

Bu bölümde,

● Grup fonksiyonlarý nasýl tanýmlayacaðýnýzý,


● Bazý istatistik fonksiyonlarýnýn kullanýlmasýný,
● Gruplama iþlemlerini,
● Gruplama iþlemlerinde dikkat edilecek noktalarý,
● Birden fazla sütuna göre gruplama yapmayý,
● Grup koþullarýnýn tanýmlanmasýný,

öðreneceksiniz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08010.htm [24.11.2006 21:27:18]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08015.htm

8.1. Grup Fonksiyonlarý

Tek satýr fonksiyonlarý, tablonun bir satýrýna uygulanabiliyor ve buna karþýlýk gelen bir sonuç satýrý elde edilebiliyordu. Bir
grup satýra bir fonksiyonun uygulanmasý söz konusu ise; "çoklu satýr" ya da bir baþka deyiþle "grup fonksiyonlarýndan"
söz edilir. Grup fonksiyonlarý tablonun tüm satýrlarýna uygulanabildiði gibi, GROUP BY sözcüðü yardýmýyla da alt
gruplara uygulanabilir.

Bir tablonun tüm satýrlarý için grup fonksiyonu uygulanacak ise, SELECT deyimi aþaðýda belirtildiði biçimde kullanýlýr;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08015.htm [24.11.2006 21:27:18]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08020.htm

8.1.1 AVG()Fonksiyonu

Herhangi bir sütunun içerdiði sayýsal deðerlerin aritmetik


ortalamasýný hesaplamak amacýyla; AVG() fonksiyonu
kullanýlýr. Bu fonksiyonun uygulandýðý sütunun veri
türü sayýsal olmalýdýr.

Örnek 1

Personel ücretlerini göz önüne alalým. Ücretlerin


ortalamasýný bulmak için þöyle bir yol izlenir;

SELECT AVG (ÜCRET) AS ORTALAMA


FROM PERSONEL;

Yukarýdaki sorgulamanýn sonucunu görmek için linke

týklayýnýz

Örnek 2

Personel arasýnda görevi MEMUR olanlarýn ortalama


ücreti aþaðýda gösterildiði biçimde hesaplanabilir;

SELECT AVG (ÜCRET) AS ORTALAMA,


FROM PERSONEL
WHERE GÖREVÝ='MEMUR';

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08020.htm [24.11.2006 21:27:19]


8.1.1 AVG()FONSÝYONU

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08020_1.htm [24.11.2006 21:27:19]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08025.htm

8.1.2 SUM()Fonksiyonu

Sütunlarýn içerdiði sayýsal deðerleri toplamak amacýyla SUM() fonksiyonundan yararlanýlýr.

Örnek

Tüm personel ücretlerinin toplamýný hesaplayan SELECT deyimi aþaðýda gösterildiði biçimde oluþturulabilir;

SELECT SUM(ÜCRET) AS TOPLAM


FROM PERSONEL;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08025.htm [24.11.2006 21:27:19]


8.1.2 SUM() Fonksiyonu

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08025_1.htm [24.11.2006 21:27:20]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08030.htm

8.1.3 STDDEV() Fonksiyonu

Standart sapma, sayýsal verilerin aritmetik ortalamalardan farklarýnýn kareli ortalamasý olarak bilinir. Standart sapma
þekil üzerinde görülen formül aracýlýðýyla hesaplanýr. Bu kavram istatistiksel veri analizlerinde sýkça kullanýlýr. Söz
konusu hesaplamayý yapan SQL fonksiyonu ise; STDDEV() 'dir. STDDEV() fonksiyonu MS Access'de; STDEV()
olarak kullanýlmaktadýr

Solda STD() fonksiyonun kullandýðý Standart Sapma Formülü yer almaktadýr.

Örnek

Personel ücretlerinin standart sapmasýný bulmak istiyoruz. Bunun için SELECT deyimi aþaðýda gösterildiði biçimde kullanýlýr;

SELECT STDEV(ÜCRET) AS STANDART_SAPMA


FROM PERSONEL;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08030.htm [24.11.2006 21:27:20]


8.1.3 STDDEV() Fonksiyonu

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08030_1.htm [24.11.2006 21:27:20]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08035.htm

8.1.4 VARIANCE() Fonksiyonu

Varyans, sayýsal deðerler arasýndaki deðiþkenliði ölçen bir kavramdýr. Ýstatistiksel veri analizlerinde yaygýn
biçimde kullanýlmaktadýr. Standart sapmanýn karesi olarak bilinmektedir. Soldaki animasyonda görüldüðü biçimde bir
formül yardýmýyla hesaplanýr. Bir dizi sayýsal deðerin varyansýný hesaplamak için VARIANCE() fonksiyonu kullanýlýr.
MS Access'de bu fonksiyon yerine; VARP() fonksiyonu kullanýlýr.

Örnek

Personel ücret bilgilerinin ne ölçüde deðiþken olduðunu belirlemek istiyoruz. Bunun için; VARIANCE() veya VARP()
fonksiyonu kullanýlabilir.

SELECT VARP(ÜCRET) AS VARYANS


FROM PERSONEL;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08035.htm [24.11.2006 21:27:21]


8.1.4 VARIANCE() Fonksiyonu

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08035_1.htm [24.11.2006 21:27:21]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08040.htm

8.1.5 MAX() ve MIN() Fonksiyonlarý

Tablonun içerdiði deðerlerin en büyük ve en küçük olanlarýný bulmak için MIN() ve MAX() fonksiyonlarý kullanýlýr.
Bu fonksiyonlar herhangi bir veri türüne uygulanabilir.

Soldaki canlandýrmalardan MAX() ve MIN() fonksiyonlarýnýn çalýþma þekillerini öðrenebilirsiniz.

Örnek 1

Personel ücretlerini göz önüne alalým. En az ve en yüksek ücretin ne olduðunu öðrenemek istiyoruz. Amacýmýza uygun
SELECT deyimi aþaðýda belirtildiði biçimde olabilir;

SELECT MIN(ÜCRET) AS EN_AZ, MAX(ÜCRET) AS EN_FAZLA


FROM PERSONEL;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

Örnek 2

Ýþe en son giren personelin iþe giriþ tarihini belirlemek için SELECT deyimi þu þekilde düzenlenebilir;

SELECT MAX(GÝRÝÞ_TAR)
FROM PERSONEL;

Örnek 3

Personel isimlerini alfabetik olarak sýraladýðýmýzda birinci sýrada hangi ismin elde edileceðini þu þekilde öðrenebiliriz;

SELECT MIN(ADI)
FROM PERSONEL;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08040.htm [24.11.2006 21:27:22]


8.1.5 MAX() ve MIN() Fonksiyonlarý

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08040_1.htm [24.11.2006 21:27:22]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/Vt08045.htm

8.1.6 COUNT() Fonksiyonu

Bir tablodaki kayýtlarýn sayýlmasý amacýyla COUNT() fonksiyonu kullanýlýr. Bu fonksiyon iki farklý biçimde kullanýlabilir;

● COUNT(*)
● COUNT(sütun)

COUNT(*) fonksiyonu, NULL deðerleri de içeren tüm kayýtlarýn sayýlmasýna neden olur. WHERE ile birlikte kullanýlýrsa,
bu koþula uygun tüm kayýtlarýn sayýsýnýn öðrenilmesini saðlar. Ýkinci biçim tercih edilirse, yani COUNT(sütun)
biçiminde kullanýlýrsa, söz konusu sütunda NULL deðerler içermeyen tüm kayýtlarýn sayýlmasýna neden olur.

Örnek

30 numaralý bölümde görev yapan kaç tane personel olduðunu bulmak istiyoruz. SELECT deyimi þu þekilde düzenlenir;

SELECT COUNT(*) AS PERSONEL_SAYISI


FROM PERSONEL;
WHERE BOLUM_NO=30;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/Vt08045.htm [24.11.2006 21:27:22]


8.1.6 COUNT() Fonksiyonu

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08045_1.htm [24.11.2006 21:27:23]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08050.htm

8.2. Gruplama Ýþlemleri

Bir tablonun satýrlarý gruplara ayrýlarak, grup fonksiyonlarýnýn bunlara uygulanmasý saðlanabilir. Böyle bir amaçla
SELECT deyimi içinde GROUP BY sözcüðünden yararlanýlýr.

SELECT sütun, grup fonksiyonu(sütun)


FROM tablo
[WHERE koþul] [GROUP BY sütun]
[ORDER BY sütun];

PERSONEL tablosunda bulunan personel ücretlerini; Bölüm_No'suna göre gruplayýp her bölümdeki toplam personel
harcamalarýný bulabiliriz. Bunun için;

SELECT BÖLÜM_NO, SUM(ÜCRET) AS TOPLAM_ÜCRET


FROM PERSONEL
GROUP BY BÖLÜM_NO;

Örnek

PERSONEL tablosunu göz önüne alarak, her bölüm için personel sayýsýný, ücret toplamýný ve ortalama ücretleri
hesaplayan SELECT deyimi þu þekilde oluþturulabilir;

SELECT BÖLÜM_NO,COUNT(ADI) AS SAYI,


SUM(ÜCRET) AS TOPLAM,
AVG(ÜCRET) AS ORTALAMA
FROM PERSONEL
GROUP BY BÖLÜM_NO;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08050.htm [24.11.2006 21:27:23]


8.2. Gruplama Ýþlemleri

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08050_1.htm [24.11.2006 21:27:23]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08055.htm

8.2.1 GROUP BY Kullanýrken Dikkat Edilecek Noktalar

SELECT deyimi içinde grup fonksiyonlarý, sütun isimleri ile birlikte kullanýlabilirler. Ancak grup fonksiyonlarý; GROUP BY
sözcüðü olmadan aþaðýda gösterildiði biçimde, sütun isimleri ve grup fonksiyonu ile birlikte kullanýlamaz. Örneðin;

SELECT BÖLÜM_NO, COUNT(*)


FROM PERSONEL;

biçiminde bir taným yapýlamaz. Böyle bir amaca ancak aþaðýda gösterildiði biçimde varýlabilir;

SELECT BÖLÜM_NO, COUNT(*)


FROM PERSONEL
GROUP BY BÖLÜM_NO;

Bu son sorgu; her bir bölüm numarasýný ve bu bölümlerdeki personel sayýsýný vermektedir.

GROUP BY ile birlikte sütunlarýn takma isimleri kullanýlamaz.

GROUP BY ie tanýmlanan gruplarýn, burada belirtilen sütunlara göre artan sýrada olduðu varsayýlýr. Sýrayý test
yönde deðiþtirmek söz konusu ise ORDER BY kullanýlýr.

GROUP BY içinde belirtilen sütun isimleri, grup fonksiyonu içinde yer almak zorunda deðildir. Örneðin, her bölümün numarasý
ve ortalama ücretlerini birlikte elde etmek için SELECT deyimi þu þekilde oluþturulabilir;

SELECT BÖLÜM_NO, AVG(ÜCRET)


FROM PERSONEL
GROUP BY BÖLÜM_NO;

GROUP BY içinde belirtilen sütun isimleri , SELECT listesinde yer almak zorunda deðildir. Örneðin; bölüm numarasýna
göre oluþturulan grupta, yani her bölümün ücret ortalamalarýnýn görüntülenmesi için þöyle bir taným yapýlabilir;

SELECT AVG(ÜCRET)
FROM PERSONEL
GROUP BY BÖLÜM_NO;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08055.htm [24.11.2006 21:27:24]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08060.htm

8.2.2 Birden Fazla Sütuna Göre Gruplama

GROUP BY ile bir sütuna göre gruplama yapýlabildiði gibi, birden fazla sütun için de gruplama yapýlabilir.

Örnek

Her bölümü ve bölüm içindeki görevlere göre personeli gruplayarak bu bazda ücret toplamlarý elde etmek amacýyla
SELECT deyimi þu þekilde düzenlenebilir;

SELECT BÖLÜM_NO,GÖREVÝ, SUM (ÜCRET) AS TOPLAM_ÜCRET


FROM PERSONEL
GROUP BY BÖLÜM_NO,GÖREVÝ;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08060.htm [24.11.2006 21:27:24]


8.2.1 Birden Fazla Sütuna Göre Gruplama

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08060_1.htm [24.11.2006 21:27:25]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08065.htm

8.2.3 Grup Koþullarýnýn Kullanýmý

Grup iþlemleri yerine getirilirken, doðal olarak grup bazýnda bazý


sýnýrlamalar söz konusu olabilir. Örneðin, bölüm bazýnda yapýlan bir
iþlemin, bölüm ücret ortalamasýnýn 2000'den büyük ise gerçekleþtirilmesi
istenebilir. Bunun için aþaðýda gösterildiði biçimde bir taným yapýlabilir;

SELECT BÖLÜM_NO, AVG(ÜCRET)


FROM PERSONEL
WHERE AVG(ÜCRET)>2000
GROUP BY BÖLÜM_NO;

Ancak bu deyim istenildiði biçimde çalýþmayacak ve bir hatalý durumla


karþýlaþýlacaktýr çünkü, grup koþullarý WHERE içinde tanýmlanamaz.
Onun yerine HAVING sözcüðü kullanýlýr. Bu sözcük SELECT deyimi içinde
þu þekilde tanýmlanýr;

Örnek 1

PERSONEL tablosunu göz önüne alalým. Ortalama ücreti 3500'den daha fazla olan bölümlerin bölüm numarasý ve o
bölümdeki en yüksek ücret miktarý görüntülenecektir. Amacýmýza uygun SELECT deyimi þu þekilde olabilir;

SELECT BÖLÜM_NO, MAX(ÜCRET) AS EN_ÇOK


FROM PERSONEL
GROUP BY BÖLÜM_NO
HAVING AVG(ÜCRET)>3500;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

Örnek 2

PAZARLAMA bölümü dýþýnda çalýþan personeli görevlerine göre gruplandýrýlarak ücretleri toplanacak ve toplam ücreti
5000 den fazla olanlar seçilecektir. Sonuçlar en düþük ücret toplamýndan büyüðe doðru sýralý olacaktýr. Amacýmýza
uygun SELECT deyimi þu þekilde düzenlenebilir;

SELECT GÖREVÝ, SUM(ÜCRET) AS TOPLAM


FROM PERSONEL
WHERE GÖREVÝ <>'PAZARLAMACI'
GROUP BY GÖREVÝ
HAVING SUM(ÜCRET)>5000
ORDER BY SUM(ÜCRET);

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08065.htm (1 of 2) [24.11.2006 21:27:25]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08065.htm

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08065.htm (2 of 2) [24.11.2006 21:27:25]


8.2.3 Grup Koþullarýnýn Kullanýmý

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08065_1.htm [24.11.2006 21:27:25]


8.2.3 Grup Koþullarýnýn Kullanýmý

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08065_2.htm [24.11.2006 21:27:26]


Untitled Document

Testin nasýl cevaplanacaðýný görmek için buraya týklayýnýz.

Aþaðýda verilen tablolarý göz önüne alarak sorularý yanýtlayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08075.htm (1 of 2) [24.11.2006 21:27:26]


Untitled Document

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT08075.htm (2 of 2) [24.11.2006 21:27:26]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09005.htm

ÇOKLU TABLOLAR

Ýliþkisel veri tabaný yönetim sistemlerinde bazen iliþkili veriler birden fazla tablolara bölünebilir ve bu tablolarda bulunan verilere
ayný anda ihtiyacýmýz olabilir. Bu gibi durumlarda ilgili tablolarý birleþtirerek sorgulama yapmak zorunda kalabiriz. Bu bölümde
bu tip sorgulama yapmayý öðreneceksiniz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09005.htm [24.11.2006 21:27:26]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09010.htm

Bölüm Hedefi

Bu bölümde,

● Sorgularda birden fazla tablo kullanýmýný


● Tablolarýn birleþtirilmesini
● Birleþtirme türlerini
● Eþiti olan birleþtirmeyi
● Eþiti olmayan birleþtirmeyi
● Dýþ birleþtirmeyi
● Kendine birleþtirmeyi
● Küme operatörleriyle birleþtirmeyi

öðreneceksiniz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09010.htm [24.11.2006 21:27:27]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09015.htm

9.1. Çoklu Tablolarýn Kullanýmý

Bazý uygulamalarda veri birden fazla tablo üzerinde yer alabilir. Bu tablo verileri birleþtirilerek sonuçlar elde edilir. Bu
bölümde PERSONEL ve BÖLÜM tablolarýný bu amaçla kullanacaðýz.

● PERSONEL_NO sütunu PERSONEL tablosu üzerindedir.


● BÖLÜM_NO sütunu hem PERSONEL hem de BÖLÜM tablosu üzerinde vardýr.
● KONUM sütunu BÖLÜM tablosundadýr.

Bu iki tablo arasýnda ortak olan BÖLÜM_NO sütunlarý aracýlýðýyla bir iliþki kurulur ve her iki tablo verilerinden oluþan bir
sonuç elde edilir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09015.htm [24.11.2006 21:27:27]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09020.htm

9.2. Tablolarýn Birleþtirilmesi

Birden fazla tablonun ele alýnarak, birleþtirilmesi ve tek bir sonucun üretilmesi söz konusu olabilir. Bu iþleme
"birleþtirme" (join) denir. Birleþtirme iþlemi, tablolarýn ayný deðerler içeren sütunlarý kullanýlmak suretiyle
yapýlýr. Birleþtirme iþlemi þu þekilde tanýmlanýr;

Tanýmdan görüldüðü gibi, iki tabloyu birleþtirmek için bir birleþtirme koþulunun düzenlenmesi gerekiyor. Bu koþul, her
iki tablonun hangi sütunlarý kullanýlarak birleþtirileceðini belirler. Sütun isimlerinin ön tarafýna, tablo isimlerinin yazýlmasý
yararlý olacaktýr. Özellikle her iki tablodaki sütun isimleri ayný ise, söz konusu sütunlarýn hangi tablodan geldiðini
belirtmek mümkün olamayacak ve bu durumda SELECT deyimi çalýþmayacaktýr.

Sadece iki tablo deðil n sayýda tablo da birleþtirilebilir. Ancak bu durumda en az (n-1) birleþtirme koþulu tanýmlanmalýdýr.
Yani, dört adet tabloyu birleþtirmekiçin en az üç birleþtirme koþulu olmalýdýr. Bu koþul, birleþtirilmiþ birincil anahtara
sahip tablolar için geçerli olmayacaktýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09020.htm [24.11.2006 21:27:28]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09025.htm

9.3. Kartezyen Çarpým

Ýki tablo arasýnda birleþtirme koþulu tanýmlanmamýþ ise, sonuç olarak bir kartezyen çarpým elde edilir. Bunun
dýþýnda, birleþtirme koþulu geçersiz ise ve birinci tablodaki tüm satýrlar ikinci tablodaki tüm satýrlarla birleþtirilemiyorsa,
yine kartezyen çarpýmdan söz edilir.

Örnek

PERSONEL ve BÖLÜM tablolarýný göz önüne alalým. Bu iki tabloyu aþaðýda görüldüðü biçimde birleþtirmek istiyoruz.

SELECT PERSONEL_NO, ADI,BÖLÜM_ADI


FROM PERSONEL, BÖLÜM

Bu sorgu çalýþtýrýldýðýnda, PERSONEL ve BÖLÜM tablolarý birleþtirilerek bir sonuç elde edilir. Ancak, herhangi bir
birleþtirme koþulu tanýmlanmadýðý için, her iki tablodaki satýrlarýn sayýsýnýn birbirleriyle çarpýmý kadar satýrdan oluþan
bir sonuç elde edilir. Örneðin; PERSONEL tablosunda 20, BÖLÜM tablosunda ise 5 satýr varsa, bu þekildeki bir sorgu
sonucunda 20x5=100 satordan oluþan bir sonuç bulunur.

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09025.htm [24.11.2006 21:27:28]


9.3. Kartezyen Çarpým

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09025_1.htm [24.11.2006 21:27:28]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09030.htm

9.4. Birleþtirme Türleri

Tablolarý farklý þekillerde birleþtirme olanaðý bulunmaktadýr. Solda, tablolarý birleþtirme türleri verilmiþtir. Bu
birleþtirme türlerinin herbirini ayrýntýlý biçimde ele alarak inceleyeceðiz.

! Birleþtirme türlerini diðerlerini


görmek için 'DEVAM' düðmesine
týklayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09030.htm [24.11.2006 21:27:29]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09035.htm

9.4.1. Eþiti Olan Birleþtirme

Bu tür birleþtirmelere "basit birleþtirme", "eþiti olan birleþtirme" ya da "iç birleþtirme" isimleri verilmektedir. Bu
birleþtirme aþaðýda belirtildiði biçimde gerçekleþtirilir;

Bir personelin çalýþtýðý bölümün adýný elde etmek için; PERSONEL tablosu, BÖLÜM tablosunun BÖLÜM_NO isimli
sütununun içeriði ile karþýlaþtýrýlýr. Yani her iki tablo arasýndaki BÖLÜM_NO sütununun içerdiði deðerlerin eþit
olmasý durumunda birleþtirme gerçekleþtirilmiþ olur.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09035.htm [24.11.2006 21:27:29]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09040.htm

9.4.1.1 Eþiti Olan Birleþtirme Ýle Kayýtlarýn Seçilmesi

Eþiti olan birleþtirmelere örnek olarak aþaðýdaki sorguyu düzenliyoruz;

Bu deyim þu þekilde yorumlanacaktýr;

PERSONEL tablosundan alýnan sütunlar PERSONEL ön ekiyle tanýmlanmýþtýr. Örneðin, PERSONEL.PERSONEL_NO gibi.
Bu durumda PERSONEL tablosundan, PERSONEL_NO, PERSONEL_ADI,BÖLÜM_NO; BÖLÜM tablosundan ise, BÖLÜM_NO ve
KONUM isimli sütunlarýnýn alýnacaðý anlaþýlmaktadýr.

FROM sözcüðü ardýndan yazýlan tablo isimleri, bu birleþme iþlemine tabi tutulacak tablolarý belirlemektedir.

WHERE deyimi içinde tanýmlanan koþul, PERSONEL tablosunun BÖLÜM_NO sütunu içeriði ile BÖLÜM tablosunun BÖLÜM_NO
sütunu içeriðinin karþýlaþtýrýlmasýna neden olacaktýr. Bu koþul gerçekleþtiði takdirde, SELECT listesinde belirlenen
sütunlar görüntülenecektir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09040.htm [24.11.2006 21:27:29]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09045.htm

9.4.1.2 Sütun Ýsimlerindeki Belirsizlik

Birleþtirme iþleminde, SELECT listesindeki her bir sütunun, ilgili tablo ile gösterilebildiðini gördük. Bu, her iki tablodaki
alan isimlerinin ayný olmasý durumunda sorun yaratacaktýr. Örneðin; PERSONEL.BÖLÜM_NO ve BÖLÜM.BÖLÜM_NO
yerine sadece BÖLÜM_NO yazýlsaydý, SQL bunu yorumlayamayacaktý çünkü, bu sütunun hangi tablodan
alýnacaðý belirtilmemiþtir. Bu durumda SELECT deyimi hata mesajý verecektir.

Sadece bir tabloda yer alan sütun isimlerinin, yukarýda belirtildiði gibi, tablo isimleri ile birlikte belirtilmesi zorunluluðu yoktur.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09045.htm [24.11.2006 21:27:30]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09050.htm

9.4.1.3 Tablolar için Takma Ýsimlerin Kullanýmý

Birleþtirme iþlemlerinde, birden fazla tablo kullanýldýðý için, sütun isimleri ilgili tablo isimleriyle birlikte kullanýlýyordu.
Özellikle uzun tablo isimlerinde bu tür sorgularý ifade etmek zorluklar yaratabilir. Gerçek tablo isimleri yerine daha kýsa
tablo isimleri vermek mümkündür.

Bu tür bir tanýma FROM sözcüðü içinde yer verilir. Tablonun gerçek isminin hemen ardýndan bir boþluk býrakýlarak takma
isim tanýmlanýr. SELECT deyiminin herhangi bir yerinde, gerçek tablo ismi yerine bu takma isim kullanýlabilir.

Örnek

Aþaðýdaki SELECT deyimini göz önüne alalým;

SELECT PERSONEL.PERSONEL_NO,PERSONEL.ADI,
PERSONEL.BÖLÜM_NO,BÖLÜM.BÖLÜM_ADI,BÖLÜM.KONUM
FROM PERSONEL,BÖLÜM
WHERE PERSONEL.BÖLÜM_NO=BÖLÜM.BÖLÜM_NO;

Sorgu içinde PERSONEL tablosuna P; BÖLÜM tablosuna ise, B takma ismini vererek ayný sorguyu aþaðýda gösterildiði
biçimde düzenleyebiliriz;

SELECT P.PERSONEL_NO,P.ADI,
P.BÖLÜM_NO,B.BÖLÜM_ADI,B.KONUM
FROM PERSONEL P,BÖLÜM B
WHERE P.BÖLÜM_NO=B.BÖLÜM_NO;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09050.htm [24.11.2006 21:27:30]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09055.htm

9.4.1.4 AND Ýþlecinin Kullanýmý

Birleþtirme koþuluna ek olarak, WHERE sözcüðü içinde baþka koþullara da yer verilebilir. Örneðin, BEGÜM isimli
personelin; personel numarasý, adý, bölüm numarasý ve bölümünün konumunu listelemek için þöyle bir sorgu tanýmlanabilir:

SELECT P.PERSONEL_NO,P.ADI,B.BÖLÜM_ADI,B.KONUM
FROM PERSONEL P, BÖLÜM B
WHERE P.BÖLÜM_NO=B.BÖLÜM_NO
AND P.ADI='BEGÜM';

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09055.htm [24.11.2006 21:27:31]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09060.htm

9.4.2. Eþiti Olmayan Birleþtirme

Eþiti olan birleþtirmelerde, iki tablonun belirlenen iki sütununun içeriði karþýlaþtýrýlýyor ve her iki sütunda ayný
deðerle karþýlaþýnca ilgili bilgiler listeleniyordu. Eðer, birinci tablonun bir sütununa ikinci tabloda doðrudan uyan bir sütun
yoksa, eþiti olmayan birleþtirmelerden söz edilir.

Örnek

Yukarýdaki animasyonda bulunan PERSONEL ve ÜCRET_DÜZEY tablolarýný göz önüne alalým. PERSONEL tablosundaki her
bir personelin ücretlerinin hangi ücret grubuna girdiðini öðrenmek istiyoruz. Ücret gruplarý ÜCRET_DÜZEY tablosu
içinde tanýmlanmýþtýr.

Bu iki tabloyu, eþiti olan birleþtirme yoluyla birleþtirmek mümkün deðildir. Çünkü PERSONEL tablosu ile ÜCRET_DÜZEY
arasýnda bu tür bir iliþkiyi saðlayacak ortak bir sütun yoktur. Bu tür bir birleþtirmeyi saðlamak için WHERE sözcüðü içinde
(=) iþleci yerine BETWEEN…AND iþlecinden yararlanýlýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09060.htm (1 of 2) [24.11.2006 21:27:31]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09060.htm

SELECT ADI,ÜCRET,DERECE
FROM PERSONEL,ÜCRET_DÜZEY
WHERE ÜCRET BETWEEN ENAZ AND ENÇOK;

Karþýlaþýlan problemin türüne göre BETWEEN iþleci yerine; "<=,>=" iþleçleri de kullanýlabilir.

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09060.htm (2 of 2) [24.11.2006 21:27:31]


9.4.2. Eþiti Olmayan Birleþtirme

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09060_1.htm [24.11.2006 21:27:31]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09065.htm

9.4.3. Dýþ Birleþtirme

Eþiti olan birleþtirmelerde; bir tablonun bir sütununun içerdiði deðerler, diðer tablonun ilgili sütununda eþleþtiriliyor ve
ancak eþleþebilen deðerler birleþtiriliyordu. Doðal olarak, eþleþemeyen satýrlar birleþtirilemeyecek ve sonuca
dahil edilemeyecektir.

Eðer bu þekilde eþleþemeyen kayýtlarýn da sonuca dahil edilmesi isteniliyorsa; dýþ birleþtirme yönteminin
uygulanmasý gerekecektir. Örneðin, PERSONEL ve BÖLÜM tablolarýnýn aþaðýda gösterildiði biçimde olduðunu varsayalým.

Bu iki tablo incelendiðinde, BÖLÜM tablosunda yer alan REKLAM bölümünde herhangi bir personelin çalýþmadýðý
görülecektir. Ýki tablo; eþiti olan birleþtirme yöntemine göre birleþtirilirse, sonuç içinde bu bölüm adý görüntülenmeyecektir.
Böyle durumlarda eþleþmeyen kayýtlarý da birleþtirme iþlemine katmak için; dýþ birleþtirme yöntemi uygulanýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09065.htm [24.11.2006 21:27:32]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09070.htm

9.4.3.1 Dýþ Birleþtirme Nasýl Tanýmlanýr ?

Dýþ birleþtirmeler, eþleþmeyen kayýtlar hangi tabloda yer alýyorsa ona baðlý olarak iki farklý biçimde düzenlenebilir:

SELECT tablo1.sütun1, tablo2.sütun2


FROM tablo1, tablo2
WHERE tablo1.sütun1(+)=tablo2.sütun2

veya

SELECT tablo1.sütun1, tablo2.sütun2


FROM tablo1, tablo2
WHERE tablo1.sütun1=tablo2.sütun2(+)

Tanýmda (+) iþaretlerinin yer almasý, dýþ birleþme olayýnýn olduðunu göstermektedir. Bu iþaret eksik bilginin olduðu
tarafa yerleþtirilir.

Örnek

PERSONEL ve BÖLÜM tablolarýný göz önüne alalým. BÖLÜM tablosunda yer alan, ancak PERSONEL tablosunda yer almayan
ve REKLAM bilgisini içeren bir satýr bulunmaktadýr. Bu iki tabloyu, karþýlaþmayan kayýtlarý da görüntüleyecek
biçimde birleþtirmek ve sonucu listelemek istiyoruz. Bunun için aþaðýdaki yol izlenir:

SELECT P.ADI,P.BÖLÜM_NO,B.BÖLÜM_ADI
FROM PERSONEL P,BÖLÜM B
WHERE P.BÖLÜM_NO(+)=B.BÖLÜM_NO;

Bilgi eksikliði PERSONEL tablosundadýr çünkü, BÖLÜM tablosunda yer alan REKLAM satýrý, PERSONEL tablosunda yoktur.
O halde (+) iþareti, PERSONEL tablosunun ilgili sütunu yanýnda tanýmlanmýþtýr. Bu iþlemin aynýsýný MS Jet
SQL'de gerçekleþtirmek için biraz daha farklý taným yapmak gerekiyor. Bu tür bir dýþ birleþme için LEFT JOIN…ON
sözcükleri kullanýlýr.

SELECT P.ADI, B.BÖLÜM_ADI


FROM BÖLÜM B LEFT JOIN PERSONEL P
ON B.BÖLÜM_NO = P.BÖLÜM_NO;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09070.htm [24.11.2006 21:27:32]


9.4.3.1 Dýþ Birleþtirme Nasýl Tanýmlanýr ?

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09070_1.htm [24.11.2006 21:27:33]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09075.htm

9.4.4. Kendine Birleþtirme

Bazý uygulamalarda birleþtirme iþlemi, iki ayrý tablo yerine tek bir tablodaki veriler kullanýlarak yapýlýr. Örneðin,
PERSONEL tablosunu aþaðýda görüldüðü gibi, iki farklý tablo biçiminde düþünebiliriz. Böylece bu iki tabloyu birleþtirerek
çeþitli sonuçlar elde etmek imkânýmýz vardýr.

Örnek

PERSONEL tablosunun YÖNETÝCÝSÝ baþlýklý sütunu; her bir personelin yöneticisinin, personel numarasýný içermektedir.
Hangi yöneticilerin hangi personel ile çalýþtýðýný belirlemek istiyoruz. Bu amaçla SELECT deyimi þu þekilde düzenlenebilir:

SELECT P.PERSONEL_NO AS NO, P.ADI AS PERSONEL, Y.ADI AS YÖNETÝCÝSÝ


FROM PERSONEL P, PERSONEL Y
WHERE Y.PERSONEL_NO=P.YÖNETÝCÝSÝ;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09075.htm [24.11.2006 21:27:33]


9.4.4. Kendine Birleþtirme

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09075_1.htm [24.11.2006 21:27:33]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09080.htm

9.5. Küme Ýþleçlerini Kullanarak Birleþtirme

SQL deyimleri içinde küme iþlemlerini temel alarak, çeþitli sorgulamalar yapýlabilir. Bu tür sorgularda küme
iþleçlerinden yararlanýlýr. Küme iþleçleri sayesinde birden fazla tablo birleþtirilerek sonuçlar alýnabilir.

! Birleþtirme türlerini diðerlerini


görmek için 'DEVAM' düðmesine
týklayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09080.htm [24.11.2006 21:27:34]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09085.htm

9.5.1. UNION ve UNION ALL Ýþleçleri

UNION iþleci; verilen koþul ifadesine uygun olarak çift kayýtlarý göz ardý eder ve her iki kümedeki tüm kayýtlarý seçer.
Buna karþýlýk, verilen koþul ifadesine uygun olarak çift kayýtlar da dahil olmak üzere, tüm kayýtlarýn seçilmesi söz konusu
ise; UNION ALL iþleci kullanýlýr.

Örnek

PERSONEL tablosunda, adý "A" ile baþlayanlarý veya görevi "M" ile baþlayanlarý topluca listelemek istiyoruz.

Burada iki ayrý koþuldan söz edilebilir. Bunlardan birincisi, adýnýn ilk harfi "A" ile baþlayan personelin oluþturduðu
kümedir. Ýkincisi ise; görevi "M" harfi ile baþlayanlarýn oluþturduðu kümedir.

A={Adý "A" harfi ile baþlayan personel}


B={Görevi "M" harfi ile baþlayan personel}

Bu durumda sorgu içinde; UNION iþlecinin kullanýlmasý gerektiði anlaþýlmaktadýr. SELECT deyimi þu þekilde düzenlenir:

SELECT ADI, GÖREVÝ


FROM PERSONEL
WHERE ADI LIKE 'A%'
UNION
SELECT ADI, GÖREVÝ
FROM PERSONEL
Union Ýþlecinin Etkisi WHERE GÖREVÝ LIKE 'M%';

Bu deyim çalýþtýrýldýðýnda, birbirinin ayný olan yani, çift kayýtlar görüntülenmez. Eðer çift kayýtlarýn da
görüntülenmesi isteniliyorsa; UNION ALL iþleci kullanýlýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09085.htm [24.11.2006 21:27:34]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09090.htm

9.5.2. INTERSECT Ýþleci

Her iki koþula da uygun kayýtlarý elde etmek için; INTERSECT iþleci kullanýlýr. Bu iþleç, iki kümenin ara kesiti olarak
düþünülür ve iki bölgedeki kayýtlarýn seçilmesini saðlar.

Örnek

PERSONEL tablosunda, adý "A" ile baþlayanlarý ve görevi "M" ile baþlayan kayýtlarý bulacaðýz. Amacýmýza uygun
SELECT deyimi þu þekilde olabilir:

SELECT ADI, GÖREVÝ


FROM PERSONEL
WHERE ADI LIKE 'A%'
INTERSECT
SELECT ADI, GÖREVÝ
FROM PERSONEL
WHERE GÖREVÝ LIKE 'M%';

INTERSECT Ýþlecinin Etkisi

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09090.htm [24.11.2006 21:27:34]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09095.htm

9.5.3. MINUS Ýþleci

Birinci kümede olan, ikinci kümede olmayan kayýtlarý seçmek amacýyla; MINUS iþlecinden yararlanýlabilir.

Örnek

Adý "A" ile baþlayan ancak iþi, "M" ile baþlamayan kayýtlarý listelemek gerektiðinde; MINUS iþlecine baþvurulur. Bunun
anlamý, birinci sorguda ismi "A" ile baþlayanlar; ikinci sorguda da iþi, "M" ile baþlayanlar aranýlacaktýr. MINUS iþleci, bu
iki küme arasýndaki farký ortaya çýkaracaktýr.

A={Adý "A" harfi ile baþlayanlar}


B={Görev adý "M" harfi ile baþlayanlar}

Amacýmýza uygun SELECT deyimi þu þekilde düzenlenebilir:

SELECT ADI, GÖREVÝ


FROM PERSONEL
WHERE ADI LIKE 'A%'
MINUS
SELECT ADI, GÖREVÝ
FROM PERSONEL
WHERE GÖREVÝ LIKE 'M%';

MINUS Ýþlecinin Etkisi

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09095.htm [24.11.2006 21:27:35]


Untitled Document

Testin nasýl cevaplanacaðýný görmek için buraya týklayýnýz.

Aþaðýda verilen tablolarý göz önüne alarak sorularý yanýtlayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09105.htm (1 of 2) [24.11.2006 21:27:35]


Untitled Document

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT09105.htm (2 of 2) [24.11.2006 21:27:35]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10005.htm

KARMAÞIK SORGULAR

Veri Tabaný Yönetim Sistemleri, verilerin düzenli bir þekilde depolanýp gerektiði þekilde iþlenmelerini saðlar. Veri iþlemek
için sorgulama yapmak esastýr. Bazen istediðimiz sonuçlarý veri tabanýmýzdan almak için karmaþýk sorgular yazmak
zorunda kalabiliriz. Karmaþýk sorgularý yazarken, belirli kurallara göre ve dikkatli hareket etmemiz gerekir.

Bu bölümde incelediðimiz ve vurguladýðýmýz kurallara uymak; karmaþýk sorgularýmýzýn bize doðru çýktýlar
vermesini saðlayacaktýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10005.htm [24.11.2006 21:27:36]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10010.htm

Bölüm Hedefi

Bu bölümde,

● Alt sorgu kavramýný,


● Alt sorgu düzenleme kurallarýný,
● Tek satýr alt sorgularýný,
● Çok satýrlý alt sorgularý,
● Çok sütunlu alt sorgularý,
● From sözcüðü içinde alt sorgu tanýmlamayý

öðreneceksiniz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10010.htm [24.11.2006 21:27:36]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10015.htm

10.1. Alt Sorgu Kavramý

Þu ana kadar ele alarak incelediðimiz tüm sorgular; önceki bölümde öðrendiðimiz iþleçler yardýmýyla yapýlan
birleþtirmeler dýþýnda, tek bir ana sorgudan oluþuyordu. Dolayýsýyla, sorgu içinde sadece bir SELECT deyimine yer veriliyordu.

Uygulamada, bir sorgudan elde edilen sonuç, bir diðer sorguyu ilgilendirebilir. Bu gibi durumlarda alt sorgular ya da bir
baþka deyiþle iç sorgular kullanýlýr.

Þu soruyu göz önüne alalým: "Hangi personelin ücreti, "HALÝT" isimli personelin ücretinden daha fazladýr?" Bu problemi iki
farklý sorguya ayýrmak mümkündür:

Sorgu 1: "HALÝT" isimli personelin aylýk ücreti nedir?


Sorgu2: Hangi personelin ücreti, "HALÝT" isimli personelin ücretinden daha fazladýr?

Yukarýdaki iki sorguyu aþaðýdaki þekilde analiz ederek bir sorgu biçimine döndürebiliriz. Alt sorgular bu amaçla tanýmlanýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10015.htm [24.11.2006 21:27:36]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10020.htm

10.1.1. Alt Sorgunun Tanýmlanmasý

Bir alt sorgu aþaðýda gösterildiði biçimde tanýmlanýr:

SELECT liste
FROM tablo
WHERE ifade iþleç
(SELECT liste
FROM tablo);

Tanýmda görüldüðü gibi, iki SELECT deyimi ile bir farklý sorgu tanýmlanmýþtýr. Bu iki sorgu birbirine WHERE koþul
sözcüðü içinde baðlanmýþtýr. Bir alt sorgu, aþaðýdaki sözcükler içinde kullanýlabilir:

● WHERE
● HAVING
● FROM

Örnek

Personel numarasý "110" olan personelin ücretinden daha fazla ücret alan personel isimlerini listelemek istiyoruz.
Amacýmýza uygun SELECT deyimi þu þekilde olabilir:

SELECT ADI,ÜCRET
FROM PERSONEL
WHERE ÜCRET >
( SELECT ÜCRET
FROM PERSONEL
WHERE PERSONEL_NO=110 );

Bu sorgu çalýþtýrýldýðýnda, þöyle bir yol izlenecektir:

a. Alt sorgu Personel numarasý "110" olan personelin ücretini bulacaktýr. Bu ücret; "5000" dir.
b. Elde edilen ücret bilgisi ana sorgudaki WHERE sözcüðü içinde yerine konulacaktýr. Yani ana sorgunun WHERE koþulu þu
þekli almýþ olacaktýr:
WHERE ÜCRET > 5000
c. Ana sorgu bu þekilde çalýþýr. Yani ücreti "5000" den fazla olan personelin listesi görüntülenir.

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10020.htm [24.11.2006 21:27:37]


10.1.1. Alt Sorgunun Tanýmlanmasý

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10020_1.htm [24.11.2006 21:27:37]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10025.htm

10.1.2. Alt Sorgu Düzenleme Kurallarý

Alt sorgular düzenlenirken aþaðýdaki kurallara uymak gerekmektedir:

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10025.htm [24.11.2006 21:27:38]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10030.htm

10.2. Tek Satýr Alt Sorgularý

Sadece bir deðer döndüren alt sorgulardýr. Ýç taraftaki SELECT deyiminden sadece tek bir deðer elde edilir. Bu sorgularda
soldaki animasyonda yer alan iþleçler kullanýlýr.

Örnek

Personel numarasý "140" olan personelle ayný göreve sahip olan personelin isimlerini listelemek istiyoruz. Amacýmýza
aþaðýdaki sorgu yardýmýyla ulaþabiliriz:

SELECT ADI,GÖREVÝ
FROM PERSONEL
WHERE GÖREVÝ =
(SELECT GÖREVÝ
FROM PERSONEL
WHERE PERSONEL_NO=140);

Bu sorgu çalýþtýrýldýðýnda, alt sorgu sonucunda "140" numaralý personelin görevi, yani "ÞEF" deðeri elde edilir. Ana sorgu
ise görevi "ÞEF" olanlarý sorgular.

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

! Karþýlaþtýrma Ýþleçleri ve anlamlarý


görmek için 'DEVAM' düðmesine
týklayýnýz. Örnek

Personel numarasý "155" olan personelle ayný göreve sahip olan ve "350" numaralý personelin ücretinden daha fazla ücret
alan personeli listelemek istiyoruz.

SELECT ADI,GÖREVÝ,ÜCRET
FROM PERSONEL
WHERE GÖREVÝ =
(SELECT GÖREVÝ
FROM PERSONEL
WHERE PERSONEL_NO=155)
AND ÜCRET>
(SELECT ÜCRET
FROM PERSONEL
WHERE PERSONEL_NO=350);

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10030.htm [24.11.2006 21:27:38]


10.2. Tek Satýr Alt Sorgularý

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10030_1.htm [24.11.2006 21:27:38]


10.2. Tek Satýr Alt Sorgularý

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10030_2.htm [24.11.2006 21:27:39]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10035.htm

10.2.1. Grup Fonksiyonlarýnýn Kullanýmý

Grup fonksiyonlarý sadece bir deðer döndürdüðü için, bu tür fonksiyonlar tek satýr alt sorgularýnda kullanýlabilir.

Örnek

Personel arasýnda en az ücret alanlarý listelemek istiyoruz. Bu sorgu doðal olarak alt sorgularla yapýlabilir. Önce alt sorgu
içinde en az ücret alan personel belirlenecek, bulunan deðer ana sorgu içinde bu ücrete göre seçilecektir. Amacýmýza
uygun SELECT deyimi þu þekilde olabilir:

SELECT ADI,ÜCRET
FROM PERSONEL
WHERE ÜCRET =
(SELECT MIN(ÜCRET)
FROM PERSONEL);

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10035.htm [24.11.2006 21:27:39]


10.2.1. Grup Fonksiyonlarýnýn Kullanýmý

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10035_1.htm [24.11.2006 21:27:39]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10040.htm

10.2.2. HAVING ile Grup Koþullarýnýn Tanýmlanmasý

Ana sorgu grup fonksiyonu içeriyorsa, doðal olarak grup koþullarýnýn tanýmlanmasý gerekebilecektir. Yani HAVING sözcüðü
de kullanýlacaktýr. Bu durumda SELECT deyimi þu þekli alacaktýr:

SELECT liste
FROM tablo
GROUP BY sütun
HAVING fonksiyon iþleç
(SELECT fonksiyon
FROM tablo);

Örnek

En düþük ücreti "20" numaralý bölümün en düþük ücretinden daha büyük olan bölümleri listelemek istiyoruz.
Amacýmýza ulaþmak için þu þekilde bir akýl yürüteceðiz: :

a) "20" numaralý bölümün en az ücret alan personeli belirlenecektir.


b) Bulunan bu deðer, diðer tüm bölümlerin en düþük ücretleriyle karþýlaþtýrýlacak
c) Eðer bu deðer bölümlerin en düþük ücretlerinden daha küçük ise ilgili bölüm listelenecektir.

Belirtilen bu adýmlara uygun SELECT deyimi þu þekilde olabilir:

SELECT BÖLÜM_NO,MIN(ÜCRET) AS ENAZ_ÜCRET


FROM PERSONEL
GROUP BY BÖLÜM_NO
HAVING MIN(ÜCRET) >
(SELECT MIN(ÜCRET)

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10040.htm (1 of 2) [24.11.2006 21:27:40]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10040.htm

FROM PERSONEL
WHERE BÖLÜM_NO=20);

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10040.htm (2 of 2) [24.11.2006 21:27:40]


10.2.2. HAVING ile Grup Koþullarýnýn Tanýmlanmasý

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10040_1.htm [24.11.2006 21:27:40]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10045.htm

10.2.3. Alt Sorgularda Hatalý Çalýþma Durumu

Tek satýr alt sorgularýnýn yapýsýný ve özelliklerini biliyoruz. Bu tür alt fonksiyonlar, sadece bir deðer üreterek, onu ana
sorguya aktarýr. Eðer alt sorgu tek satýrlý alt sorgu olarak düþünülüyorsa, bunu bozabilecek tanýmlardan kaçýnmak
gerekiyor. Aksi takdirde söz konusu sorgu çalýþmaz. Eðer alt sorgunun birden fazla deðer üretmesi söz konusu ise, çoklu satýr
alt sorgularýný tanýmlamak gerekiyor.

Örnek

Aþaðýdaki alt sorguyu göz önüne alalým.

SELECT PERSONEL_NO,ADI
FROM PERSONEL
WHERE ÜCRET >
(SELECT MIN(ÜCRET)
FROM PERSONEL
GROUP BY BÖLÜM_NO);

Bu sorgu çalýþtýrýldýðýnda, amaca ulaþýlamayacaktýr. Çünkü alt sorgu gruplandýrýlmýþtýr ve doðal olarak grup
fonksiyonu herbir grup için bir deðer üretir. Yani birden fazla satýr listelenecektir. Ancak ana sorgunun WHERE sözcüðü
içinde kullanýlan (=) iþleci bir tek satýr iþlecidir. Alt sorgudan sadece bir deðer beklemektedir. Bu durum gerçekleþmediði
için SELECT deyimi bir hata mesajý görüntüleyerek iþlemi sonlandýrýr. Ayný sorgu þu þekilde düzenlenseydi hata durumu
ortaya çýkmayacaktý:

SELECT PERSONEL_NO,ADI
FROM PERSONEL
WHERE ÜCRET >
(SELECT MIN(ÜCRET)
FROM PERSONEL);

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10045.htm [24.11.2006 21:27:41]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10050.htm

10.3. Çok Satýrlý Alt Sorgular

Alt sorgudan bir satýr yerine, daha fazla sayýda satýr elde ediliyorsa, bu kez sorgu bir çoklu satýr alt sorgularý
olarak deðerlendirilir. Ancak bu tür sorgular farklý iþleçler yardýmýyla gerçekleþtirilir. Aþaðýdaki animasyonda çoklu
satýr iþleçlerine yer veriyoruz.

Yukarýda sayýlan iþleçlerden hiçbiri NOT iþleci ile birlikte kullanýlamaz!

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10050.htm [24.11.2006 21:27:41]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10055.htm

10.3.1. IN Ýþleci

Bir liste içindeki deðerlerden birini seçmek için IN iþlecini kullanýyorduk. Örneðin,

SELECT ADI, ÜCRET,GÖREVÝ


FROM PERSONEL
WHERE ÜCRET IN(2000,2500,3000);

biçimindeki bir sorgu, ÜCRET sütunu içeriðinin, IN iþleci ile belirlenen listedeki deðerlerle karþýlaþtýrýlmalarýný saðlýyordu.
Bu tür bir iþlem, alt sorgularda da gerçekleþtirilebilir.

Örnek

Bir liste içindeki deðerlerden birini seçmek için IN iþlecini kullanýyorduk. Örneðin,

SELECT ADI,ÜCRET,GÖREVÝ
FROM PERSONEL
WHERE ÜCRET IN(
SELECT MIN(ÜCRET)
FROM PERSONEL
GROUP BY BÖLÜM_NO);

biçimindeki bir sorgu, ÜCRET sütunu içeriðinin, IN iþleci ile belirlenen listedeki deðerlerle karþýlaþtýrýlmalarýný saðlýyordu.
Bu tür bir iþlem, alt sorgularda da gerçekleþtirilebilir.

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10055.htm [24.11.2006 21:27:41]


10.3.1. IN Ýþleci

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10055_1.htm [24.11.2006 21:27:42]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10060.htm

10.3.2. ANY Ýþleci

Alt sorgu tarafýndan üretilen herbir deðeri ana sorgu içinde belirlenen bir deðerle karþýlaþtýrmak söz konusu ise ANY
iþleci kullanýlýr. Bu iþleç "=,<,>" iþleçlerinden biri ile birlikte kullanýlýr. "=ANY" biçimindeki bir taným IN tanýmý ile
eþdeðerdir. "<ANY" ifadesi "en çoktan daha az"; ">ANY" ise "en azdan daha büyük" anlamýnda deðerlendirilir.

Örnek

En fazla kazanan MEMUR dan daha az maaþý olan personeli listelemek istiyoruz. Amacýmýza uygun sorgu þu þekilde olabilir.

SELECT ADI,ÜCRET,GÖREVÝ
FROM PERSONEL
WHERE ÜCRET <ANY(
SELECT ÜCRET
FROM PERSONEL
WHERE GÖREVÝ='MEMUR');

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

Örnek

En düþük ücretli MEMUR dan daha fazla maaþý olan personeli listelemek için aþaðýda belirtilen yol izlenebilir:

SELECT ADI,ÜCRET,GÖREVÝ
FROM PERSONEL
WHERE ÜCRET >ANY(
SELECT ÜCRET
FROM PERSONEL
WHERE GÖREVÝ='MEMUR');

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10060.htm [24.11.2006 21:27:42]


10.3.2. ANY Ýþleci

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10060_1.htm [24.11.2006 21:27:43]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10065.htm

10.3.3. ALL Ýþleci

Alt sorgu tarafýndan üretilen tüm deðerlerin, ana sorgu için bir girdi olarak kullanýlmasý söz konusu ise ALL iþleci
kullanýlabilir. ">ALL" ifadesi "en büyükten daha büyük"; "<ALL" ise "en küçükten daha küçük" olanlarý ifade eder.

Örnek

Ücreti tüm bölümlerin ortalama ücretinden daha büyük olan personellerii listelemek istiyoruz. Amacýmýza uygun sorgu þu
þekilde olabilir:

SELECT ADI,ÜCRET
FROM PERSONEL
WHERE ÜCRET >ALL(
SELECT AVG(ÜCRET)
FROM PERSONEL
GROUP BY BÖLÜM_NO);

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10065.htm [24.11.2006 21:27:43]


10.3.3. ALL Ýþleci

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10065_1.htm [24.11.2006 21:27:43]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10070.htm

10.4. Çok Sütunlu Alt Sorgular

Önceki bölümde, alt sorgunun ürettiði bir sütun, ana sorgu için bir girdi olarak kullanýlýyordu. Bazý uygulamalarda alt
sorgunun birden fazla sütun üretmesi ve koþul içinde bu deðerlerin kulanýlmasý söz konusu olabilir. Böyle durumlarda
aþaðýda belirtildiði biçimde sorgu tanýmlanýr. Bu tür bir taným MS Access'de, yani MS Jet SQL'de geçerli deðildir.

SELECT liste
FROM tablo
WHERE sütun1, sütun2,... IN
( SELECT sütun1, sütun2,...
FROM tablo
WHERE koþul );

Örnek

"SEZÝN" isimli personelin görevi ve ücretiyle ayný olan personeli listelemek istiyoruz. Sorgu þu þekilde düzenlenebilir:

SELECT BÖLÜM_NO, ADI,ÜCRET


FROM PERSONEL
WHERE (GÖREVÝ,ÜCRET) IN
(SELECT GÖREVÝ,ÜCRET
FROM PERSONEL
WHERE ADI='SEZÝN');

Ancak bu sorguya "SEZÝN" in kendi bilgileri de dahil edilmiþtir. Dahil edilmesi istenmiyorsa þu þekilde bir taným yapýlýr:

SELECT BÖLÜM_NO, ADI,ÜCRET


FROM PERSONEL
WHERE (GÖREVÝ,ÜCRET) IN
(SELECT GÖREVÝ,ÜCRET
FROM PERSONEL
WHERE ADI='SEZÝN')
AND ADI<>'SEZÝN';

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10070.htm [24.11.2006 21:27:44]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10075.htm

10.5. FROM Sözcüðü Ýçinde Alt Sorgu Tanýmlama

Normal olarak bir SELECT deyiminde kullanýlabilecek tablolar, yani veri kaynaðý FROM sözcüðü içinde
tanýmlanýr. Ancak gerektiðinde bir alt sorgunun sonuçlarý da týpký bir tablo gibi deðerlendirilerek, FROM
içinde bu sorgu yer alabilir.

Örnek

Bir bölümün ortalama ücretinden daha fazla ücret alan tüm personelin ortalama ücretlerini listelemek
istiyoruz. Amacýmýza uygun sorgulama þu þekilde olabilir:

SELECT P.BÖLÜM_NO, P.ADI,P.ÜCRET, S.MAAÞ


FROM PERSONEL P,(SELECT BÖLÜM_NO,AVG(ÜCRET) AS MAAÞ
FROM PERSONEL
GROUP BY BÖLÜM_NO) S
WHERE P.BÖLÜM_NO=S.BÖLÜM_NO
AND P.ÜCRET>S.MAAÞ;

Burada, PERSONEL tablosu yanýsýra bir alt sorgu tanýmlanmaktadýr. Bu sorgu týpký bir tablo gibi
düþünülerek ona S adý verilmiþtir. Bu sorgu bölümlerin ücret ortalamalarýný üretmektedir.

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10075.htm [24.11.2006 21:27:44]


10.5. FROM Sözcüðü Ýçinde Alt Sorgu Tanýmlama

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10075_1.htm [24.11.2006 21:27:45]


Untitled Document

Testin nasýl cevaplanacaðýný görmek için buraya týklayýnýz.

Aþaðýda verilen tablolarý göz önüne alarak sorularý yanýtlayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10085.htm (1 of 2) [24.11.2006 21:27:45]


Untitled Document

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT10085.htm (2 of 2) [24.11.2006 21:27:45]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11005.htm

DML (Data Manipulation Language)

Veri Tabaný Yönetim Sistemlerinin tablolarýnda yer alan kayýtlarý; deðiþtirmek, silmek ve yeni kayýtlar eklemek için SQL
dilinin bir alt dili olan DML'i kullanabiliriz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11005.htm [24.11.2006 21:27:45]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11010.htm

Bölüm Hedefi

Bu bölümde,

● DML'in hangi iþlere yaradýðýný,


● Tablolara yeni satýr eklemeyi,
● Tablolardaki verilerin güncelleþtirilmesini,
● Tablodan satýr silme iþlemini,
● Hareket iþleme kavramýný,
● Hareketin baþlatýlmasý ve sona erdirilmesini

öðreneceksiniz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11010.htm [24.11.2006 21:27:46]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11015.htm

11.1. DML Nedir ?

SQL'de SELECT deyimi ile sorgulama iþlemleri yapýlýyordu. Bunlarý önceki bölümlerde ayrýntýlý biçimde ele alarak inceledik.
Bu tür iþlemler, sadece sorgulama yapar. Tablolar üzerinde herhangi bir deðiþikliðe yol açmaz.

Eðer bir tabloya yeni kayýt ilave edilmesi, var olan bir satýr üzerinde deðiþiklikler yapýlmasý veya bir satýrýn yok edilmesi
söz konusu ise, sorgulama deyimleri bir iþe yaramaz. Onun yerine baþka yöntemlere baþvurmak gerekir.

DML-(Data Manipulation Lanquage) adý verilen dil yardýmýyla; veri tabaný tablolarý üzerinde kayýt ekleme, veri
deðiþtirme ve kayýt silme gibi iþlemler yapýlabilir. Bu bölümde söz konusu dilin temel özelliklerini inceleyeceðiz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11015.htm [24.11.2006 21:27:46]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11020.htm

11.2. Tabloya Satýr Ekleme

Bir tabloya yeni bir satýr eklemek gerektiðinde INSERT INTO deyimi kullanýlýr. Bu deyim aþaðýda gösterildiði
biçimde tanýmlanýyor:

INSERT INTO tablo (sütunlar)


VALUES (deðerler);

tablo Kayýt ekleme iþleminin yapýlacaðý tablonun adý.

sütunlar Eklenecek satýrlarýn sütun isimleri.

deðerler Herbir sütuna girilecek yeni deðerler.

Bu deyim her çalýþtýðýnda tabloya yeni bir satýr eklenir. INSERT INTO deyimi içinde sütun isimlerini belirlemek zorunlu
deðildir. Ancak, bu durumda sütunlarýn tablo tanýmýndaki varsayýlan sýrasý kabul edilir.

Örnek

BÖLÜM tablosunun aþaðýda görüldüðü biçimde 6 adet kayýta sahip olduðunu varsayalým:

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11020.htm (1 of 2) [24.11.2006 21:27:47]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11020.htm

Yukarýda olduðu gibi, herhangi bir tablonun satýrlarýný nasýl görüntüleyeceðimizi geçen derslerden biliyoruz. Bu iþlem
aþaðýda belirtildiði biçimde SELECT sorgulama deyimi ile yapýlýr:

SELECT *
FROM BÖLÜM;

Bu tabloya yeni bir bölüm eklemek istiyoruz. Eklenecek yeni bölüm ile ilgili veriler þu þekildedir:

Bölümün numarasý : 70

Bölümün adý : EÐÝTÝM

Bölümün konumu : KADIKÖY

Söz konusu bir kayýtý eklemek için aþaðýdaki deyim kullanýlýr:

INSERT INTO BÖLÜM(BÖLÜM_NO,BÖLÜM_ADI,KONUM)


VALUES(70,'EÐÝTÝM','KADIKÖY');

Bu þekilde kayýt ekleme iþlemi gerçekleþtirildikten sonra, BÖLÜM tablosu yeniden görüntülenirse, tablonun en sonuna söz
konusu kayýtýn eklendiði görülür.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11020.htm (2 of 2) [24.11.2006 21:27:47]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11025.htm

11.2.1. NULL Deðerlerin Tabloya Eklenmesi

Tablonun bir sütununa NULL deðerin girilmesi gerekebilir. Bu gibi durumlarda, iki yöntemden biri
kullanýlabilir. Birinci yöntemde, INSERT INTO deyimi içinde NULL deðeri girilecek sütun adý
belirtilmez. Ýkinci yöntemde ise, söz konusu sütuna doðrudan NULL deðeri atanýr.

Sütun adý belirtilmez.

Sütuna NULL deðeri kaydedilir.

Örnek

BÖLÜM tablosuna yeni bir kayýt ekleyeceðiz. Eklenecek satýrda KONUM sütununa NULL deðerini
atamak için INSERT INTO deyimi aþaðýda belirtilen biçimlerde kullanýlabilir.

a. INSERT INTO BÖLÜM(BÖLÜM_NO,BÖLÜM_ADI)


VALUES(80,'BÝLGÝ ÝÞLEM');
b. INSERT INTO BÖLÜM
VALUES(80,'BÝLGÝ ÝÞLEM',NULL);

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11025.htm [24.11.2006 21:27:47]


11.2.1. NULL Deðerlerin Tabloya Eklenmesi

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11025_1.htm [24.11.2006 21:27:47]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11030.htm

11.2.2. Tablolara Satýr Eklerken Fonksiyonlarýn Kullanýmý

INSERT INTO deyimi içinde bazý özel deðerlerin girilmesi söz konusu ise, SQL fonksiyonlarý kullanýlabilir.

Örnek

PERSONEL tablosuna yeni bir kayýt ekleme esnasýnda, GÝRÝÞ_TAR isimli alana o günün tarih ve zaman bilgisini kaydetmek
için þöyle bir yol izlenebilir:

INSERT INTO PERSONEL(PERSONEL_NO,ADI,GÖREVÝ,ÜCRETÝ,


GÝRÝÞ_TAR,KOMÝSYON,BÖLÜM_NO)
VALUES(600,'SERAY','MEMUR',2800,
SYSDATE,NULL,30);

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11030.htm [24.11.2006 21:27:48]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11035.htm

11.2.3. Bir Diðer Tablodan Satýr Kopyalama

INSERT INTO deyimi ile, tabloya belirlenen deðerleri içeren bir satýr eklenebildiði gibi, bir baþka tablodan okunan satýrlar
da eklenebilir. Diðer tablodan satýrlarý okumak için SELECT sorgulama deyimi kullanýlýr. Bu durumda VALUES
sözcüðü kullanýlmaz.

Bir tablodan satýr okuyarak, bir diðer tabloya eklemek için aþaðýda belirtilen taným kullanýlýr:

INSERT INTO tablo (sütunlar)


alt sorgu;

Alt sorgudan elde edilecek sütunlar ile INSERT INTO içinde tanýmlanan sütunlar karþýlýklý eþleþecektir. O nedenle, ayný
veri türüne sahip olmalarýna dikkat etmek gerekiyor.

Bir tablodan bir baþka tabloya kayýt ekleme

Örnek

YÖNETÝCÝLER isimli bir tabloya, PERSONEL tablosunda yer alan ve görevi "MÜDÜR" veya "ÞEF" olanlarý seçerek
eklemek istiyoruz. Amacýmýza uygun deyimler þu þekilde olacaktýr:

INSERT INTO YÖNETÝCÝLER(PERSONEL_NO,ADI,


GÖREVÝ,ÜCRET,BÖLÜM_NO)
SELECT PERSONEL_NO,ADI,
GÖREVÝ,ÜCRET,BÖLÜM_NO
FROM PERSONEL
WHERE GÖREVÝ='MÜDÜR'
OR GÖREVÝ='ÞEF';

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11035.htm [24.11.2006 21:27:48]


11.2.3. Bir Diðer Tablodan Satýr Kopyalama

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11035_1.htm [24.11.2006 21:27:49]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11040.htm

11.3 Tablodaki verileri güncelleme

Bir tablonun içerdiði deðerler gerektiðinde deðiþtirilecektir. Bu amaçla UPDATE deyiminden yararlanýlýr. Bu deyim þu
þekilde tanýmlanýr:

UPDATE tablo
SET sütun1=deðer1, sütun2=deðer2,…
[WHERE koþul];

Verilerin güncelleþtirilmesi için WHERE deyimi ile bir koþul tanýmlanabilir. Bu tanýmýn yapýlmadýðý durumlarda, söz
konusu tablonun tüm satýrlarý güncelleþtirilmiþ olacaktýr.

Örnek

Personel numarasý "300" olan personelin ücretini "2500" olarak deðiþtirmek istiyoruz. Bunu saðlamak için þöyle bir yol izlenir:

UPDATE PERSONEL
SET ÜCRET=2500
WHERE PERSONEL_NO=300;

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11040.htm [24.11.2006 21:27:49]


11.3. Tablodaki Verileri Güncelleme

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11040_1.htm [24.11.2006 21:27:49]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11045.htm

11.3.1. Bir Baþka Tablodan Okunan Verilerle Güncelleme

Güncelleme iþlemi, bir tablodan okunan deðerlere baðlý olarak da yapýlabilir. Bunun için ikinci tablodan kayýt okuma
iþlemi SELECT deyimi ile gerçekleþtirilir.

Bir tablodan okunan verilerle diðerini güncelleme

Örnek

Numarasý "350" olan personel ile ayný göreve sahip tüm personelin bölüm numarasýný, "90" olarak deðiþtirmek
istiyoruz. Amacýmýza þu þekilde ulaþabiliriiz:

UPDATE PERSONEL
SET BÖLÜM_NO=90
WHERE GÖREVÝ=(SELECT GÖREVÝ
FROM PERSONEL
WHERE PERSONEL_NO=350);

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11045.htm [24.11.2006 21:27:50]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11050.htm

11.3.2. Güncelleme Sorunlarý

Bir tablo üzerinde bütünlük sýnýrlamalarý yapýlmýþ olabilir. Bu gibi durumlarda güncelleþtirme iþlemlerinde
sorunlarla karþýlaþýlabilir. Sýnýrlama iþlemleri ile ilgili daha ayrýntýlý bilgiyi daha sonraki derslerde vereceðiz.

Örnek

"10" numaralý bölüme sahip tüm bölüm numaralarýný "55" olarak deðiþtirmek istiyoruz.

UPDATE PERSONEL
SET PERSONEL_NO=55
WHERE BÖLÜM_NO=10;

PERSONEL ve BÖLÜM tablolarý üzerinde bütünlük sýnýrlamalarý tanýmlandýðýný varsayalým. PERSONEL ve


BÖLÜM tablolarýnýn birincil anahtarlarý bulunmaktadýr. BÖLÜM tablosunun birincil anahtarý BÖLÜM_NO'dur. Ayný
alan PERSONEL tablosunda dýþ anahtar olarak yer almaktadýr. Bu iki tablonun BÖLÜM_NO alanlarýna göre iki
tablo iliþkilendirilmiþtir.

Sayýlan bu sýnýrlamalar nedeniyle, PERSONEL tablosunun BÖLÜM_NO sütununda yer alacak tüm deðerlerin BÖLÜM
tablosunun BÖLÜM_NO tablosundaki deðerlerle ayný olmasý gerekmektedir. Yukarýdaki UPDATE deyimi ise sadece
PERSONEL tablosu üzerinde bu alaný deðiþtirmeye çalýþmaktadýr. Sýnýrlama tanýmlarý yüzünden bu iþlem yerine
getirilmeyerek kullanýcý uyarýlýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11050.htm [24.11.2006 21:27:50]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11055.htm

11.4. Tablodan Satýr Silme

Tabloda yer alan bir veya daha fazla sayýda satýr silinebilir. Silme iþlemi için DELETE deyimi kullanýlýr. Bu deyim þu
þekilde tanýmlanýyor:

DEELETE [FROM] tablo


[WHERE koþul];

Örnek 1

BÖLÜM isimli tablonun tüm kayýtlarýný silmek için þöyle bir yol izlenebilir:

DELETE FROM BÖLÜM;

Ancak bu tür bir silme iþleminin gerçekleþtirilebilmesi için, bu tablo üzerinde bütünlük sýnýrlamalarýnýn bulunmamasý
gerektiði unutulmamalýdýr. Bu tablonun PERSONEL tablosu arasýnda bütünlük iliþkilerinin tanýmlandýðýný varsayacak
olursak, bu silme iþleminin gerçekleþmeyeceðini söyleyebiliriz.

Örnek 2

BÖLÜM isimli tabloda yer alan ve bölüm kodu "60" olan bölümü silmek istiyoruz. Bunun için DELETE deyimi þu
þekilde düzenlenebilir:

DELETE FROM BÖLÜM


WHERE BÖLÜM_NO=60;

BÖLÜM ile PERSONEL arasýnda bütünlük sýnýrlamalarý tanýmlanmýþ olmasýna raðmen, amaçlanan silme iþlemi
gerçekleþir. Çünkü "60" numaralý bölüm BÖLÜM tablosunda tanýmlanmasýna raðmen, PERSONEL tablosunda bu bölümle
ilgili herhangi bir kayýt bulunmamaktadýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11055.htm (1 of 2) [24.11.2006 21:27:51]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11055.htm

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11055.htm (2 of 2) [24.11.2006 21:27:51]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11060.htm

11.4.1. Bir Baþka Tablodan Okunan Verileri Kullanarak Silme Ýþlemi

Bir tablodan doðrudan doðruya belirlenen satýrlarý silebileceðimiz gibi, bir baþka tablodan okunan verilere baðlý olarak da
ilgili satýrlar silinebilir.

Örnek

PERSONEL tablosundan "SATIÞ" bölümüne iliþkin tüm satýrlarý silmek istiyoruz. Bu amaçla aþaðýda belirtildiði biçimde bir
iþlem yapýlabilir:

DELETE FROM PERSONEL


WHERE BÖLÜM_NO=
(SELECT BÖLÜM_NO
FROM BÖLÜM
WHERE BÖLÜM_ADI='SATIÞ');

Yukarýdaki sorgulamanýn sonucunu görmek için linke týklayýnýz

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11060.htm [24.11.2006 21:27:51]


11.4.1. Bir Baþka Tablodan Okunan Verileri Kullanarak Silme Ýþlemi

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11060_1.htm [24.11.2006 21:27:52]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11065.htm

11.5. Hareket Ýþleme

Veri tabanlarýný doðal olarak ayný anda çok sayýda kiþi kullanacaktýr. Kullanýcý; veri ekleyebilir, veriyi deðiþtirebilir
hatta silebilir. Bu deðiþikliklerin diðer kullanýcýlarý hemen etkilemesi istenmez. Çünkü yapýlan bazý iþlemlerin iptal edilerek,
veri tabanýnýn önceki hale dönüþmesi gerekebilir. Yani veri üzerinde bir deðiþiklik yaptýðýmýzda, bunun sonucunu
sadece kendimiz görürüz. Gerek görülürse; bu deðiþikliklerin kalýcý hale getirilerek diðer kullanýcýlar tarafýndan da
görülmesi saðlanabilir. Bu tür bir amaca ulaþmak için hareket iþleme (transaction processing) kavramýný bilmek gerekir.

Verinin deðiþtirilmesi üzerinde etkili olan DML deyimleri çalýþtýrýldýðýnda, "veri tabaný hareketleri " (database
transactions) oluþur. Baþlayan bir hareket COMMIT ya da ROLLBACK deyimleri çalýþtýrýlýncaya dek sona ermez ve
sonuçlarý kalýcý deðildir. Bu deyimlerden biri çalýþtýrýldýðýnda veya bir baþka DDL deyimi (örneðin CREATE)
çalýþtýrýldýðýnda da hareket son bulur. Ayrýca bilgisayarýn çalýþmasý sona erince ya da sistem bozulmalarýnda (crashes)
veri tabaný hareketleri sona erecektir.

Veri tabaný hareketleri INSERT, UPDATE ve DELETE gibi deyimlerin çalýþtýrýlmasý sonucunda baþlar.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11065.htm [24.11.2006 21:27:52]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11070.htm

11.5.1. Hareketin Sona Erdirilmesi

Veri tabaný hareketlerinin baþlamasý için INSERT,UPDATE veya DELETE deyimlerinden birinin çalýþtýrýlmasý yeterlidir.
Ancak bir kullanýcýnýn bu þekilde yaptýðý bir iþlemin sonucu diðer kullanýcýyý etkilemez. Bu þekilde baþlayan bir iþlemi
sona erdirmek için COMMIT kullanýlýr.

Örnek

Veri tabaný kullanýcýlarýndan birinin aþaðýdaki deyimi çalýþtýrdýðýný varsayalým.

UPDATE PERSONEL
SET BÖLÜM_NO=10
WHERE PERSONEL_NO=300;

Bu deyimin çalýþtýrýlmasý ardýndan, "300" numaralý personelin bölüm numarasý "10" olarak deðiþtirilir. Söz konusu
deðiþiklik sadece bu deyimi çalýþtýran kullanýcý için yapýlmýþtýr. Veri tabanýna ulaþan diðer kullanýcýlar bu
deðiþikliðin sonucunu görmezler. Çünkü kullanýcýnýn yarattýðý hareket sona ermemiþtir. Ayný kullanýcý bu kez,

COMMIT;

deyimini çalýþtýracak olursa, yaptýðý tüm deðiþiklikler kalýcý hale gelir ve diðer veri tabaný kullanýcýlarý da bu
deðiþikliði algýlamýþ olurlar.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11070.htm [24.11.2006 21:27:52]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11075.htm

11.5.2. Deðiþikliklerin Geri Alýnmasý

Veri tabaný üzerinde bir kullanýcý tarafýndan gerçekleþtirilen deðiþikliðin kalýcý hale gelmesi için COMMIT
deyiminden yararlanýyoruz. Bu deyim çalýþtýrýlmadýðý sürece, tüm DML deyimlerinin etkileri geri alýnabilir. Yani deðiþiklikler
iptal edilebilir. Böyle bir amaca ulaþmak için,

ROLLBACK;

deyimi kullanýlýr.

Örnek

PERSONEL tablosunun tüm kayýtlarýný silmek için,

DELETE FROM PERSONEL;

Deyiminin çalýþtýrýldýðýný varsayalým. Bu deyim çalýþtýrýldýðýnda, bu deyimi çalýþtýran kullanýcý için PERSONEL
tablosunun tüm kayýtlarý silinmiþtir. Henüz COMMIT deyimi çalýþtýrýlmadýðý için diðer kullanýcýlar bu iþlemden etkilenmez
ve bu durumda, silinen kayýtlarý geri alma olanaðý bulunmaktadýr. Silme iþlemini iptal etmek için,

ROLLBACK;

deyimi çalýþtýrýlýrsa, PERSONEL tablosunun eski haline dönüþtüðü görülür.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11075.htm [24.11.2006 21:27:53]


Untitled Document

Testin nasýl cevaplanacaðýný görmek için buraya týklayýnýz.

Aþaðýda verilen tablolarý göz önüne alarak sorularý yanýtlayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11085.htm (1 of 2) [24.11.2006 21:27:53]


Untitled Document

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT11085.htm (2 of 2) [24.11.2006 21:27:53]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12005.htm

Veri Tabaný Nesneleri

Bir veri tabaný için en önemli nesne; tablodur. Görünümler ve indeksler ise, veri tabanlarý için diðer önemli nesneler
olarak söylenebilir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12005.htm [24.11.2006 21:27:53]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12010.htm

Bölüm Hedefi

Bu bölümde,

● Veri tabaný nesnelerini,


● Tablolarýn yaratýlmasýný,
● Tablo tanýmlarý üzerinde deðiþiklik iþlemlerinin yapýlmasýný,
● Tablolara sýnýrlamalar koymayý,
● Sýnýrlama türlerini,
● Görünümlerin yaratýlmasý ve kullanýmýný,
● Ýndeksler yaratýlmasýný ve sebeplerini,

öðreneceksiniz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12010.htm [24.11.2006 21:27:54]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12015.htm

12.1. Veri tabaný Nesneleri

Bir veri tabaný farklý yapýlara sahip birçok nesneden oluþmaktadýr. Tüm veri tabaný iþlemleri ve verinin yönetilmesi, bu
nesneler yardýmýyla olmaktadýr. Veri tabanlarý çeþitli amaçlara yönelik farklý birçok nesne içerebilir. Bu nesnelerin en
önemlilerini aþaðýda görebilirsiniz;

● Tablolar
● Görünümler
● Ýndeksler

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12015.htm [24.11.2006 21:27:54]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12020.htm

12.2. Tablolar

Tablolar veri tabanýnýn temel yapýlarýdýr. Tablo yapýlarýnýn en önemli özellikleri þunlardýr:

a) Tablolar herhangi bir anda, hatta veri tabanýnýn bir kullanýcý tarafýndan kullanýlmasý esnasýnda bile yaratýlabilir.

b) Tablolar için bir boyut belirlemeye gerek yoktur. Ancak yine de tablonun ne kadarlýk bir hacime ulaþabileceðini tahmin
etmekte yarar vardýr.

Veri tabanlarýnda iki türlü tablo yer almaktadýr:

Bu tablolar herhangi bir veri tabaný kullanýcýsý tarafýndan yaratýlan tablolardýr. Söz konusu tablolarýn
Kullanýcý tablolarý
isimleri ve sütunlarý doðal olarak kullanýcý tarafýndan belirlenmiþtir.

Veri tabaný sunucusu tarafýndan kullanýlan ve bakýmý onun tarafýndan yapýlan tablolardýr. Veri
tabanýnýn yönetilmesine yönelik olan bu tablolar ve görünümler (views), veritabaný sözlüðünü
Veri sözlüðü
(database dictionary) oluþtururlar. Bu tablolara sistem yöneticisi dýþýnda herhangi bir kullanýcýnýn
eriþmesi ya da müdahale etmesi mümkün deðildir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12020.htm [24.11.2006 21:27:55]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12025.htm

12.2.1. Tablolarý Ýsimlendirme

Tablolara doðal olarak bir isim vermek gerekecektir. Ýsimlendirirken bazý kurallara uymak gerekmektedir :

Tablo isimleri büyük-küçük harf ayrýmýna karþý duyarlý deðildir. Küçük harflerle ya da büyük harflerle veya karýþýk
yazýlmasý fark etmez. Tablo isimleri verilirken aþaðýda sýralanan hususlara dikkat edilmesi tavsiye edilir:

a) Tablo ya da sütun isimleri iliþkili olduðu konuya uygun biçimde belirlenmelidir.

Ayný sütunlar birden fazla tablo içinde yer alýyorsa, ayný isimleri vermek yararlý olacaktýr. Örneðin PERSONEL ve
b) BÖLÜM tablosu içindeki bölüm numarasýný içeren sütunlar BÖLÜM_NO biçiminde belirlenmiþtir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12025.htm [24.11.2006 21:27:55]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12030.htm

12.2.2. Veri Türleri

Tablolar yaratýlýrken, her bir sütunun veri türü mutlaka belirlenmelidir Çeþitli amaçlara uygun veri türleri bulunmaktadýr.
ORACLE sunucuda geçerli olan bu veri türlerinin temel olanlarýný soldaki ; tamamýný ise aþaðýdaki canlandýrmada görebilirsiniz:

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12030.htm [24.11.2006 21:27:55]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12035.htm

12.2.3. Tablolarýn Yaratýlmasý

Tablolarýn yaratýlabilmesi için CREATE TABLE deyimi kullanýlýr. Bu deyim þu þekilde tanýmlanýr:

CREATE TABLE [þema.] tablo


(sütun veri türü [DEFAULT ifade],…);

þema Tablonun sahibini belirler

tablo Yaratýlacak tablonun adý

sütunlar Tablonun herbir sütunu

veri türü Herbir sütunun veri türü

DEFAULT ifade Sütuna veri giriþi yapýlmadýðýnda, o sütunun varsayýlan deðerini belirler

Veri tabanýndaki nesneler topluluðuna þema adý verilebilir. Þema nesneleri, veri tabaný içindeki verilere doðrudan karþýlýk
gelen mantýksal yapýlardýr. Þema nesneleri tablolar, görünümler, dizinler ve diðer nesnelerdir. Bir tablo belirli bir kullanýcýya
ait ise, tablo adý kullanýcý adý ile birlikte ifade edilir.

Bir sütunun deðeri, daha tablo yaratýlýrken varsayýlan deðer (default value) olarak atanabilir. Burada doðrudan bir deðer, bir ifade
veya bir fonksiyon belirlenebilir. Ancak belirtlenen deðer, ilgili sütunun veri türüne uygun olmalýdýr. Örneðin, PERSONEL
tablosunun GÝRÝÞ_TAR isimli alaný, personelin iþe giriþ tarihini içerecektir. Eðer herhangi bir deðer kaydedilmez ise,
bu personelin tabloya kaydedildiði günün tarihini iþe giriþ tarihi olarak kabul etmek istiyoruz. Bu amaçla DEFAULT sözcüðü,

… GÝRÝÞ_TAR DATE DEFAULT SYSDATE biçiminde kullanýlabilir.

Örnek

BÖLÜM tablosunun aþaðýdaki sütunlardan oluþmasý gerektiðini varsayalým:

BÖLÜM_NO Sayýsal deðerler içerecektir. En fazla 2 karakter olabilir.

BÖLÜM_ADI Bölüm adýný içerecektir. En fazla 15 karakter olabilir.

KONUM Bölümün yerini belirleyecekitir. En fazla 13 karakter olabilir.

Bu tablo aþaðýda belirtildiði biçimde yaratýlabilir:


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12035.htm (1 of 2) [24.11.2006 21:27:56]
file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12035.htm

CREATE TABLE BÖLÜM


(BÖLÜM_NO NUMBER(2),
BÖLÜM_ADI VARCHAR2(15),
KONUM VARCHAR2(13));

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12035.htm (2 of 2) [24.11.2006 21:27:56]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12040.htm

12.2.4. Bir Alt Sorgu Ýle Tablolarýn Yaratýlmasý

Bir tablo yaratýldýktan sonra, INSERT INTO deyimi yardýmýyla, bu tabloya bir baþka tablodan sorgulama iþlemi yapýlarak
bilgi giriþ yapýlabilir. Ancak, bilgi giriþ iþlemi daha tablo yaratýlýrken de yapýlabilir. Bunun için, CREATE TABLE deyimi bir
alt sorgu ile birlikte kullanýlabilir.

CREATE TABLE tablo


[(sütunlar)]
AS
altsorgu ;

CREATE TABLE deyiminde sütun tanýmlarý yapýlmamýþ ise, alt sorgudan elde edilen sütunlar yeni yaratýlacak olan
tablonun sütunlarýný oluþturacaktýr. Eðer CREATE TABLE deyimi içinde sütun tanýmlarý verilmiþ ise, bunlarýn sayýsý
alt sorgudan elde edilen sütun sayýsý ile ayný olmalýdýr. Bu durumda yeni tablo sütunlarý ile alt sorgu sütunlarý sýraya
göre eþleþir.

Örnek

PER20 isimli bir tablo yaratacaðýz. Bu tablo PERSONEL tablosunda yer alan ve "20" numaralý bölüme iliþkin
personel kayýtlarýný içerecektir. PERSONEL tablosundaki aylýk ücret bilgileri yýllýða çevrilerek PER20 tablosuna yazdýrýlacaktýr.

CREATE TABLE PER20


AS
SELECT PERSONEL_NO, ADI, ÜCRET*12 AS YILLIK
FROM PERSONEL
WHERE BÖLÜM_NO=20;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12040.htm [24.11.2006 21:27:57]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12045.htm

12.2.5. Tabloya Yeni Bir Sütun Ekleme

Bir tablo yaratýldýktan sonra, gerektiðinde yeni sütunlar eklenebilir. Bu amaçla ALTER deyimi kullanýlýr. ALTER deyimi þu
þekilde tanýmlanýyor:

ALTER TABLE tablo


ADD ((sütun1 veri türü [DEFAULT ifade]
[,sütun2 veri türü]…);

Örnek

Daha önce yaratýlan PER20 isimli tabloya GÖREVÝ isimli yeni bir sütun eklemek istiyoruz. Bu sütun VARCHAR2 veri türüne
sahip olacak ve en fazla 9 karakter içerebilecektir. Bunun için þöyle bir yol izlenir:

ALTER TABLE PER20


ADD (GÖREVÝ VARCHAR2(9));

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12045.htm [24.11.2006 21:27:57]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12050.htm

12.2.6. Bir Sütun Tanýmýný Deðiþtirmek

Tablo yaratýldýktan sonra, gerektiðinde bir sütun ile ilgili tanýmlarda bazý deðiþiklikler yapýlabilir. Bunun için ALTER
deyimi MODIFY sözcüðü ile birlikte þu þekilde kullanýlýr:

ALTER TABLE tablo


MODIFY ((sütun1 veri türü [DEFAULT ifade]
[,sütun2 veri türü]…);

Sütun tanýmlarý istenildiði biçimde deðiþtirilemez. Bu iþlemi yerine getirirken bazý noktalara dikkat etmek gerekiyor:

Örnek

PER20 isimli tablonun ADI isimli sütunun geniþliðini 15 karakter olarak deðiþtirmek istiyoruz. Bunun için aþaðýda belirtilen
yol izlenir:

ALTER TABLE PER20


MODIFY (ADI VARCHAR2(15));

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12050.htm [24.11.2006 21:27:58]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12055.htm

12.2.7. Tablo Adýnýn Deðiþtirilmesi

Bir tablo veya diðer veri tabaný nesnelerinin adýný deðiþtirmek gerekebilir. Bu amaçla RENAME deyimi kullanýlýr. Bu deyim
þu þekilde tanýmlanýyor:

RENAME eski adý TO yeni adý;

Nesnenin adýný deðiþtirirken, isimlendirme ile ilgili kurallara uymak gerekmektedir.

Örnek

Veri tabanýndaki BÖLÜM isimli tablounun adýný YENÝ_BÖLÜM olarak deðiþtirmek için þöyle bir yol izlenebilir:

RENAME BÖLÜM TO YENÝ_BÖLÜM;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12055.htm [24.11.2006 21:27:58]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12060.htm

12.2.8 Tablonun Yok Edilmesi

Gerektiðinde bir tablo veri tabanýndan silinebilir. Böyle bir amaca ulaþmak için DROP deyimi kullanýlýr. Söz konusu deyim
þu þekilde tanýmlanýyor:

DROP TABLE tablo

Bu deyim tehlikeli sonuçlara neden olabilecek bir deyimdir. O halde kullanýrken bazý noktalara dikkat etmek gerekiyor:

Örnek

PER20 isimli tabloyu yok etmek için aþaðýda belirtilen yol izlenir:

DROP TABLE PER20;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12060.htm [24.11.2006 21:27:58]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12065.htm

12.2.9. Tablonun Budanmasý

Bir tablonun bazý satýrlarý ve gerektiðinde tüm satýrlarýnýn nasýl silinebildiðini biliyoruz. DELETE deyimini bu amaçla
kullandýk. Benzer biçimde, bir tablonun tüm satýrlarýný yok etmek gerektiðinde TRUNCATE TABLE deyimi kullanýlýr. Bu
deyim þu þekilde tanýmlanýr:

TRUNCATE TABLE tablo

DELETE ve TRUNCATE deyimleri tablonun tüm satýrlarýnýn yok edilmesi neden olur. Ancak, DELETE deyimi tablonun
silinen satýrlarýndan boþalan alaný yok etmez. TRUNCATE ise bu alaný yok eder.

DELETE deyimi çalýþtýrýldýktan sonra ROLLBACK deyimi ile iþlemler geri alýnabiliyordu. TRUNCATE deyimi
çalýþtýrýldýktan sonra silinen satýrlar geri alýnamaz.

Örnek

BÖLÜM tablosunun tüm satýrlarýný silmek için TRUNCATE deyimi þu þekilde kullanýlýr:

TRUNCATE TABLE BÖLÜM;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12065.htm [24.11.2006 21:27:59]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12070.htm

12.3. Tablolara Sýnýrlamalarýn Eklenmesi

Veri tabaný tablolarýna geçersiz veri giriþlerinin önüne geçmek ve bazý denetimleri gerçekleþtirmek ve bütünlüðü saðlamak
üzere sýnýrlamalar (constraints) tanýmlanýr. Bu sýnýrlamalar tablo seviyesinde denetimleri saðlar. Sýnýrlamalar,
çoðunlukla aþaðýda sýralanan amaçlara uymak amacýyla kullanýlýr.

● Bir tablodan kayýt silme, tabloya satýr ekleme veya güncelleþtirme iþlemlerine sýnýrlamalar
getirmek,
● Bir tablo bir baþka tabloyla iliþkili ise, kayýt ilavelerinde ve kayýt silme iþlemlerindeki
tutarsýzlýklarý önlemek.

Veri tabanýnda, veri bütünlüðünü saðlayan çeþitli sýnýrlamalar tanýmlanabilir. Aþaðýdaki tablo bu sýnýrlamalarý açýklamaktadýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12070.htm [24.11.2006 21:27:59]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12075.htm

12.3.1. Tablo Yaratýlýrken Sýnýrlamanýn Tanýmlanmasý

Tablolara konulacak sýnýrlamalar, aþaðýda görüldüðü biçimde daha tablo yaratýlýrken belirlenebilir:

CREATE TABLE [þema.] tablo


(sütun veri türü [DEFAULT ifade],…) [sütun sýnýrlamasý]
....
[tablo sýnýrlamalarý];

Bu tanýma göre, iki tür sýnýrlama olabilmektedir. Bunlardan birincisi, sütun düzeyinde; diðeri ise tablo düzeyindedir.
Sütun düzeyindeki sýnýrlamalar NOT NULL, UNIQUE olup, doðrudan ilgili sütunun karþýsýnda tanýmlanýrlar. Diðerleri
ise CONSTRAINT sözcüðü yardýmýyla tablo düzeyinde tanýmlanýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12075.htm [24.11.2006 21:28:00]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12080.htm

12.3.1.1 NOT NULL Sýnýrlamasý

Bir tablonun herhangi bir sütununun hiçbir zaman boþ kalmamasý istenebilir. Yani bu sütun NULL deðerler içermeyecektir. Bu
tür bir amaca NOT NULL sýnýrlamasý yardýmýya ulaþýlabilir. Böyle bir sýnýrlama tablo satýrlar üzerine konulabilir.

Örnek

PERSON tablosuna bilgi giriþlerinde, personel adý ve bölüm numarasý ile ilgili sütunlarýn mutlaka dolu olmasýný istiyoruz. Bu
tür bir amaca ulaþmak için PERSON tablosu þu þekilde yaratýlabilir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12080.htm [24.11.2006 21:28:00]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12085.htm

12.3.1.2 UNIQUE Sýnýrlamasý

Tablonun bir sütununa girilen bir deðerin, ayný sütun içinde tekrarlanmamasý istenilebilir. UNIQUE anahtar sýnýrlamasý böyle
bir amaç için kullanýlýr. Söz konusu anahtara "tek anahtar" adý da verilmektedir. Bu tür bir anahtar tek bir sütun
yardýmýyla oluþturulabileceði gibi, gerektiðinde birden fazla sütun bir araya getirilerek de oluþturulabilir. Bu durumda
"birleþik tek anahtar" kavramýndan söz edilir.

UNIQUE anahtarýnýn tanýmlandýðý sütun için NOT NULL sýnýrlamasý da tanýmlanabilir. Eðer tanýmlanmaz ise, NULL
deðerler içeren çok sayýda satýr eklenebillir. Çünkü NULL deðerler herhangi bir deðerle eþleþmediði için, "tek olma"
koþulunu bozmaz. CREATE TABLE deyimi içinde UNIQUE sýnýrlamasý þu þekilde tanýmlanýr:

CONSTRAINT UNIQUE anahtar adý


UNIQUE( sütun adý );

Örnek

BÖLÜM tablosunun BÖLÜM_NO isimli sütunu çift deðerlere izin vermeyecektir. Bu koþula uygun tablo þu þekilde yaratýlabilir:

CREATE TABLE BÖLÜM


(BÖLÜM_NO NUMBER(4),
BÖLÜM_ADI VARCHAR2(14),
KONUM VARCHAR2(13),
CONSTRAINT BL
UNIQUE(BÖLÜM_ADI));
file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12085.htm (1 of 2) [24.11.2006 21:28:01]
file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12085.htm

Burada BÖLÜM isimli tablo yaratýlýrken, BÖLÜM_ADI için UNIQUE sýnýrlamasý tanýmlanmýþ ve bu sýnýrlamaya BL
adý verilmiþtir. Bu tabloya artýk bölüm adý ayný olan ikinci bir kayýt eklenemez.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12085.htm (2 of 2) [24.11.2006 21:28:01]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12090.htm

12.3.1.3 PRIMARY KEY Sýnýrlamasý

Bir tablo için birincil anahtarýn tanýmlanmasý söz konusu ise, PRIMARY KEY sýnýrlamasý kullanýlýr. Bir tablo için sadece bir
adet birincil anahtar yaratýlabilir. Ancak birden fazla sütun bir araya getirilerek de birincil anahtar oluþturulabilir. Birincil
anahtar olarak tanýmlanan bir sütun NULL deðerler veya tekrarlý deðerler içeremez.

CREATE TABLE deyimi içinde birincil anahtar þu þekilde tanýmlanýr:

CONSTRAINT birincil anahtar adý


PRIMARY KEY ( sütun adý );

Örnek

BÖLÜM tablosunun BÖLÜM_NO isimli sütununu birincil anahtar olarak tanýmlamak istiyoruz. Birincil anahtarýn adý PR
olacaktýr. Bunun için aþaðýdaki tanýmý yapmak yeterlidir:

CREATE TABLE BÖLÜM


(BÖLÜM_NO NUMBER(4),
BÖLÜM_ADI VARCHAR2(14),
KONUM VARCHAR2(13),
CONSTRAINT PR
PRIMARY KEY(BÖLÜM_NO));

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12090.htm (1 of 2) [24.11.2006 21:28:01]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12090.htm

Ayný anda birden fazla sýnýrlamayý da tanýmlayabilir. Örneðin, birincil anahtar yanýsýra, BÖLÜM_ADI için, BL adýný
taþýyan UNIQUE anahtar tanýmý birlikte yapýlabilir:

CREATE TABLE BÖLÜM


(BÖLÜM_NO NUMBER(4),
BÖLÜM_ADI VARCHAR2(14),
KONUM VARCHAR2(13),
CONSTRAINT BL
UNIQUE(BÖLÜM_ADI),
CONSTRAINT PR
PRIMARY KEY(BÖLÜM_NO));

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12090.htm (2 of 2) [24.11.2006 21:28:01]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12095.htm

12.3.1.4 FOREIGN KEY Sýnýrlamasý

Ýki tablo arasýnda iliþkisel bütünlüðü (referential integrity) saðlamak amacýyla FOREIGN KEY, yani dýþ
anahtar sýnýrlamasý tanýmlanýr. Bu sýnýrlamalar bir sütun olarak tasarlandýðý gibi, bazý durumlarda birden fazla
sütunun birleþimi olarak da düþünülebilir. Bir tablo için tanýmlanan dýþ anahtar, bir baþka tablonun birincil anahtarý
ile iliþkilendirilir.

CREATE TABLE deyimi içinde dýþ anahtar þu þekilde tanýmlanýr.

CONSTRAINT dýþanahtarýn adý


FOREIGN ( sütun adý )
REFERENCES tablo(sütun adý);

FOREIGN KEY sýnýrlamalarý ile ilgili tanýmlarda bazý özel sözcüklere yer vereceðiz. Aþaðýda bu sözcükler hakkýnda kýsaca
bilgi veriyoruz:

FOREIGN KEY Yaratýlacak tablonun dýþ anahtar olarak seçilen sütununu tanýmlar.

REFERENCES Bu tablonun iliþkili olduðu tablonun birincil anahtarýný belirtir.

ON DELETE CASCADE Ana tablodan bir satýr silindiðinde; iliþkili olduðu tabloda, bu satýr ile iliþkili tüm kayýtlarýn
silinmesini saðlar.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12095.htm (1 of 2) [24.11.2006 21:28:02]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12095.htm

Örnek

PERS isimli yeni bir tablo yaratýlacaktýr. PERS tablosu içindeki ADI ve BÖLÜM_NO alanlarý NULL deðerler içermeyecektir.
Bu tablo BÖLÜM tablosu ile BÖLÜM_NO sütununa göre iliþkili olacaktýr. O halde, BÖLÜM tablosunun BÖLÜM_NO
sütununa baðlý olarak bir dýþ anahtar tanýmlanacaktýr. Bu anahtarýn adý FK olacaktýr. Amacýmýza uygun PERS tablosu
þu þekilde yaratýlabilir:

CREATE TABLE PERS


(PERSONEL_NO NUMBER(4),
ADI VARCHAR2(10) NOT NULL,
GÖREVÝ VARCHAR2(9),
YÖNETÝCÝSÝ VARCHAR(9),
GÝRÝÞ_TAR DATE
ÜCRET NUMBER(7,2),
KOMÝSYON NUMBER(7,2),
BÖLÜM_NO NUMBER(2) NOT NULL),
CONSTRAINT FK
FOREIGN KEY(BÖLÜM_NO)
REFERENCES BÖLÜM(BÖLÜM_NO));

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12095.htm (2 of 2) [24.11.2006 21:28:02]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12100.htm

12.3.1.5 CHECK Sýnýrlamasý

Tablonun herbir satýrý için bir koþul tanýmlanmasý söz konusu ise, CHECK sýnýrlamasý kullanýlýr. Koþul tanýmlanýrken
SQL koþul iþleçlerinden yararlanýlýr. CREATE TABLE deyimi içinde koþul tanýmlarý þu þekilde yapýlýr:

CONSTRAINT koþul adý


CHECK (koþul)

Örnek

BÖLÜM tablosunun BÖLÜM_NO sütununa girilecek deðerlerin 10 ile 99 arasýndaki bir deðer olmasýný istiyoruz. Koþulun adý
KÞ olsun. Bu tür bir koþulu þu þekilde tanýmlayabiliriz:

CREATE TABLE BÖLÜM


(BÖLÜM_NO NUMBER(4),
BÖLÜM_ADI VARCHAR2(14),
KONUM VARCHAR2(13),
CONSTRAINT KÞ
CHECK (BÖLÜM_NO BETWEEN 10 AND 99));

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12100.htm [24.11.2006 21:28:02]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12105.htm

12.3.2. Var Olan Tablo Ýçin Sýnýrlama Ekleme

Tablolara konulacak sýnýrlamalar, aþaðýda görüldüðü biçimde daha tablo yaratýlýrken belirlenebilir:

ALTER TABLE tablo


ADD [CONSTRINT sýnýrlama ];

NOT NULL sýnýrlamasýnýn eklenmesi söz konusu ise, ALTER TABLE deyimi içinde MODIFY sözcüðü kullanýlýr. Ancak bu tür
bir sýnýrlamanýn eklenebilmesi için, söz konusu tablonun hiç satýr içermemesi gerekiyor. ALTER TABLE deyimi ile
sýnýrlamalar için ekleme, silme, kapatma veya açma iþlemleri yapýlabilir. Ancak bir sýnýrlama mevcut ise, bunun
yapýsýný deðiþtiremeyiz.

Örnek

PERS tablosunun YÖNETÝCÝSÝ sütununa girilen bir deðer, ayný zamanda bu tablonun PERSONEL_NO sütununda bulunan
bir deðer olmalýdýr. Bu tür bir sýnýrlamayý, mevcut bir tabloya þu þekilde ekleyebiliriz:

ALTER TABLE PERS


ADD CONSTRAINT TEST
FOREIGN KEY(YÖNETÝCÝSÝ)
REFERENCES (PERSONEL_NO);

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12105.htm [24.11.2006 21:28:03]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12110.htm

12.3.3. Sýnýrlamalarýn Kaldýrýlmasý

Bir tabloya sýnýrlama konulduktan sonra, gerektiðinde bu sýnýrlama kaldýrýlabilir. Bunun için ALTER ve DROP
sözcüklerinden yararlanýlýr. Sýnýrlamalarýn kaldýrýlmasý aþaðýda belirtildiði biçimde yapýlýr:

ALTER TABLE tablo

DROP PRIMARY KEY |


INIQUE (sütun) |
CONTRAINT sýnýrlama [CASCADE];

Örnek 1

BÖLÜM tablosu üzerindeki PRIMARY KEY sýnýrlamasýný kaldýrmak için þöyle bir yol izlenebilir:

ALTER TABLE BÖLÜM


DROP PRIMARY KEY CASCADE;

Bu iþlem, BÖLÜM tablosuyla iliþkili PERSONEL.BÖLÜM_NO sütunu üzerindeki dýþ anahtar sýnýrlamalarýný da kaldýrýr.

Örnek 2

Daha önce PERS tablosu için tanýmlanan TEST isimli sýnýrlamayý yok etmek istiyoruz. Bunun için þöyle bir yol izlenebilir:

ALTER TABLE PERS


DROP CONSTRAINT TEST

Bu iþlem, BÖLÜM tablosuyla iliþkili PERSONEL.BÖLÜM_NO sütunu üzerindeki dýþ anahtar sýnýrlamalarýný da kaldýrýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12110.htm [24.11.2006 21:28:03]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12115.htm

12.4. Görünümler

Bir ya da daha fazla tablonun mantýksal alt kümelerini oluþturmak için görünümlerden yararlanýlýr. Görünümler, bir
tabloya dayalý mantýksal bir tablo olarak deðerlendirilir. Görünüm, tablolar gibi veriyi fiziksel olarak saklamaz.
Görünümler, saklanmýþ (depolanmýþ) SELECT deyimi olarak deðerlendirilir. Bir SELECT deyiminin defalarca kullanýlmasý
söz konusu ise, onu bir görünüm biçiminde tanýmlayarak, bu görünümün çalýþtýrýlmasý mümkündür. Görünümler
aþaðýda sýralanan nedenlerle tercih edilir:

a) Görünümler, veri tabanýna eriþimi sýnýrlayan olanaklardýr çünkü görünüm, tablolarýn sadece seçilen bir kýsmýný
görüntüleyebilir.

b) Karmaþýk sorgularýn kolayca yapýlmasýný saðlar.

c) Ayný veriyi kullanan çok sayýda görünüm tanýmlanabilmektedir.

Bir görünümün yaratýlabilmesi için CREATE VIEW deyimi kullanýlýr. Bu deyim en basit biçimiyle, þöyle tanýmlanýyor:

CREATE VIEW görünüm

AS alt sorgu ;

Bir görünümün yaratýlmasý esnasýnda kullanýlacak alt sorgu içinde ORDER BY sözcüðü yer alamaz. Bazý kurallara

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12115.htm (1 of 2) [24.11.2006 21:28:04]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12115.htm

uymak koþuluyla görünümler DML iþlemlerinin yerine getirilmesi amacýyla da kullanýlabilir. Aþaðýda sýralanan sorgu türleri
DML iþlemlerinde kullanýlamaz.

a) Grup fonksiyonlarýný içeren alt sorgular

b) GROUP BY sözcüðünün yer aldýðý alt sorgular

c) DISTINCT sözcüðünün yer aldýðý alt sorgular

Var olan bir görünümü yok etmek amacýyla DROP VIEW deyimi kullanýlýr.

DROP VIEW görünüm ;

Örnek 1

PERSONEL tablosunun PERSONEL_NO, ADI ve GÖREVÝ sütunlarýna baðlý olarak, PERGÖR isimli görünümü þu
þekilde yaratabiliriz.

CREATE VIEW PERGÖR


AS SELECT PERSONEL_NO, ADI, GÖREVÝ
FROM PERSONEL;

Örnek 2

Alt sorgu içinde alan takma isimler de kullanýlabilir. Bu durumda görünümün alan isimleri, söz konusu takma isimler olacaktýr.

CREATE VIEW PERGÖR1


AS SELECT PERSONEL_NO, AS P_NO, ADI AS ÝSÝM, ÜCRET AS MAAÞ
FROM PERSONEL
WHERE BÖLÜM_NO=20;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12115.htm (2 of 2) [24.11.2006 21:28:04]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12120.htm

12.4.1. Görünümün Sorgulanmasý

Görünümler aynen bir tabloya benzer. SELECT deyimi ile bir görünümü okumak mümkündür. Bir görünümün içerdiði tüm
sütunlar seçilebildiði gibi, gerektiðinde bazý sütunlarý da seçilebilir.

Örnek

PERS1 isimli görünümü PERSONEL_NO, ADI ve GÖREVÝ isimli sütunlardan oluþmaktadýr. Bu görünümün
çalýþtýrýlarak (sorgulanarak), sadece ADI ve GÖREVÝ isimli sütunlarýnýn seçilebilmesi için;

SELECT ADI,GÖREVÝ
FROM PERS1;

biçiminde bir taným yapmak yeterlidir. Bu görünüm çalýþtýrýldýðýnda, PERSONEL tablosunun sadece; ADI ve GÖREVÝ
sütunlarý görüntülenir.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12120.htm (1 of 2) [24.11.2006 21:28:04]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12120.htm

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12120.htm (2 of 2) [24.11.2006 21:28:04]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12125.htm

12.4.2. Görünümün Güncelleþtirilmesi

Var olan herhangi bir görünümün güncelleþtirilmesi amacýyla, yani yeni bir görünümün ayný isimli bir baþka görünümün
yerini almasý için, CREATE OR REPLACE WITH deyimi kullanýlýr. Bu deyim þu þekilde tanýmlanýr:

CREATE OR REPLACE VIEW görünüm [(görünüm sütunlarý)]


AS alt sorgu;

Örnek

Daha önce yaratýlmýþ PERGÖR isimli görünümü þu þekilde güncelleþtirebiliriz.

CREATE OR REPLACE VIEW PERGÖR


AS SELECT PERSONEL_NO, ADI, GÖREVÝ, ÜCRET, BÖLÜM_NO
FROM PERSONEL;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12125.htm [24.11.2006 21:28:04]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12130.htm

12.5. Indeksler

Ýndeksler (dizinler) bir tablodaki satýrlara, belirli bir sütun üzerinden daha hýzlý eriþimi saðlayan veri tabaný
nesneleridir. Ýndeksler bir deyim yardýmýyla kullanýcý tarafýndan yaratýlabileceði gibi otomatik olarak da yaratýlabilir. Bir
tablo tanýmýnda PRIMARY KEY ya da UNIQUE sýnýrlamalarýna yer verilmiþ ise, bu anahtarlara baðlý olarak otomatik
indeksler yaratýlýr.

PRIMARY KEY ve UNIQUE anahtar sýnýrlamalarý sonunda yaratýlan indeksler, bu anahtarlarýn özelliðine baðlý olarak tek
deðerli indeksler (unique index) ismiyle bilinir. Buna karþýlýk tek olmayan indeksler de yaratmak mümkündür.
Örneðin, FOREIGN KEY alaný için indeks yaratarak, bu alana baðlý sorgularýn hýzýný artýrabiliriz.

Ýndeksler tanýmlandýðýnda, disk için okuma/yazma miktarý azalýr. Böylece veriye daha hýzlý eriþilir. Ýndeksler
tablodan baðýmsýz olarak oluþturulur ve hem kullanýmý hem de bakýmý veri tabaný sunucusu tarafýndan otomatik
olarak gerçekleþtirilir. Bir tablo için indeks tanýmlanmamýþ ise, okuma iþlemlerinde tüm tablo taranýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12130.htm [24.11.2006 21:28:05]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12135.htm

12.5.1. Bir Ýndeksin Yaratýlmasý

Herhangi bir tablonun bir alanýna baðlý olarak indeks yaratýlabilir. Bunun için aþaðýdaki deyim kullanýlabilir:

CREATE INDEX index adý


ON tablo( sütunlar );

Örnek

PERSONEL tablosunun BÖLÜM_NO alanýna baðlý bir indeks oluþturacaðýz. Indeksin adý PERBÖL olacaktýr.

CREATE INDEX PERBÖL


ON PERSONEL(BÖLÜM_NO);

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12135.htm [24.11.2006 21:28:05]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12140.htm

12.5.2. Bir Ýndeks Ne Zaman Yaratýlýr ?

Bir indeksin yaratýlabilmesi için bazý koþullarýn gerçekleþtirilmiþ olmasý gerekmektedir. Aksi takdirde indeksten beklenen
yarar elde edilemez. Bir indeks, aþaðýda sýralanan koþullar ortaya çýktýðýnda tanýmlanýr.

a) Ayný alan birçok sorguda WHERE sözcüðü içinde ya da baðlantý koþulu (join condition) içinde sýk sýk kullanýlýyorsa,

b) Alan, geniþ ardýþýk sayýlar içeriyorsa,

c) Alan, çok sayýda NULL deðer içeriyorsa,

d) Ýki ya da daha fazla alan birçok sorguda WHERE veya baðlantý koþulu içinde birlikte sýk sýk kullanýlýyorsa,

e) Tablo çok büyük ve sorgudan elde edilecek sonuç tablonun % 2-4 'den daha az ise,

Solda sýralanan durumlar geçerli ise indeks kullanýlmaz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12140.htm [24.11.2006 21:28:06]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12145.htm

12.5.3. Ýndeksin Yok Edilmesi

Bir tablo DROP TABLE deyimiyle yok edildiðinde bu tabloya baðlý indeksler de otomatik olarak silinir. Bir tablonun herhangi
bir indeksini yok etmek için DROP INDEX deyimi kullanýlmaktadýr. Bu deyim þu þekilde tanýmlanýyor.

DROP INDEX index adý ;

Örnek

Daha önceki örnekte yarattýðýmýz PERBÖL indeksini yok etmek istiyoruz. Amacýmýza uygun deyim þu þekilde düzenlenebilir:

DROP INDEX PERBÖL;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12145.htm [24.11.2006 21:28:06]


Untitled Document

Testin nasýl cevaplanacaðýný görmek için buraya týklayýnýz.

Aþaðýda verilen tablolarý göz önüne alarak sorularý yanýtlayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12155.htm (1 of 2) [24.11.2006 21:28:06]


Untitled Document

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT12155.htm (2 of 2) [24.11.2006 21:28:06]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13005.htm

Kullanýcý Eriþiminin Denetlenmesi

Veri tabanlarý, çoðu þirket ve kurum için büyük öneme sahip verileri içerir. Veri tabanlarýnýn çoðu zaman birden
fazla kullanýcýnýn ayný anda hizmetinde olmalarý gerekir. Veri tabanlarýný diðer kullanýcýlara açarken, verilere ulaþma ve
onlar üzerinde iþlem yapma gibi yetkilerin her kullanýcý için ayný olmamasýna dikkat etmek gerekir. Bunun için, veri
tabanýna eriþimin dikkatle denetlenmesi gerekir. Günümüzdeki birçok Veri Tabaný Yönetim Sistemi kullanýcý
erþiminin denetlenmesi ile ilgili araçlarý ve yöntemleri içerir. Bu bölümde bu tür araçlarý nasýl kullanacaðýmýzý öðreneceðiz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13005.htm [24.11.2006 21:28:07]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13010.htm

Bölüm Hedefi

Bu bölümde,

● Kullanýcýnýn veri tabanýna eriþimini denetlemeyi,


● Veri tabaný kullanýcýsýnýn yaratýlmasýný,
● Kullanýcýlara parola verilmesi iþlemini,
● Parolanýn gerektiðinde deðiþtirilmesini,
● Kullanýcýlara nesne yaratma yetkisinin verilmesini,
● Yetki gruplarýnýn belirlenmesini,
● Nesnelere eriþim yetkilerinin atanmasýný,
● Nesne yetkilerinin geri alýnmasýný,

öðreneceksiniz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13010.htm [24.11.2006 21:28:07]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13015.htm

13.1 Kullanýcý Eriþiminin Denetlenmesi

Bir veri tabanýný doðal olarak çok sayýda kiþi kullanacaktýr. Bu kullanýcýlar farklý kullaným düzeyine sahip olacaktýr.
Her kullanýcý sistemin tüm kaynaklarýna ulaþamayacaktýr. Bunun denetlenmesi gerekiyor. Kullanýcýlarýn, veri tabaný
sistemine tanýtýlmasý ve eriþim yetkilerinin tanýmlanmasý söz konusudur.

Bu bölümde kullanýcý eriþimi ile ilgili konularý ele alarak inceleyeceðiz. Ancak burada anlatýlan konular ORACLE veri
tabaný sunucusu göz önüne alýnarak açýklanmýþtýr. Bu noktaya dikkat etmek gerekiyor. Ayrýca, bu bölümde anlatýlan
iþlemlerin çoðunu, sadece Veri Tabaný Yöneticisinin (VTY) yapabileceðini unutmamalýyýz.

Veri Tabaný Yöneticisi, veri tabaný üzerinde her türlü iþlemi yapmaya yetkisi olan bir kullanýcýdýr. Diðer tüm kullanýcýlar,
veri tabaný yöneticisi tarafýndan yaratýlýr ve yetkileri yine onun tarafýndan atanýr.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13015.htm [24.11.2006 21:28:08]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13020.htm

13.2. Kullanýcýlarýn Yaratýlmasý

Veri Tabaný Yöneticisi (VTY), kullanýcýlarý veri tabaný sistemine tanýtýr. Veri tabanýný kullanacak kiþileri, sistemin
kullanýcýsý olarak tanýtmak için; CREATE USER deyimi kullanýlýr. Bu deyim þu þekilde tanýmlanýr:

CREATE USER kullanýcý


IDENTIFIED BY (parola);

Örnek

BURAK isimli yeni bir kullanýcý sisteme aþaðýda belirtildiði biçimde tanýtýlýr. Bu kullanýcýnýn parolasý KAPLAN
olarak belirtilecektir.

CREATE USER BURAK


IDENTIFIED BY KAPLAN;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13020.htm [24.11.2006 21:28:08]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13025.htm

13.3. Kullanýcýlara Nesne Yaratma Yetkisinin Verilmesi

Veri Tabaný Yöneticisinin kullanýcýyý sisteme tanýttýktan sonra, kullanýcýya bazý yetkileri atamasý gerekmektedir.
Kullanýcýnýn bazý veri tabaný iþlemlerini yerine getirebilmesi için, bu tür yetkilere ihtiyacý olacaktýr. Kullanýcýlara veri
tabanýna eriþim ve nesne yaratma yetkilerinin verilmesi amacýyla GRANT deyimi kullanýlýr.

GRANT yetkiler TO kullanýcýlar ;

Kullanýcýya verilebilecek bazý yetkiler aþaðýda sýralanmýþtýr:

CREATE_SESSION Veri tabanýna baðlanma yetkisi.

CREATE_TABLE Tablo yaratma yetkisi.

CREATE_VIEW Görünüm yaratma yetkisi.

Örnek

CREATE USER deyimini kullanarak BURAK isimli bir kullanýcý yaratmýþtýk. Bu kullanýcýya tablo ve görünüm yaratma
yetkisi vermek istiyoruz. Amacýmýza þu þekilde ulaþabiliriz:

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13025.htm (1 of 2) [24.11.2006 21:28:08]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13025.htm

GRANT CREATE_TABLE, CREATE_VIEW TO BURAK;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13025.htm (2 of 2) [24.11.2006 21:28:08]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13030.htm

13.4. Parolanýn Deðiþtirilmesi

Kullanýcý yaratýlýrken, Veri Tabaný Yöneticisi tarafýndan söz konusu kullanýcý için bir eriþim parolasý belirleniyordu. Bu
parola, Veri Tabaný Yöneticisi tarafýndan deðiþtirilebileceði gibi, onu yaratan kullanýcý tarafýndan da deðiþtirilebilir. Böyle
bir amaca ulaþabilmek için; ALTER USER deyimi kullanýlýr. Bu deyim þu þekilde tanýmlanýr:

ALTER USER kullanýcý


IDENTIFIED BY parola ;

Bu tür bir iþlemin yapýlabilmesi için, söz konusu kullanýcýnýn ALTER USER yetkisine sahip olmasý gerekmektedir. Bu yetki,
doðal olarak Veri Tabaný Yöneticisi tarafýndan kullanýcýya verilmektedir.

Örnek

BURAK isimli kullanýcýnýn eriþim parolasýný KAPLAN olarak belirlemiþtik. Bu parolayý EYLÜL olarak deðiþtirmek
istiyoruz. Parola deðiþtirme iþlemini þu þekilde yapabiliriz:

ALTER USER BURAK


IDENTIFIED BY EYLÜL;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13030.htm [24.11.2006 21:28:09]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13035.htm

13.5. Yetki Gruplarýnýn Tanýmlanmasý

Yetki gruplarýna rol adýný veriyoruz. Bu yöntem, kullanýcýlara ayný yetkilerin verilmesi söz konusu olduðunda
yararlý olmaktadýr. Benzer biçimde, grup yetkisinin kaldýrýlabilmesi iþlemlerinde de rollerden yararlanýlabilir. Roller,
CREATE ROLE deyimi yardýmýyla þu þekilde oluþturulur:

CREATE ROLE rol adý;

Roller, Veri Tabaný Yöneticisi tarafýndan yaratýlýr. Rol yaratýldýktan sonra, rolün içerdiði her bir yetki GRANT deyimi
yardýmýyla belirlenir. Rolün belirli kullanýcýlara atanmasý iþlemi de yine; GRANT deyimi yardýmýyla gerçekleþtirilir.

Örnek

YÖNETÝCÝ isimli bir rol yaratmayý, bu rolün tablo ve görünüm yaratma yetkilerine sahip olmasýný istiyoruz. Ayrýca bu
role BURAK ile BEGÜM isimli kullanýcýlar sahip olacaktýr. Böyle bir amaca ulaþmak için þöyle bir yol izlenir :

a) YÖNETÝCÝ isimli rol tanýmlanýr:


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13035.htm (1 of 2) [24.11.2006 21:28:09]
file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13035.htm

CREATE ROLE YÖNETÝCÝ;

b) YÖNETÝCÝ isimli rol tanýmlanmýþtýr. Bu rolün tablo yaratma ve görünüm yaratma yetkilerini içermesi için GRANT deyimi
þu þekilde kullanýlýr:

GRANT CREATE_TABLE, CREATE_VIEW TO YÖNETÝCÝ;

c) Bu yetkilere BURAK ve BEGÜM isimli kullanýcýlarýn topluca sahip olmasýný saðlamak için rolün bu kullanýcýlara
atanmasý yeterlidir:

GRANT YÖNETÝCÝ TO BURAK,BEGÜM;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13035.htm (2 of 2) [24.11.2006 21:28:09]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13040.htm

13.6. Nesnelere Eriþim Yetkileri

Kullanýcýlara, Veri Tabaný Yöneticisi tarafýndan yetkilerin nasýl atanabileceðini gördük. Bu kez kullanýcýlara nesne
kullanma yetkisinin nasýl verilebileceði üzerinde duracaðýz.

Veri tabaný içindeki nesnelerin hangi yetkilerle kullanýcýlara sunulacaðýný belirlemek üzere GRANT deyimi kullanýlýr. Bu
deyimle, bir nesne üzerinde ALTER, DELETE, INDEX, INSERT, SELECT, UPDATE ve REFERENCES iþlemleri için
yetki verilebilmektedir. Bu yetkiler, tablo ve görünümlere verilebilmektedir. GRANT deyimi böyle bir amaca yönelik olarak en
basit þu þekilde kullanýlabilir:

GRANT yetkiler [(rol adý)]


ON nesneler
TO kullanýcýlar [roller][PUBLIC];

Tanýmda sözü edilen PUBLIC sözcüðü, belirlenen nesneler üzerinde sahip olunan yetkilerin tüm kullanýcýlara verileceðini
ifade eder.

Örnek 1

BURAK ve BEGÜM isimli kullanýcýlara PERSONEL tablosu üzerinde SELECT deyimini kullanma yetkisini þu þekilde verebiliriz:

GRANT SELECT
ON PERSONEL
TO BURAK, BEGÜM;

Örnek 2

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13040.htm (1 of 2) [24.11.2006 21:28:10]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13040.htm

BÖLÜM tablosunun BÖLÜM_ADI ve KONUM sütunlarýnda güncelleþtirme yapma yetkisini SELÝN kullanýcýsýna ve
YÖNETÝCÝ rolüne atamak istiyoruz. GRANT deyimi þu þekilde olabilir:

GRANT UPDATE (BÖLÜM_ADI, KONUM)


ON BÖLÜM
TO SELÝN, YÖNETÝCÝ;

Örnek 3

BURAK kullanýcýsýnýn PERSONEL tablosuna iliþkin olarak sahip olduðu SELECT yetkisini, diðer tüm kullanýcýlara
vermek gerekiyorsa þu þekilde bir taným yapýlýr:

GRANT SELECT
ON PERSONEL
TO PUBLIC;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13040.htm (2 of 2) [24.11.2006 21:28:10]


file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13045.htm

13.7. Nesne Yetkilerinin Geri Alýnmasý

GRANT deyimiyle verilen yetkiler, gerektiðinde geri alýnabilir. Bunun için REVOKE deyiminden yararlanýlýr. Bu deyim þu
þekilde tanýmlanýr:

REVOKE yetkiler
ON nesneler
TO kullanýcýlar [roller] [PUBLIC] ;

Örnek

BURAK kullanýcýsýnýn PERSONEL tablosu üzerindeki SELECT ve INSERT iþlemleri yetkilerini iptal etmek istiyoruz. Bu
amaca ulaþmak için þu þekilde bir yol izlenir:

REVOKE SELECT,INSERT
ON PERSONEL
TO BURAK;

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13045.htm [24.11.2006 21:28:10]


Untitled Document

Testin nasýl cevaplanacaðýný görmek için buraya týklayýnýz.

Aþaðýda verilen tablolarý göz önüne alarak sorularý yanýtlayýnýz.

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13055.htm (1 of 2) [24.11.2006 21:28:11]


Untitled Document

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/VT13055.htm (2 of 2) [24.11.2006 21:28:11]


YM02225

DERS SONU

Veri Tabanı Yönetim Sistemleri dersinin sonuna gelmiş bulunmaktayız. Bu


çalışmamızın tüm öğrencilerimize faydalı olması dileğiyle...

Sınavlarınızda başarılar...

Dr. Yalçın Özkan

file:///D|/Belgeler/Universite/Donem_III/Dersler/TBIL_403/ders_sonu.htm [24.11.2006 21:28:11]

You might also like