Slayt 1 - WordPress.com

advertisement
VERİTABANI DERS
NOTLARI
Yrd.Doç.Dr. Buket Doğan
1
Ders İçeriği



Veritabanı ve ilişkisel veritabanı kavramı,
tasarımı ve yönetimini anlamak,
veri tabanı sistemlerinin denetimi ve erişimi
yöntemlerini ve araçlarını öğrenmek, (SQL
komutlarının kullanımı)
verilecek teori bilgiler temelinde VTYS
uygulamalarını (Microsoft Access)
yapmaktır.
2
TEMEL KAVRAMLAR

Veri

Olguların, kavramların, veya talimatların, insan
tarafından veya otomatik yolla iletişim, yorumlama ve
işleme amacına uygun bir biçimde ifadesidir.
Genellikle, biz veri veya veri birimleri üzerindeki
işlemlerimizi varlık hakkında her hangi bilgi almak için
gerçekleştiririz.
Veri kaydedilebilir bilinen gerçeklerdir.
Örneğin bir kişinin ismi, adresi, telefon numarası gibi.



3
VERİTABANI NEDİR

Veri tabanı




Düzenli bilgiler topluluğudur.
Bilgisayar ortamında saklanan düzenli verilerdir.
Bilgisayar terminolojisinde, sistematik erişim
imkanı olan, yönetilebilir, güncellenebilir ,
taşınabilir, birbirleri arasında tanımlı ilişkiler
bulunabilen bilgiler kümesidir.
Bilgisayarda sistematik şekilde saklanmış,
programlarca işlenebilecek veri yığınıdır
4
Veri Tabanı Yönetim SistemiVTYS
Veri tabanı tanımlamak, yaratmak,
yaşatmak ve veri tabanına denetimli
erişim sağlamak için kullanılan
yazılım sistemidir.
5
TEMEL KAVRAMLAR
KLASİK DOSYA YAPILARI
 Veri saklama birimlerinde depolanan veri
topluluklarına “dosya” adı verilmektedir.
 Dosyalar ise kendi içersinden kayıtlara
bölünmüştür.
 Örneğin öğrencilerin bilgilerinin tutulduğu bir
dosyayı düşünelim:
6
TEMEL KAVRAMLAR
ALAN 1
ALAN 3
ALAN 2
ADI
BABA ADI
DOĞUM YERİ
ADI
BABA ADI
DOĞUM YERİ
ADI
BABA ADI
DOĞUM YERİ
KAYIT
TABLO
Kayıtlar birbiri ile ilişkili alanlardan(field) oluşmaktadır.
Her kayıt farklı bilgileri içermektedir.
7
DOSYA SİSTEMLERİNİN
SAKINCALARI

Klasik dosya sistemleri kullanılmaya başlandıktan sonra bazı
dezavantajları olduğu ortaya çıkmıştır. Bunlar şöyle sıralanabilir :

Veri tekrarı: Aynı veri çeşitli dosyalarda birden fazla yer
alabilmektedir buda sistemin hantallaşmasına neden olur. Mesela
bir stok dosyasında stok numarası verisinin malzeme dosyasında,
fatura dosyasında ve ambar girişi dosyasında yer alması gibi.
Verinin birkaç dosyada güncellemesi: Veri birden fazla dosyada
tekrar edilebildiği için, verinin bir dosyada güncellenip diğerlerinde
güncellenmemesi Veri Bütünlüğünün (Data Integrity) bozulmasına
neden olabilir. Buna bağlı olarak birbiri ile çelişen raporlar üretilebilir.
Belleğin tekrarlı bilgi nedeniyle israfı: Aynı verinin birden fazla
dosya içinde bulunması nedeniyle kullanılan veri hard diskte fazla
yer işgal edecek. Yani hard disk tekrarlı veriler için kullanılmış
olacaktır.
Sadece belirli bir dilin kullanılması :Verilerin dosya sisteminde
saklandığı ortamlar için değişik programlama dillerinden bir tanesi
kullanılır. Kullanılan bu programlama dili ise SQL dili gibi esnek
değildir.
8



VERİTABANI SİSTEMLERİ

Veritabanı sistemleri, veri kümelerinin düzenli biçimde
tutulduğu ve bu verilerin yazılımlar aracılığı ile
yönetildiği ortamlardır.
Uygulama Programları
Veritabanı
Veritabanı Yönetim
Sistemi
9
VERİTABANI SİSTEMLERİ



VYS’ler aşağıdaki bilgileri barındırmaktadır
 İlişkili olan veriler (Collection of interrelated data)
 Veriye ulaşmak için gerekli olan yazılımlar kümesi
Veritabanı Uygulamaları (Database Applications)
 Bankalar: tüm işlemler / hareketler
 Havayolları:rezervasyonlar, zaman programları
 Üniversiteler:Kayıt, notlar
 Satış: müşteriler,ürünler, alımlar
 Çevrimiçi Perakendicileri:Sipariş Kayıtlar, Kişiselleştirilmiş
tavsiyeler.
 Üretim: imalat, stok, siparişler, tedarik ihtiyaçları
 İnsan Kaynakları:personel kayıtları,maaşlar, vergi kesintileri
Veritabanları hayatımızın her alanında kullanılmaktadır.
10
Veritabanı Sistemlerinin Üstünlükleri


Verinin tekrarlanmasını önler.
Veritabanı sistemleri alt sistemler arasında ilişki kurulması ve birçok
uygulamada verilerin aynı veritabanı içersinde ortak olarak
tasarlanmasını öngörür.


Verilerin tutarlı olmasını sağlar.
Veri bütünlüğü(data integrity), verinin doğruluğunu ve tutarlığını
ifade etmektedir. Veri girişlerine kısıtlar konularak sadece istenilen
aralıkta değer girişi sağlanabilir.
11
Veritabanı Sistemlerinin Üstünlükleri


Aynı andaki erişimlerde tutarsızlıkların ortaya
çıkmasını önler.
Veritabanı uygulamalarında, veritabanı nesneleri başka uygulamalar
ve farklı kullanıcılar tarafından paylaşılabilir.

Verilerin güvenliğini sağlar.

Her kullanıcının erişeceği veriler ayrı ayrı tanımlanabilir. Yetkiler ve
kısıtlamalar ile istenilen kullanıcı erişim ayarları gerçekleştirilir.
12
Varlık-İlişki Modeli
(The Entity-Relationship Model)

Veri çözümleme ve modellemede ilişkilerin ortaya
konması için kullanılan araçtır.


Niteliklerin kümesi (set of attributes) tarafından
tanımlanır.


Varlık (Entity): Bir alan içersinde diğer nesnelerden ayırt
edilebilen bir şey (“thing”) yada “nesne” (“object”)
İlişki (Relationship): Birden fazla varlığın arasındaki bağıntı-ilişki.
Görsel olarak varlık-ilişki tablosu ile gösterilir:
13
Varlık-İlişki Modeli

Varlık(Entity): Var olan ve diğer varlıklardan
ayırt edilebilen nesnedir. (Bir kitap, öğrenci,
veritabanı dersi birer varlıktır.

Varlık Dizisi: Aynı türdeki varlıklar varlık
kümesini oluştururlar. Bir okuldaki tüm
öğrenciler “öğrenci” isimli varlık kümesi olarak
değerlendirilir.
14
İlişki ve İlişki Kümeleri



Varlıklar arasındaki bağlantıya ilişki adı
verilir.örneğin “Burak” varlığı ile “Dersler”
varlığı arasından ilişki vardır.
İlişki kümesi, aynı türdeki ilişkilerin kümesidir,
bu ilişki kümesi R ile gösterilir.
E1,E2,…En varlık kümeleri, R ise ilişkiyi
tanımlamaktadır.
15
İlişki ve İlişki Kümeleri





E1={Ayşe,Burak}
E2={Elektronik, İngilizce}
Bu iki küme arasındaki ilişki, öğrenciler ve
dersler arasındaki ilişkidir. Tüm öğrencilerle
tüm dersler arasındaki ilişki kartezyen
çarpımı yapılarak ifade edilir.
E1xE2={(Ayşe,Elektronik),(Ayşe,İngilizce),
(Burak, Elektronik),(Burak,İngilizce)}
İki veri kümesi arasındaki geçerli tüm ilişkiler,
R ilişki kümesinin bir alt kümesidir.
16
İlişki ve İlişki Kümeleri
Müşteri
no
Müşteri adı
Hesaplar
Bakiye
101 Ayşe
33344
1.000,00 YTL
203 Mehmet
33567
2.500,00 YTL
405 Derya
33790
45.000,00 YTL
607 Selin
34013
5.000,00 YTL
R1={(Ayşe,33567),(Mehmet,33344)}
R2={(Derya,33790)}
R3={(Selin,34013)}
17
Nitelikler

Bir varlık çok sayıda nitelik yardımıyla
tanımlanabilir. Örneğin, personel varlığının
nitelikleri şu şekilde olabilir:





Personel No
Adı ve Soyadı
Adres
SSK no
Gelir
18
Etki Alanı

Niteliğin aldığı değerlere etki alanı(domain)
adı verilir.
Nitelik
Adı ve Soyadı
Burak Özkan
Demet Demir
Ahmet Önder
Begüm Özkan
Etki Alanı
19
Türetilen Nitelik


Bir nitelik kullanılarak, bir başka varlık nitelik
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.
20
Çok Değere Sahip Nitelik



Bir nitelik birden fazla değer ile eşleşebiliyor
ise, “çok değere sahip nitelik” adı verilir.
Örneğin, öğretmen varlığının dersler niteliği
birden fazla değeri kapsar. Bir öğretmen
birden fazla derse girmektedir.
Öğrenci varlığının okuduğu kitaplar niteliği
birden fazla kitabı kapsayabilir.
21
Birleşik Nitelik


Birden fazla nitelik birleştirilerek, yeni bir
nitelik oluşturulabilir. Bu tür niteliklere birleşik
nitelik denir
Örneğin personelin “cadde” ve “şehir”
nitelikleri birleştirilerek “ADRES” isimli yeni bir
nitelik oluşturulabilir.
22
Varlıklar arası İlişkiler(Eşleme)



Bir varlıkla ilişkiye girilebilecek varlıkların sayısına
eşleme sayısı adı verilir.
Eşleme sayısı 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 eşleme durumları şu şekilde ifade edilir:




Birden-bire (One to One)
Birden-çoğa(One to Many)
Çoktan-bire (Many to One)
Çoktan-çoğa (Many to Many)
23
Birden-bire İlişki

A varlık kümesi içindeki bir varlık, B kümesi
içindeki sadece bir varlık ile ilişkili ise birdenbire ilişki söz konusudur.
a1
a2
a3
:
:
:an
b1
b2
b3
:
:
:bn
24
Birden-bire İlişki
Müşteri
no
Müşteri adı
Hesaplar
Bakiye
101 Ayşe
33344
1.000,00 YTL
203 Mehmet
33567
2.500,00 YTL
405 Derya
33790
45.000,00 YTL
607 Selin
34013
5.000,00 YTL
Her müşterinin bir hesabı olabilir.
25
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 ilişkiye birden-çoğa ilişki adı verilir.B kümesindeki
bir varlık, A kümesindeki sadece bir varlık ile eşleşebilir.
a1
a2
a3
:
:
:an
b1
b2
b3
:
:
:bn
26
Birden-çoğa İlişki
ID
Öğretmen
adı
NO
OGR_ID
Girdiği DERS
101 Ayşe
1
101
Matematik
203 Ahmet
2
101
Geometri
405 Derya
3
405
Bilgisayar Prog.
607 Selin
4
405
Office Programları
Öğretmenler birden fazla derse girmektedir.
27
Ç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şleşmeye
çoktan-bire ilişki adı verilir.
a1
a2
a3
:
:
:an
b1
b2
b3
:
:
:bn
28
Çoktan-bire İlişki
No
Kişi_ID DERS
1
101
Matematik
2
101
Geometri
3
405
4
405
ID
İsim
Doğum.Tari
hi
101 Ayşe
3.06.1990
Bilg. Prog.
203 Ahmet
12.04.1980
Office Prog
405 Derya
15.04.1983
607 Selin
5.07.1981
29
Çoktan-Çoğa İlişki

A varlık kümesindeki birden fazla varlık, B
kümesindeki birden fazla varlık ile ilişkili ise bu
eşleşmeye çoktan-çoğa ilişki adı verilir.
a1
a2
a3
:
:
:an
b1
b2
b3
:
:
:bn
30
Çoktan-Çoğa İlişki


Çoktan-çoğa ilişki en genel ilişki biçimidir. Bu
ilişki herhangi bir sınırlamanın olduğu
durumlar için geçerli olacaktır.
Müşteri-hesap ilişkilerinde aile üyelerinin
ortak hesap açabilmesi durumunda çoktançoğa ilişki söz konusu olacaktır.
31
Varoluş Koşulu




Eğer bir X varlığının bulunması Y varlığının
bulunmasına bağlı ise, X’in Y’ye bağlı
olduğundan söz edilebilir.
Y silinirse, X’in bir anlamı kalmayacaktır.
Bu durumda Y baskın varlık(dominant entity)
X ise bağımlı varlık(subordinate entity) adı
verilir.

Örneğin, bir müşterinin hesabı silineceğinde, bu
müşterinin hesap hareketlerinin de silinmesi
gerekmektedir. Hesap hareketleri, hesap
varolmadan var olamaz.
32
Anahtar



Varlık kümesi içinde, varlıkları birbirinden ayırt etmek için
kullanılan bu tür niteliklere varlık kümesinin anahtarı adı
verilir. İki tür anahtar vardır.
Süper anahtar (superkey):Varlık kümesinde yer alan
bir varlığı kesin olarak tanımlamaya yarayan
anahtara süper anahtar adı verilmketedir. 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.
Örneğin SSK no süper anahtardır. Fakat isim alanı süper
anahtar olamaz. SSk no ve isim alanı birlikte süper
anahtar olarak kabul edilebilir.
33
Anahtar




Aday anahtar (candidate key) : Varlık
kümesinde bir varlığı tanımlamaya yarayan bir
başka anahtar türü aday anahtar dır.
Bir varlık kümesinin süper anahtarı bir veya
daha fazla niteliğin birleşiminden
oluşabilmektedir.
Aday anahtar ise, süper anahtar özelliklerine
sahip tek nitelikli anahtardır.
Aday anahtarlardan birisi birincil anahtar olarak
seçilir.
34
Anahtar



Eger bir üniversitede tüm ögrencilerin
numaraları birbirinden farklı ise ögrencileri
belirlemek için ögrenci numarası yeterlidir.
Bu durumda ögrenci numarası ögrenci varlık
kümesi için aday anahtardır.
İçinde ögrenci numarası bulunan her nitelik
grubu ise(ögrenci numarası, adı, soyadı gibi)
ise bu varlık kümesinin süper anahtarıdır.
35
Varlık-İlişki Şemaları (Entity-Relationship
Model)



Varlık-ilişki modeli ; Veritabanı modelleri içerisinde ,
varlık ve bu varlıkların birbirleri arasındaki ilişkilere
dayanarak herhangi bir ön-veri olmaksızın model
oluşturmakta kullanılan modeldir.
Buradaki varlık; benzersiz bir şekilde tanımlanabilen
ve bağımsız var olabilme yetisine sahip nesne ya da
oluşum olarak tanımlanabilir.
Varlıklar , ev, araba gibi fiziksel nesneler olabileceği
gibi müşteri ödemesi veya sipariş gibi soyut
nesneleri de içerirler
36
Güçlü & Zayıf Varlık Kümeleri



Her varlık kümesi için bir anahtar bulmak
mümkün olmayabilir.
Eğer bir varlık kümesinin niteliklerinden en az bir
anahtar oluşturulabiliyorsa, bu varlık kümesine
güçlü (strong) varlık kümesi denir.
Eğer bir varlık kümesinin niteliklerinin tümü
alınsa bile bir anahtar oluşturmuyorsa bu varlık
kümesine zayıf (weak) varlık kümesi denir.
Zayıf Varlığı Güçlendirmek


Zayıf bir varlık kümesinde, niteliklerin değerleri ile
varlıkları birbirinden ayırdetmek mümkün değildir.
Zayıf bir varlık kümesinin anlamlı olabilmesi için şu
özelliklere sahip olması gerekir:



Bu varlık kümesi ile güçlü bir varlık kümesi arasında birden-bire
ya da (güçlüden-zayıfa) birden-çoğa bir ilişki bulunmalıdır.
Zayıf varlıklar için bu ilişkinin var olma bağımlılığı oluşturmalıdır.
Böylece zayıf bir varlığın anahtarı, bağlı olduğu üstün
varlığın anahtarına ayırıcı nitelikler eklenerek elde edilir.
Zayıf Varlığı Güçlendirme
Örneği


Türkiye'deki tüm lise öğrencilerinin bilgilerini
içeren ÖĞRENCİ varlık kümesi zayıf bir varlık
kümesidir. Çünkü farklı liselerde öğrenci
numarası, adı ve soyadı aynı olan öğrenciler
bulunabilir.
ÖĞRENCİ varlık kümesi ile LİSE varlık kümesi
arasında bir OKUYAN ilişkisi kurulursa,
öğrencileri birbirinden ayırdetmek için kullanılan
ÖĞR_NO niteliğine, LİSE varlık kümesinin
anahtarı olan LİSE_KODU eklenir. Bu durumda
ÖĞRENCİ varlık kümesinin anahtarı
(LİSE_KODU, ÖĞR_NO) ikilisi olur.
Varlık-İlişki Şemaları
VARLIK
NİTELİK
ANAHTAR
NİTELİK
İLİŞKİ
TÜRETİLEN
NİTELİK
40
Rol


Aralarında ilişki kurulan varlıklardan her
birinin ilişkideki işlevine varlığın rolü denir.
Farklı varlık kümeleri arasındaki ilişkilerde
roller dolaylı yoldan anlaşılabildiği için
çoğunlukla açıkça belirtilmez

Örneğin, öğrenci ve ders arasında kurulan “aldığı”
ilişkisinde varlıkların rolleri bellidir: öğrenci dersi
alan, ders ise öğrenci tarafından alınandır.
Varlık-İlişki Şemaları
Varlıkların aralarında kurulabilecek ilişki türleri
aşağıdaki gibi tanımlanır ve model olarak ifade edilir
BÖLÜM-YÖNETİCİ
BÖLÜM- PROJE
42
Varlık-İlişki Şemaları
Müdür-Çalışanlar
ÇALIŞANLAR-PROJELER
43
İkili İlişkiler
•İlişkinin büyüklüğü ile ilgilidir
Bire-bir:
ÇALIŞAN
1:1
OTOMOBİL
OTO-TAHSİS
Bire-çoklu:
YURT
1:N
ÖĞRENCİ
YURTTA-KALMA
Çoka-çoklu:
ÖĞRENCİ
M:N
ÖĞRENCİ-KULÜP
KULÜP
44
Varlık-İlişki Şemaları

Bir varlığı belirlemeye yarayan, o varlıkla
etkileşim kurmak ya da o varlığı kullanmak
için gerekli önemli özellikleri (yani varlıkların
metadata’ları)
Doğ. tar
İlk Adı
İkinci Adı
Soyadı
Yaşı
Adı
ÇALIŞAN
SSN
Projeler
45
İlişkilerde Nitelik


İlişkilerde de tanımlayıcı nitelikler bulunabilir.
Aşağıdaki “Miktar” niteliği “Sattığı” ilişkisi için
tanımlayıcı niteliktir.
Mağz. No
Mağz. Adı
Mağaza
n
Mal Adı
Mal Kodu
Sattığı
Miktar
m
Mal
Varlık-İlişki Şemaları
YurtAdı
YurtAdı
YURT
Yer
OdaSayısı
ÖğrenciNo
YURTTA-KALMA
1:N
Kirası
ÖĞRENCİ
ÖğrenciAdı
ÖğrenciSınıfı
47
Seçerken Dikkat !


Veri modellemede varlık kümelerinin,
niteliklerin ve ilişki kümelerinin seçimi çok
önemlidir, Ancak bunların nasıl seçileceğine
ilişkin kesin kurallar da yoktur.
Kuruluşun öncelikleri ve uygulamaların
özellikleri yanında veri modellemeyi
gerçekleştiren bilişim teknik personelinin
anlayışı da düzenlemede etkili olmaktadır.
Varlık-İlişki Şemaları








Bir personel varlığının aşağıda belirtilen özelliklere
sahip olduğu varsayılsın
Adı
Cadde
Sokak
Apartman
Doğum Tarihi
Cadde, sokak ve apartman nitelikleri adres ile
birleştirilecektir.
Yaş doğum tarihinden elde edilecektir.
49
Varlık-İlişki Şemaları
Yaşı
Cadde
Personel
Sokak
Doğum Tarihi
Adres
Apartman
50
Varlık-İlişki Şemaları




“Müşteri” ve “Hesap” isimli iki varlık
kümesinin nitelikleri aşağıdaki gibidir:
Müşteri: Adı, SskNo, , Adres
Hesap: Hesap No, Bakiye
Bu veriler ile varlık-ilişki şemasını
oluşturunuz.
51
Varlık-İlişki Şemaları
Hesap No
Bakiye
Adres
Müşteri
SSK NO
1:1
Hesap
MüşHes
Adı
Tarih
52
Varlık-ilişki şemalarının tablo haline
dönüştürülmesi
Adı
SSk No Adres
Müşteri={SskNo, adı,adres}
Hesap No
Bakiye
Hesap={Hesap No, Bakiye}
Müşteri Hesap ilişkisi için={SSkNo, Hesap No, Tarih}
SSk No
Hesap No
Tarih
53
Varlık-İlişki Şemaları
54
Varlık-İlişki Şemaları



Bir müşteri birden fazla otomobile sahip olabilir ve her
otomobil modeline birden fazla müşteri sahip olabilir.
Bu durumda otomobiller ve müşteriler arasındaki ilişki
çoktan-çoğa biçimindedir.
Bu ilişkinin varlık-ilişki şemasını çiziniz.
55
Varlık-İlişki Şemaları
Adı
Oto plaka
Müşteri No
Bakiye
Renk
Sahip
Müşteri
M:N
Otomobil
Tarih
Müşteri ve otomobil varlıkları ve sahip ilişkisi için varlık-ilişki şeması
56
Varlık-İlişki Şemaları




Müşteri={müşteri no, adı}
Otomobil={oto model, renk}
Sahip={müşteri no, oto plaka, tarih}
Sahip isimli ilişkiye dayanarak aşağıdaki tablo oluşturulabilir.
Müşteri no oto plaka
Tarih
345
34 GF 67
12.12.2005
346
45 HN 34
15.11.2002
347
36 BN 67
12.12.2005
348
34 AV 45
15.11.2002
57
Varlık-İlişki Şemaları
Tak.No
Takım Adı
TAKIM
1
Oynar
N
OYUNCU
İSİM
Yaş
Performans
Puanı
58
Varlık-İlişki Çizelgelerinin
Tablolara Dönüştürülmesi


Varlık-ilişki modeli kullanılarak veri modelleme
yapıldığında, eğer veri tabanını gerçekleştirmek
için ilişkisel bir VTYS kullanılacaksa, oluşturulan
varlık-ilişki çizelgesinin ilişki şemalarına
dönüştürülmesi gerekir.
Bu amaçla varlık-ilişki modelindeki her farklı
kavramın (varlık kümesi, nitelik, ilişki kümesi,
ilişki kümesinin tanımlayıcı niteliği, güçlü ve zayıf
varlık kümeleri, ..vb) ilişkisel modelde nasıl
gösterileceğinin bilinmesi gerekir.
Varlık Kümelerinin
Dönüştürülmesi


Varlık-ilişki modelindeki her varlık kümesi için
ilişkisel modelde bir ilişki şeması oluşturulur.
İlişkinin nitelikleri olarak da varlık kümesinin
nitelikleri kullanılır.
Örnek
DKODU
ADI
SOYADI
CİNSİYETi
DERS
ÖĞRNO
ÖĞRENCİ
KREDİSİ
DOĞTAR
DERSADI

Daha önce verilmiş bir örnek olan, ÖĞRENCİ ve
DERS varlık kümelerine karşılık, ilişkisel
modelde aşağıdaki ilişki şemaları oluşturulur.


ÖĞRENCİ (ÖĞRNO, ADI, SOYADI, CİNSİYETİ,
DOĞTAR)
DERS (DKODU, DERSADI, KREDİSİ)
Zayıf Varlık Kümelerinin
Dönüştürülmesi


Eğer varlık kümesi en az bir anahtarı bulunan
güçlü bir varlık kümesi ise, ilişki nitelikleri
olarak varlık kümesinin niteliklerinin
kullanılması yeterlidir.
Ancak eğer varlık kümesi, anahtarı olmayan
zayıf bir varlık kümesi ise, ilişki nitelikleri
olarak zayıf varlık kümesinin niteliklerinin
kullanılması yeterli değildir.
Zayıf Varlık Kümelerinin
Dönüştürülmesi


Çünkü bu niteliklerin hepsi birlikte alındığında
bile bir anahtar oluşturmadığı ve anahtarı
bulunmayan bir ilişkinin olamayacağı
bilinmektedir.
Bu nedenle zayıf bir varlık kümesine karşı gelen
ilişki şeması oluşturulurken, ilişki nitelikleri olarak
zayıf varlık kümesinin niteliklerine ek olarak, bu
varlık kümesinin var olma bağımlı olduğu güçlü
varlık kümesinin anahtarında yer alan
niteliklerde kullanılır.
Örnek
ADI
ÖĞRNO

LİSENO
SOYADI
ÖĞRENCİ
OKUDUĞU
LİSE
LİSEADI
KENT
Daha önce verdiğimiz yukarıdaki çizimdeki güçlü
LİSE varlık kümesi ile zayıf ÖĞRENCİ varlık
kümelerine karşılık, ilişkisel modelde aşağıdaki
ilişki şemaları oluşturulur.


LİSE (LİSENO, LİSEADI, KENT)
ÖĞRENCİ (LİSENO, ÖĞRNO, ADI, SOYADI)
İlişki Kümelerinin
Dönüştürülmesi



Genel olarak varlık-ilişki modelindeki her ilişki
kümesi, ilişkisel modelde bir ilişki şemasına
dönüştürülür.
Ancak kimi ilişki kümeleri için ilişkisel modelde
ayrı bir ilişki şeması oluşturmaya gerek yoktur.
Bunun yerine varlık kümesi için oluşturulan ilişki
şemalarından birine, diğer varlık kümesinin
anahtarında yer alan nitelikleri eklemek
yeterlidir.
İkili Çoktan-Çoğa İlişki
Kümelerinin Dönüştürülmesi


Eğer bir ikili ilişki kümesinin türü çoktan-çoğa
(ilişki hiçbir yönde işlevsel değil) ise ilişkisel
modelde bu ilişki kümesi için ayrı bir şema
oluşturulur.
İlişki kümesine karşılık gelen ilişki
şemasında, her iki varlık kümesinin
anahtarları ile, varsa ilişki tanımlayıcı
niteliklerine yer verilir.
Örnek

Örneğin SATTIĞI ilişkisi ilişkisel modelde
aşağıda şeması verilen ilişki ile gösterilir.
SATTIĞI (MAĞNO, MALKODU, MİKTAR)
MAĞNO
MAĞADI
MAĞAZA
n
MALKODU
SATTIĞI
MİKTAR
m
MALADI
MAL
İkiden Büyük Dereceli İlişki
Kümelerinin Dönüştürülmesi


Eğer bir ilişki kümesi ikiden çok varlık kümesi arasında
kurulmuşsa (ilişki üçlü, dörtlü,.. bir ilişki ise), ilişkisel
modelde bu ilişki kümesine karşılık ayrı bir ilişki şeması
oluşturulur.
Oluşturulan ilişki şemasında, aralarında ilişki kurulan tüm
varlık kümelerinin anahtarlarına ek olarak, varsa ilişkinin
tanımlayıcı niteliklerine yer verilir.
Örnek
TARİH
KONSNO
SALON
KONSER
GÖREVİ
KATILIM
ESNO
ESER
ESADI
BESTECİ
ESTÜRÜ
MZSNO
MÜZİSYEN
SOYADI
ADI

KONSER, ESER ve MÜZİSYEN varlık
kümeleri arasındaki KATILIM adlı üçlü ilişki
kümesini düşünelim.
Örnek
TARİH
KONSNO
SALON
KONSER
GÖREVİ
KATILIM
ESNO
ESER
ESADI
BESTECİ
ESTÜRÜ
MZSNO
MÜZİSYEN
SOYADI
ADI

Bu ilişki kümesi hangi konserde, hangi eser
çalınırken orkestrada hangi müzisyenlerin yer
aldığını ve görevlerinin ne olduğunu
göstermektedir.
Örnek
TARİH
KONSNO
SALON
KONSER
GÖREVİ
KATILIM
ESNO
ESER
ESADI
BESTECİ
ESTÜRÜ
MZSNO
MÜZİSYEN
SOYADI
ADI
KONSER(KONSNO, TARİH, SALON)
ESER(ESNO, ESADI, ESTÜRÜ, BESTECİ)
MÜZİSYEN(MZSNO, ADI, SOYADI)
Örnek


Üçlü KATILIM ilişkisi için, ilişkisel modelde
aşağıdaki ilişki şeması oluşturulur:
KATILIM (KONSNO, ESNO, MZSNO, GÖREVİ)
Eğer varlık kümeleri arasındaki ikili eşlemelerin
(konser-eser, konser-müzisyen ve esermüzisyen) her üçü de çoktan-çoğa ise KATILIM
ilişkisinin anahtarı, yukarıdaki ilişki şemasında
görüldüğü gibi üç varlık kümesinin anahtarlarının
birleşiminden oluşur.
İlişkisel Model



İlişkisel model, günümüzde en yaygın
biçimde kullanılan bir modeldir.
İlişkisel model varlıklar arasındaki bağlantının
içerdiği değerlere göre sıralanması esasına
dayanır.
Bu yaklaşımda veri tabanındaki tüm ilişkiler
tablolar biçiminde tanımlanmaktadır.
73
İlişkisel Veri Tabanı





İlişkisel veri tabanı, her biri özel isimlere
sahip tablolardan oluşur.
Burada 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.
74
Tablonun özellikleri





Tablolar sütunlardan oluşur.
Her bir sütunun ayrı bir adı vardır.
Her bir sütun aynı niteliğin tanımladığı aynı
etki alanının belirlediği değerleri içerir.
Satırların ve sütunların sırası önemsizdir.
Her bir satır birbirinden farklıdır.
75
Soyutsal Katmanlar (Levels of
Abstraction


Fiziksel Katman (Physical level): Bir kayıdın nasıl
saklanacağını tanımlar(Örneğin,müşteri).
Mantıksal Katman (Logical level): Bir verinin nasıl
veritabanında saklanacağını ve veriler arasındaki ilişkileri
tanımlar.
tip (type) musteri = kayıt (record)
musteri_id : string;
musteri_adi : string;
musteri_sokak : string;
musteri_il : integer;
bitiş (end)

Görüntü Katmanı (View level): Tasarımı kullanıcıdan saklar(
Örneğin veri tipi veya hangi bilgilerin görüntüleneceği)
76
Nesneler ve Şemalar


Programlama dillerindeki tip ve değişkenlere benzerler
Şema (Schema) – Veritabanının mantıksal yapısı




Nesneler (Instance) – Zamandaki herhangi bir noktadaki veritabanı
içersindeki içerik.


Örnek: Veritabanı,Müşteri ve hesap bilgileri ile bunlar arasındaki ilişkiyi
barındıran bir kümedir.
Fiziksel Şema (Physical schema): Fiziksel düzeyde veritabanı
tasarımı(Dosyanın sabit dikteki yeri, büyüklüğü..)
Mantıksal Şema (Logical schema): Mantıksal düzeyde veritabanı tasarımı
(veri alanları, ilişkiler)
Bir değişkenin değerine benzemektedir.
Fiziksel Veri Bağımsızlığı (Physical Data Independence) – Mantıksal
şemayı değiştirmeden fiziksel şemayı değiştirme kabiliyeti


Uygulamalar mantıksal şemaya bağlıdır.
Genelde , değişik katmanlar ve bileşenler arasındaki arabirimler öyle
tanımlanmalıdırki bazı bölümlerin değiştirilmesi diğerlerini fazla etkilememeli.
77
VERİTABANI ÖRNEĞİ
Uygulama Programı
1
ALT ŞEMA
A
Uygulama Programı
2
FİZİKSEL
FİZİKSEL
ŞEMA
ŞEMA
MANTIKSAL
ŞEMA
VERİTABANI ŞEMALARI
FİZİKSEL
VERİTABANI
Uygulama Programı
3
ALT ŞEMA
B
Uygulama Programı
4
KULLANICILAR
78
VERİ MODELLERİ

Asağıdakilerini tanımlayan araç topluluğu





Veri (Data)
Veri İlişkileri (Data relationships)
Veri Kısıtlamaları (Data constraints)
İlişkisel Model (Relational model)
Varlık-ilişki veri modeli (Entity-Relationship
data model) (Coğunlukla veri tabanı dizaynı
için)
79
İlişkisel Veritabanı
•İlişkisel veritabanı ilişkisel model bazlıdır.
•Veri etrafındaki bilgi ve ilişkiler tablolar tarafından gösterilir
Öznitelikler (Attributes)
80
İlişki Gösterimi



İlişkinin o anki değerleri (relation instance) bir tablo tarafından
gösterilir.
r deki bir t elemanı bir değerdir ve tablodaki bir satır (row) ile
gösterilir.
Değerlerin sırası önemli değildir. (Değerler keyfi sırada olabilir)
customer_name customer_street
Jones
Smith
Curry
Lindsay
Main
North
North
Park
Öznitellikler (veya sütunlar)
attributes
customer_city (or columns)
Harrison
Rye
Rye
Pittsfield
Değerler
(yada satırlar)
tuples
(or rows)
customer
81
Veritabanı

Bir veritabanı birden fazla ilişkiye sahiptir.

Bir şirketin bilgisi birden fazla parçaya bölünmüştür, her parça bilginin bazı
bölgelerini ilişkilendirir
account : hesaplar hakkındaki bilgiyi tutar.
depositor : hangi müşterinin hangi hesabı tuttuğunu gösteren bilgiyi
saklar
customer : müşteri hakkındaki bilgileri tutar

Bütün bilgilerin tek bir ilişkide saklanması örneğin
bank(account_number, balance, customer_name, ..)
aşağıdaki sonuçlara yol açabilir

Bilginin tekrarlanması (repetition of information)


Boş değerlerin ihtiyaçı


Örneğin iki müşteri tek hesaba sahip (ne tekrarlar?)
Örneğin hesabı olmayan müşterinin gösterimi
Normalizasyon teorisi (Normalization theory) ilişkisel veri tabanının tasarımından
bahsetmektedir
82
TEMEL KAVRAMLAR

Alan(Field) : Veritabanı tabloları içerisinde saklanacak verinin içeriğine
göre, fiziksel tipi belirlenen (Sayı,String vb.) ve isimlendirilen bölümlere
denir.(Örnek : Bir field içerisinde bir iş yerindeki personele ait "isim"
bilgisi saklanacak ise, programın kontrolü açısından alan(field)
ismininde içerik ile ilgili seçilmesi tercih edilir yani "PersonelIsim" veya
benzer bir alan(field) ismi seçilmelidir.

Tablo(Table) : İçeriklerine göre ayrıştırlımış alan(field) topluluklarına
tablo denir, tablolar veri tabanlarını oluşturan bilgi depolarıdır.
83
BİRİNCİL VE YABANCI ANAHTAR





Birincil Anahtar(Primary Key) : Üzerinde işlem yapılan tabloya ait kayıtları
benzersiz olarak tanımlayan alanlardır.
Örneğin bir okulu ele alalım burda öğrencileri benzersiz biçimde tanımlayabilen
en önemli öge şüphesiz ki ögrenci numarasıdır.Bir okulda,isim,soyisim gibi
kimilik bilgilerl aynı olabilecek bir çok öğrenci mevcut olabilir fakat,hiç bir
öğrencinin, o öğrenciyi tanımlayan, öğrenci numarası aynı olamaz benzer bir
mantık ile telefon numaraları da düşünülebilir.
Yabancı Anahtarlar(Foreign Keys) : Tablo içerisindeki verilerin birbirleri ile
iletişim kurabilmeleri amacı ile kullanılan benzersiz olması gerekmeyen
alanlardır.
Örneğin içerisinde "Ogrenci_No" birincil anahtarını barındıran "Ogrenciler" isimli
tablonun var olduğunu varsayalım ayrıca "Notlar" isimli bir tablonun içerisinde,
aynı "Ogrenci_No" alanını çesitli defalar yabancı anahtar olarak kullanmamız
gerekebilir (Çünkü, genellikle bir öğrencinin birden fazla dersi ve dolayısıyla
"Notlar" isimli tabloya işlenmesi gereken birden fazla sınav notu olacaktır.)
Bağımsız tablolarda bu şekilde organize edilmiş veriye "ilişkisel(Relational)"
bu veriyi içeren veritabanına ise "ilişkisel veritabanı" ismi
verilir.Veritabanlarındaki verinin okunması ve yönetilmesi için kullanılan ortak
sorgulama diline Yapısal Sorgulama Dili (Structured Query Language
(SQL) ) denir.
84
BİRİNCİL VE YABANCI ANAHTAR
BİRİNCİL ANAHTAR
BÖLÜM
B_no
1
2
3
isim
muhasebe
insan kaynakları
IT
ÇALIŞANLAR
Calısan_no
1
2
3
4
5
6
B_no
2
3
2
1
3
3
YABANCI ANAHTAR
isim
Nora Edwards
Ajay Patel
Ben Smith
Brian Burnett
John O'Leary
Julia Lenin
85
Fonksiyonel Bağımlılık





R’nin ilişkiyi(relation) ;
A ve B’nin bir nitelik veya nitelik setini temsil
ettiğini düşünelim.
Eğer R ilişkisinde her bir A değeri , tam
olarak bir B değerine işaret ediyorsa ;
B, A ya fonksiyonel olarak bağımlıdır
diyebiliriz
A -> B (A fonksiyonel olarak B’yi tanımlar.)
86
Fonksiyonel Bağımlılık
ID
İSİM
ŞEHİR
123 Ahmet
Ankara
324 Derya
Ankara
574 Derya
İstanbul
 Kişiler tablosu ile ilgili neler söyleyebiliriz?
 “Eğer ID numarasını biliyorsam, ismini de biliyorum”
 ID numarası ismi belirmektedir.
 İSİM niteliği, ID’ye fonksiyonel bağımlıdır.
87
Fonksiyonel Bağımlılık
A -> B A fonksiyonel olarak B’yi tanımlar.)
Yukarıdaki ogrenci tablosunu ele aldığımız zaman aşağıdaki
bağımlılıklardan söz edebiliriz.
ogr_no -> ogr_name
ogr_no - > ogr_name , bolum , sinif , kimlik_no
kimlik_no - > ogr_no , ogr_name , bolum , sinif
88
Fonksiyonel(İşlevsel)
Bağımlılık





R’nin ilişkiyi(relation) ;
A ve B’nin bir attribute yada attribute setini
temsil ettiğini düşünelim.
Eğer R ilişkisinde her bir A değeri , tam
olarak bir B değerine işaret ediyorsa ;
B, A ya fonksiyonel olarak bağımlıdır
diyebiliriz
A -> B (A fonksiyonel olarak B’yi tanımlar.)
Normalleştirme






İlişkisel veritabanı oluşturmak için normalleştirmeyi
bilmek çok önemlidir.
Normalleştirme veri kayıplarını engellemek, verinin
tekrarını azaltmak, silme, güncelleme eklemede çıkan
zorlukları en aza indirmek icin yapılan operasyonlar
toplamidir
Amac veritabanına etkinlik kazandırmaktır.
Herhangi bir tablonun tekrarlı veriler içerdiği duruma
birinci normal form denir.
Birinci normal formdaki bir tabloda tekrarlayan sütunlar
bulunmamalıdır.
Normalizasyon (Ayrıştırma), bir tabloyu tekrarlardan
arındırmak için daha az satır ve sütun içeren alt
kümelerine ayrıştırma işlemidir
90
Normalleştirme(Normalizasyon)

Normalleştirilmemiş bir tabloda çok değerli nitelikler
ve tekrarlanan gruplar vardır.
91
Normal Forms: Review




Unnormalized – Çok değerli nitelikler ve
tekrarlayan gruplar vardır
1 NF- Çok değerli nitelikler ve tekrarlayan
gruplar ortadan kaldırılır.
2 NF – 1 NF + kısmi bağımlılık ortadan
kaldırılır.
3 NF – 2 NF + Geçişken bağımlılık ortadan
kaldırılır.
Birinci Normal Form

Örneğin kitap tablosunda, birden fazla yazarı
olan kitap için yazar1, yazar2, yazar3 diye alanlar
açsaydık, bu kurala uymamış olurduk. Böyle bir
durumda, ayrıca yazarlar tablosu da oluşturarak
kuralı çiğnememiş oluruz.
Genellikle yapılan hata:
Verileri virgül veya bir başka karakter ile ayırıp aynı alana
girmek. Daha sonra program içerisinde split ile bu değerleri
ayırmak. Ancak bu ilişkisel veritabanının doğasına terstir.
BİRİN Cİ NORMAL FORM



Veri tabanı için temel kuralları içerir.
Tekrarlayan sütunların olması engellenir.
İlişkili veri gruplarına ait ayrı tablolar
oluşturulmalı ve her satır birincil anahtar
ile temsil edilmelidir.

Müşterilere ait telefon numaralarını içerecek bir veritabanı
tasarlamak istediğimizde aşağıdaki tasarımlar Birinci Normal formda
değildir.
Birinci Normal Form

Çözüm iki ayrı tablo olarak tasarım yapmaktır
İkinci Normal Form

Bir tablo için, anahtar alan dışındaki her alan, birincil
anahtar olarak tanımlı tüm alan veya alanlara bağlı
olmak zorundadır.

Kayıtlar bir tablonun birincil anahtarı dışında bir
öğeye bağımlı olmamalıdır.

KISMİ BAĞIMLILIKLAR KALDIRILMALIDIR.
Birden çok kayıt için geçerli olan değer
kümeleri için ayrı tablolar oluşturmalıdır.
Bu tabloları bir yabancı anahtarla
ilişkilendirilmesi gerekir


97
Kısmi bağımlılık(Partial Dependency)

Anahtar olmayan alan, birleşik anahtarın sadece bir
kısmı ile belirlenebiliyorsa, buna kısmi bağımlılık
denir.
2NF’a Geçiş


Nitelikler, birincil alanın tamamına bağımlı olmalıdır,
bir kısmına değil.
Kısmi bağımlı olan olan ayrı bir tabloya alınmalıdır.
STUDENT
Stud_ID
Name
Course_ID
Credit
101
Lennon
MSI 250
3,00
101
Lennon
MSI 415
3,00
125
Johnson
MSI 331
3,00
2NF’a Geçiş
CUSTOMER
STUDENT_COURSE
Stud_ID
Name
Course_ID
Credit
101
Lennon
MSI 250
3,00
101
Lennon
MSI 415
3,00
125
Johnson
MSI 331
3,00
Stud_ID
Course_ID
101
MSI 250
101
MSI 415
125
MSI 331
COURSE
STUDENT
Stud_ID
Name
Course_ID
Credit
101
Lennon
MSI 250
3,00
101
Lennon
MSI 415
3,00
125
Johnson
MSI 331
3,00
Kısmi bağımlılık (Partial Dependency)



Ders No ve Bölüm no birlikte Ders Adını
tanımlamaktadır
Bölüm No ise, bölüm adını tanımlamaktadır.
Bölüm adının Ders no ile bir bağlantısı yoktur.
Bölüm No
Ders No
Ders Adı
Bölüm Adı
2232
101
İKİNCİ NORMAL FORM



Tekrarlayan veriler tablodan
kaldırılmalıdır.
Satırlarda tekrarlanan veri gruplarını
engellemek için bu alanları ayrı bir tabloya
taşımak gerekmektedir.
Oluşturulan tablolar arasındaki ilişkiler
yabancı anahtar (foreign key) aracılığı ile
oluşturulur.
103
104
Geçişken Bağımlılık( Transitive
Dependency)





A,B,C niteliklilerini içeren 3 nitelikli bir
tabloda
A, B, ve C için
AB
B  C fonksiyonel bağımlılıkları bulunmakta
ise,
C kısmi olarak A’ya B aracılığı ile bağımlıdır.
105
Üçüncü Normal Form




Geçişken bağımlılıklar kaldırılmalıdır.
Her sütun direkt olarak birincil anahtara bağımlı
olmalıdır
Birincil anahtara bağlı olmayan alanlar ayrı bir
tabloya alınmalıdır.
Üçüncü normal formda tablonun, Primary Key ile direk
ilişkisi bulunmayan, ancak diğer alanlara bağlı alanlar
bulunur.
Geçişken Bağımlılık( Transitive
Dependency)

3NF’ a geçiş
Manager alanı anahtar olmayan Dept. alanına bağlıdır.
3NF


Geçişken bağımlılığı ortadan kaldırmak için,
Manager alanı için ayrı bir tablo oluşturulur.
Örnek



ISBN  Title
ISBN  Publisher
Publisher  Address
Her nitelik doğrudan
veya dolaylı birincil
anahtara bağlıdır.
Tekrarlayan nitelik
yoktur.1NF özellikleri
taşımaktadır.
BOOK
ISBN
Title
Publisher
Address
Örnek



ISBN  Title
ISBN  Publisher
Publisher  Address
İlişki en azından1NF özelliklierini
taşımaktadır. Birleşik birincil
anahtar yoktur. Bu nedenle
kısmi bağımlılık olamaz. Bu
tablo 2NF’dedir.
BOOK
ISBN
Title
Publisher
Address
Örnek



ISBN  Title
ISBN  Publisher
Publisher  Address
Publisher anahtar olmayan bir
alandır ve diğer anahtar olmayan
bir alan olan adresi
belirlemektedir. Geçişken
bağımlılık söz konusudur. İlişki
3NF’de değildir.
BOOK
ISBN
Title
Publisher
Address
Örnek



ISBN  Title
ISBN  Publisher
Publisher  Address
Sonuç olarak bu tablo
2NF’dedir.
BOOK
ISBN
Title
Publisher
Address

Öğrenci No, Öğrenci Adı, Ders Adı, Dersin
Kredisi bilgilerini tutacak bir tablo için tasarım
yapalım
113
114
115
116
1NF
MüŞ.No
EvNo
Müş.Adı
Adres
KiraBaşl.
KiraBitiş
Kira
SahipNo
SahipAdı
117
2NF
Müş.No
Ev No
Müş.Adı
Adres
Müş.No
Kira
İşlemNo
SahipNo
KiraBaşl.
KiraBitiş
SahipAdı
118
3NF
İşlem No
Adres
Kira
SahipNo
SahipNo
SahipAdı
119
3NF(TÜM TABLOLAR)
Müş.No
İşlem No
Müş.Adı
Adres
Müş.No
Kira
İşlemNo
SahipNo
KiraBaşl.
KiraBitiş
SahipNo
SahipAdı
120
1NF
İşçi No
İşçi No
İşçi Adı
Proje Id
Bölüm
Başlangıç Tarihi
Yönetici
Konum Hafta
1NF


2NF’a geçiş için kısmi bağımlılıklar kaldırılmalıdır.
Proj Start Date Proj-id’ye bağımlıdır.
2NF

Proj Start Date için ayrı
bir tablo oluşturulur.

3NF’ a geçiş
Manager alanı anahtar olmayan Dept. alanına bağlıdır.
3NF

Manager alanı için ayrı bir tablo oluşturulur.
TÜM TABLOLAR
129
2NF
130




Birinci tablo 2NF’de
Fakat ikinci tabloda bileşik anahtarın sadece bir kısmına
bağımlı alan alanlar var.
Employee name, Department No and Department Name
alanları SADECE Employee No’ya bağlıdır. Bu
ALANLARIN BAŞKA TABLOAYA ALINMASI GEREKİR.
Hourly Rate ise, Project Code ve Employee No
alanlarının ikisine birden bağlıdır. Her çalışan farklı
projeler için farklı ödemeler alabilir.
131
132
133



Anahtar olmayan alanlar arasında bir
bağımlılık var mı?
Yani bir A alanındaki değere karşılık hep aynı
B değeri mi karşılık gelmektedir?
Eğer böyle bir durum varsa bu alanlar ayrı bir
tabloya taşınmalıdır.
134
2NF

DF
3NF
3NF ye geçiş
VERİ TÜRLERİ


TABLONUN ALAN İSİMLERİ
BELİRLENDİKTEN SONRA, HER BİR
ALANIN İÇERDİĞİ VERİ TÜRÜNÜNÜ DE
BELİRTİLMESİ GEREKİR.
VERİ TÜRÜ METİN, NOT,
SAYI,TARİH/SAAT, PARA BİRİMİ,
OTOMATİK SAYI, EVET/HAYIR, OLE
NESNESİ VEYA KÖPRÜ OLABİLİR.
139
DÖRDÜNCÜ NORMAL FORM



Tablolarda çok değerli
bağımlılık yer almamalıdır.
Yandaki tabloda Öğretim Üyesi
dersle ilişkili durumdadır.
Fakat dersler ve kitaplar
birbirinden bağımsızdır. ELC212
dersi için yeni bir kitap eklemek
istersek, Öğretim üyesinin adını da
yazmak zorunda kalırız.
Kitap
Öğretim Üyesi
ELC212
Silberschatz
John D
ELC212
Nederpelt
John D
ELC212
Silberschatz
William M
ELC212
Nederpelt
William M
ELC212
Silberschatz
Christian G
ELC212
Nederpelt
Christian G
EDC102
Silberschatz
John D
EDC102
Silberschatz
William M
Ders
140
DÖRDÜNCÜ NORMAL FORM




Aynı şekilde öğretim üyesi eklemek istersek kitap adı yazmak zorunda kalırız.
Bu alanları boş bırakırsak yine tabloda BOŞ alan soruna neden olmuş oluruz.
Bu problemi ayrı iki tablo ile çözebiliriz.
DERS KİTAP
DERS ÖĞRETİM ÜYESİ
Kitap
Öğretim Üyesi
ELC212
Silberschatz
John D
ELC212
Nederpelt
John D
ELC212
Silberschatz
William M
ELC212
Nederpelt
William M
ELC212
Silberschatz
Christian G
ELC212
Nederpelt
Christian G
EDC102
Silberschatz
John D
EDC102
Silberschatz
William M
Ders
141
143
MÜŞTERİ
NO
ADI
SOYADI ADRES
SİPARİŞ
NO
ÜRÜN
SİP TARİH NO
Kategorisi MARKA
ÜRÜN ADI
GÜNAY CAD. NO:15
101AHMET DEMİR SAKARYA
1210 12.10.2010
1230Bilgisayar CASPER
GÜNAY CAD. NO:15
101AHMET DEMİR SAKARYA
1215 13.10.2010
1323Yazılım
MICROSOFT WINDOWS 7 HOME
GÜNAY CAD. NO:15
101AHMET DEMİR SAKARYA
1218 14.10.2010
1235Telefon
NOKIA
FİYAT
ADET
CASPER CD.GLE6500S 565,00 TL
1
240,00 TL
2
468,00 TL
1
NOKIA 5800 RED
102DEMET TAŞ
ATATÜRK CAD.NO:16
KOZYATAĞI İSTANBUL
1245 12.10.2010
1230Bilgisayar CASPER
CASPER CD.GLE6500S 565,00 TL
1
102DEMET TAŞ
ATATÜRK CAD.NO:16
KOZYATAĞI İSTANBUL
1246 15.10.2010
1234Telefon
APPLE
IPHONE 3GS 8GB
SİYAH
1.256,00
TL
2
TelefonAPPLE
IPHONE 3GS 8GB
SİYAH
1.256,00
TL
2
MEHME
ŞAİR NEDİM SOK.
105 T
DOĞAN NİŞANTAŞI İSTANBUL
1252 12.10.2010
1234
144
METİN



EN FAZLA 255 KARAKTERLİK
ALFASAYISAL KARAKTERLERDİR.
ÖRNEĞİN PERSONEL ADI, SOYADI...
BÖYLE ALANLAR ÜZERİNDE DOĞRUDAN
DOĞRUYA MATEMATİKSEL İŞLEMLER
YAPILAMAZ.
145
NOT

BAZEN TABLO İÇİNDE UZUN
AÇIKLAMALAR YAPMAK GEREKEBİLİR.
BU TÜR ALANLARA 65.500 KARAKTER
UZUNLUĞUNDA VERİ KAYDEDİLEBİLİR.
146
SAYI


SAYISAL DEĞERLER İÇİN KULLANILIR.
BYTE, TAMSAYI, UZUN TAMSAYI, ÇİFT VE
TEK DUYARLIKLI TANIMLARI
YAPILABİLİR.
147
TARİH/SAAT

BELLEKTE 8 BYTE’LIK YER KAPLAR VE
TARİH/SAAT BİLGİSİ İÇERİR.
148
PARA BİRİMİ


ÖZELLİKLE BÜYÜK PARASAL
GEĞERLERİN KULLANILDIĞI
ALANLARDIR.
SAYININ TAMSAYI KISMI EN FAZLA 15,
ONDALIKLI KISMI EN FAZLA 4 KARAKTER
OLABİLİR.
149
OTOMATİK SAYI


BÖYLE VERİ TÜRÜNE SAHİP ALANLAR,
TABLOYA YENİ BİR KAYIT EKLENDİĞİNDE,
ACCESS TARAFINDAN OTOMATİK OLARAK
ÜRETİLEN SIRALI YA DA RASTLANTISAL
DEDEĞERE SAHİP OLURLAR.
BU ALANDA BELİRTİLEN SAYISAL DEĞER
TEKTİR VE AYRI KAYITLARDA BİRBİRİNİN AYNI
OLAMAZ.
150
BOLEAN (EVET/HAYIR )

1 BYTE’LIK UZUNLUĞA SAHİP BU
ALANLAR EVET VEYA HAYIR BİÇİMİNDEKİ
VERİLERİN SAKLANMASI İÇİN
KULLANILIR.
151
OLE NESNESİ


EĞER TABLO ALANLARINDA RESİM, SES
VEYA GRAFİK GİBİ OLE NESNELERİNİN
SAKLANMASI SÖZKONUSU İSE BU
TANIMLAMA YAPILIR.
BU ALANIN BÜYÜKLÜĞÜ EN FAZLA 1 GB
OLABİLİR.
152
KÖPRÜ (HİPERLİNK)

BU VERİ TÜRÜ İLE HERHANGİ BİR WEB
SİTESİNİN ADRESİ SAKLANIR.
153
BYTE


0-255 ARASI POZİTİF TAMSAYILARI
SAKLAR.
BELLEKTE 1 BYTE YER KAPLAR.
154
INTEGER (TAMSAYI)


2 BYTE’LIK İŞARETLİ TAMSAYI TİPİDİR.
-32.768 İLE 32.767 ARASINDA BİR DEĞER
ALABİLİR.
LONG (UZUN TAMSAYI)


4 BYTE’LIK İŞARETLİ TAMSAYI TİPİDİR.
-2.147.483.648 İLE 2.147.483.647
ARASINDA BİR DEĞER ALABİLİR.
DİKKAT !!!!

BYTE, INTEGER VE LONG TİPİNDEKİ
DEĞİŞKENLERE ONDALIK SAYI
ATANIRSA, SAYI EN YAKIN TAMSAYIYA
YUVARLANIR.




Dim i as integer
i=4.3 ‘ i=4 olarak atanır
i=4.5 ‘ i=5 olarak atanır
i=4.6 ‘ i=5 olarak atanır.
SINGLE (TEK)



4 BYTE’LIK ONDALIK SAYI TİPİDİR.
(+/-)3.402823E38 İLE (+/-)1.401298E-45
ARASINDA DEĞER ALABİLİR.
ONDALIK OLARAK EN FAZLA 7 HANE
SAKLAYABİLİR.
DOUBLE (ÇİFT)



8 BYTE’LIK ONDALIK SAYI TİPİDİR.
(+/-)1.79769313486232E308 İLE (+/)4.94065645841247E-324 ARASINDA
DEĞER ALABİLİR.
ONDALIK OLARAK EN FAZLA 7 HANE
SAKLAYABİLİR.
CURRENCY



8 BYTE’LIK ONDALIK SAYI TİPİDİR.
ANCAK SAYININ ONDALIK KISMI 4
BASAMAKTAN FAZLA OLAMAZ.
BU TİP, DAHA ÇOK PARA HESAPLARI VE
VİRGÜLDEN SONRAKİ HASSASİYETİ
ÖNEMSİZ OLAN İŞLEMLER İÇİN
KULLANILIR.
CURRENCY

922337203685477.5808 İLE
922337203685477.5808 ARASINDA DEĞER
ALABİLİR.




Dim i as currency
i=4.30571 ‘i=4.3057
i=4.30575 ‘i=4.3058
OLARAK ATANIR.
DECIMAL (ONDALIK)



14 BYTE’LIK VERİ TİPİDİR.
BU TİPİN EN ÖNEMLİ ÖZELLİĞİ,SAYIDAKİ
BÜTÜN BASAMAKLARIN TUTULMASIDIR.
BU VERİ TÜRÜ 28 ONDALİK KARAKTER
SAKLAYABİLİR.
INPUT MASK (MASKE)


VERİLERİN BELİRLİ KURALLARA
UYMASINI SAĞLAYAN KISITLAMALARDIR.
ÖRNEĞİN BİR ALANA SADECE SAYISAL
DEĞERLERİN GİRİLMESİ ZORLANABİLİR.
163
INPUT MASK (MASKE)






MASKENİN OLUŞTURULMASINDA BAZI
ÖZEL İŞERETLERDEN YARARLANILIR.
?:A-Z ARASI ALFABETİK KARAKTER.
L: A-Z ARASI ALFABETİK KARAKTER.*
#:0-9 ARASI RAKAM VEYA BOŞLUK.
0:0-9 ARASI RAKAM*
9: 0-9 ARASI RAKAM VEYA BOŞLUK.
*giriş zorunlu
164
Validation Rule






Sadece a..z arası harf: Is Null OR Not Like "*[!a-z]*“
Sadece 0..9 arası rakam: Is Null OR Not Like "*[!0-9]*“
8 karakter: Is Null OR Like "????????“
Is Null OR "M" Or "F"
Sadece pozitif sayı Is Null OR >= 0
1000 ile 9999 sayıları arasında değer:Is Null OR Between 1000 And
9999
INPUT MASK (GİRİŞ MASKESİ)






MASKENİN OLUŞTURULMASINDA BAZI
ÖZEL İŞERETLERDEN YARARLANILIR.
?:A-Z ARASI ALFABETİK KARAKTER.
L: A-Z ARASI ALFABETİK KARAKTER.*
#:0-9 ARASI RAKAM VEYA BOŞLUK + VE
– KULLANILABİLİR.
0:0-9 ARASI RAKAM*
9: 0-9 ARASI RAKAM VEYA BOŞLUK.
*giriş zorunlu
166
Geçerlik kuralı (Validation
Rule)



“E" Or “K"
>= 0
1000 ile 9999 sayıları arasında değer: Between 1000 And 9999

>?<???????????????????????
168
GİRİŞ MASKESİ(input mask)
00\->L??\-099 PLAKA İÇİN GİRİŞ
MASKESİ
 00" -">L??\-099""

SQL


SQL Yapısal sorgulama dili (SQL - Structured Query Language)
ilişkisel veri tabanı dilidir. SQL veri tabanında yeni tablo
oluşturma, veri ekleme, silme, düzeltme, güncelleme, sorgulama
ve koruma ve daha çok sayıda işlemin bir anda yapılmasını
sağlar.
SQL dili IBMtarafından 1979’da oluşturulduktan sonra SQL dilinin
kullanımındaki farklılıkları ortadan kaldırmak ve bu konuda bir
standart yakalamak için 1983 yılında ANSI ve ISO bir araya
gelerek bir çalışma başlatmış ve 1987 yılında resmi olmayan ilk
SQL standardı olan SQL1'i ortaya çıkarmıştır. Bu standardın
yetersiz kalmasının ardından 1989 yılında SQL89 adında yine
aynı kurumlar tarafından yeni bir standart geliştirilmiştir. Daha
sonra 1992 yılında SQL2 diye bir standart çıkarılmıştır
171
Veri Tipi
Kullanımı
Örnek
Char,
Character(n)
N tane karakterden oluşan karakter katarını
gösterir.
Charakter(5);"Ahmet","mehme"
Charakter(3); "Ali","Bab"
Int, integer;
Kullanıldığı ortama göre değişen, genelde dört
byte'tan oluşan bir tamsayı tipi.
İnt; 5, 56, 2343455, 414444454
Smallint;
Kullanıldığı ortama göre değişen, genelde iki
byte'tan oluşan daha küçük bir tamsayı
tipi.
Smallint; 4, 45, 452, 64251
Float;
Kayan noktalı bir sayı tipi.
Float; 4.7 , 54.12 , 44.24
Double;
Yüksek duyarlı bir kayan noktalı bir sayı tipi.
Double; 477544.452154545452
Numeric(n);
N adet rakamdan oluşan ölçekli bir kayan sayı
tipi.
Numeric(4); 4541,12,1542,1111
Numeric(3); 142,14,1,111,222
Date;
Bir tarihi temsil eder.
Date; 25.12.1977 , 25/12/2002
Blop;
Büyük miktarda ikilik sayı tutabilir.
172




Yeni gelişmeler karşısında SQL diline bir çok yeni
özellikler (özellikle nesneye yönelik olmak üzere)
eklenmiş ve yeni uygulamaların ihtiyaçlarını
karşılamak için yeni eklentiler yapılmıştır. Böylece
resmi olmamakla beraber SQL3 ortaya çıkmış oldu.
SQL, isminin belirttiği gibi sadece bir veri tabanı
sorgulamak ve onun verisini idare etmek için değil
onu tanımlamak için de kullanılır. SQL aslında iki
alandan meydana gelmiştir.
Veri tabanı ve tabloların oluşturulması için komutlar
içeren kısmı
Sorgu komutları içeren kısmı
173
SQL KOMUT TÜRLERİ
DDL (Data Definition Language): Veri tanımlama
deyimleri. (veritabanı üzerinde nesne yaratmak için
kullanılırlar, CREATE ALTER,DROP)
 )
 DML (Data Manuplation Language) : Veri düzenleme
dili. (Veritabanı içindeki verileri elde etmek ve
değiştirmekle ilgili SQL
deyimleridir,SELECT,INSERT, UPDATE) )
 DCL (Data Control Language): Veri kontrol dili.
(Veritabanındaki kullanıcı haklarını düzenlemek için
kullanılan deyimlerdir, GRANT, DENY, REVOKE )

174
175
Tablo oluşturmak için:
CREATE TABLE TabloADI
(
Alan_Adı Veri_türü(Boyutu), [NULL | NOT NULL]
[isteğe bağlı kısıtlar]
);

176







CREATE TABLE Ürünler
(
ID INTEGER,
Ürün_Adı char(30),
Fiyat MONEY,
Tanım CHAR (40)
);
177
178
179
180






CREATE TABLE Deneme
(
ID COUNTER (4),
[Ürün Adı] TEXT,
Fiyat MONEY
);
181
182
Kısıt Kullanımı

CREATE TABLE Toys
(
ToyID INTEGER CONSTRAINT ToyPk
PRIMARY KEY,
ToyName CHAR (30) NOT NULL,
Price MONEY NOT NULL,
Description CHAR (40) NULL
);
183








CREATE TABLE Toys
(
ToyID INTEGER,
ToyName CHAR (30) NOT NULL,
Price MONEY NOT NULL,
Description CHAR (40) NULL,
CONSTRAINT ToyPk PRIMARY KEY
(ToyId,ToyName)
);
184
Örnek




NULL: Değer girilmeden boş bırakılabilir alan.
NOT NULL: Boş bırakılamaz.
Varsayılan olarak NULL özelliği verilir
ACCESS tarafından yeni oluşturulan
alanlara.
PRIMARY KEY: Birincil anahtar özelliği verir.
Aynı değer girilemez ve varsayılan özelliği
NOT NULL’dur.
185









CREATE TABLE Manufacturers
(
ManufacturerID INTEGER CONSTRAINT ManfID
PRIMARY KEY,
ToyID2 INTEGER NOT NULL,
CompanyName CHAR (50) NOT NULL,
Address CHAR (50) NOT NULL,
PhoneNumber CHAR (8) NOT NULL UNIQUE,
CONSTRAINT ToyFk FOREIGN KEY (ToyID2)
REFERENCES Toys (ToyID)
);
186

UNIQUE : Girilen değerlerin her kayıt için
farklı olmasını sağlar. Birincil anahtar
gibidir fakat bir tabloda, birden fazla alana
bu özellik verilebilir.
187
Tablo Tasarımında Güncelleme






ALTER TABLE Tablename:
ALTER TABLE komut ile var olan bir tabloya
alan ekleyebilir, alan silebilir, var olan
alanların türünü ve adlarını düzenleyebilir.
ADD COLUMN ColumnName ColumnType
(Size) ColumnConstraint |
DROP COLUMN ColumnName |
ADD CONSTRAINT ColumnConstraint |
DROP CONSTRAINT ColumnConstraint;
188


Tabloya Alan Ekleme:
Var olan bir tabloya alan eklemek için
kullanacağımız ALTER TABLE komutu
aşağıdaki gibidir.
ALTER TABLE tablo_adi ADD alan_adi
alan_turu;
ALTER TABLE Uyeler ADD Yer CHAR(50);
ALTER TABLE Toys ADD Renk char(15)
189


ALTER TABLE Toys
ADD COLUMN Age Char(15), Country
Char(25)
190


ALTER TABLE Ürünler
ADD COLUMN Kdv_Oranı Integer,
Üretim_Yeri Char(25)
191


Tablodaki Alanları Düzenleme
Tablodaki varolan alanları düzenlemek için
kullanacağımız ALTER TABLE komutu
aşağıdaki gibidir.
ALTER TABLE Toys
ALTER COLUMN Renk CHAR(100);
192


ALTER TABLE Toys
ALTER COLUMN Price MONEY DEFAULT 10
193



Alan Silme
Tablodaki varolan bir alanı silmek için
kullanacağımız ALTER TABLE komutu
aşağıdaki gibidir.
ALTER TABLE tablo_adi DROP COLUMN
alan_adi;
ALTER TABLE Toys DROP COLUMN Renk
ALTER TABLE Ürünler DROP COLUMN
Tanım
194



ALTER TABLE Toys
ADD CONSTRAINT CheckAmount
CHECK (Price > 3);




ALTER TABLE Toys
DROP CONSTRAINT CheckAmount;
ALTER TABLE toys
DROP CONSTRAINT Toypk
195
Kısıt Eklemek




ALTER TABLE Ürünler
ADD CONSTRAINT Kısıt2 UNIQUE
(Üretim_Yeri);
ALTER TABLE Ürünler
ADD CONSTRAINT Kısıt1 UNIQUE (ID);
Kısıt Silmek
 ALTER TABLE Ürünler DROP CONSTRAINT
kısıt2
196
Uygulama Örnek




Araba kiralama şirketinin kullanacağı bir
veritabanını DML deyimlerini kullanarak
oluşturunuz.
Arabalar: Arabanın plakası, markası, yakıt
türü,Günlük Kirası
Müşteriler: Adı soyadı, tckimlik, adres, telefon
Kiralama: Hangi Araba, Kim Kiraladı,
Başlangıç tarihi, Bitiş Tarihi
197

CUSTOMER ORDER (CustNo,CustName,
OrderNo, ProdNo, ProdDesc, Qty,
CustAddress, DateOrdered)
198

2NF - remove partial dependencies
CUSTOMER (CustNo,CustName,
CustAddress)

ORDER (OrderNo ,CustNo,, ProdNo,
ProdDesc, Qty, DateOrdered)

199

3NF - remove transitive dependencies

CUSTOMER (CustName, CustAddress)

ORDER (OrderNo ,CustNo,, ProdNo, Qty,
DateOrdered)
PRODUCT (ProdNo, ProdDesc)

200
201
202
203
Geçişken Bağımlılık
204
205
206
207
208
209
210
211
Doktor no
Doktor adı
Hasta No Hasta Adı
Randevu Saati
İşlem No
212
213
SELECT

SELECT (ALAN LİSTESİ) FROM Tablo_adı
SELECT * FROM Tablo _adı

SELECT * FROM Ürünler

SELECT [Sağlayıcı No'ları], [Ürün Adı], [Liste
Fiyatı] FROM Ürünler

214
SELECT…..ORDER BY




SELECT [Sağlayıcı No'ları], [Ürün Adı], [Liste
Fiyatı] FROM Ürünler ORDER BY [Liste Fiyatı]
Varsayılan olarak artan şekilde sıralar.
Azalan şekilde sıralamak için DESC deyimi
kullanılır.
SELECT [Sağlayıcı No'ları], [Ürün Adı], [Liste
Fiyatı] FROM Ürünler ORDER BY [Liste Fiyatı]
DESC
215

SELECT [Sağlayıcı No'ları], [Ürün Adı], [Liste
Fiyatı] FROM Ürünler ORDER BY [Liste
Fiyatı] DESC, [Ürün Adı] ASC

ASC: Artan sıralama (Varsayılan değer)
DESC: Azalan sıralama

216




SELECT Ad, Soyadı,Şirket FROM Müşteriler
SELECT Ad, Soyadı,Şirket,[İş Unvanı] FROM
Müşteriler ORDER BY
SELECT Ad, Soyadı,Şirket,[İş Unvanı] FROM
Müşteriler ORDER BY 4
4: sorguda yer alan 4.alana göre sıralama
gerçekleştirir. (İş Unvanı alanı)
217
SELECT…AS

AS: Sorguda yer alan alanların takma isim
vermek için kullanılır.

SELECT Ad AS [Müşterinin Adı], Soyadı AS
[Müşterinin Soyadı],Şirket,[İş Unvanı]
FROM Müşteriler ORDER BY 1
218
SELECT..AS


SELECT [Sağlayıcı No'ları], [Ürün Adı], [Liste
Fiyatı], [Standart Maliyet],
([Liste Fiyatı]-[Standart Maliyet]) as KAR
FROM Ürünler ORDER BY [Liste Fiyatı]
219
SELECT…AS

SELECT [Sağlayıcı No'ları], [Ürün Adı], [Liste
Fiyatı], [Standart Maliyet],
ROUND(100*([Liste Fiyatı]-[Standart
Maliyet])/[Standart Maliyet])AS
KAR_ORANI FROM Ürünler ORDER BY 5
220
SELECT…AS

SELECT Adres +" "+ Şehir +" " + [Eyalet/İl]
AS Müşteri_Adres FROM Müşteriler
221
TOP, TOP PERCENT

TOP: Sorgu sonucunda ilk kaç kaydın
görüntüleneceğini belirtir.

TOP PERCENT.Satırların belli bir
yüzdesini veren Top n PERCENT yan
tümcesi kullanılabilir.
SELECT Top 50 PERCENT * FROM
TBLÖĞRENCİLER
ifadesi, TBLÖĞRENCİLER tablosundaki
bütün satırların ilk yüzde ellisini görüntüler.


222

SELECT TOP 10 [Ürün Adı], [Liste Fiyatı],
[Standart Maliyet], ROUND(100*([Liste
Fiyatı]-[Standart Maliyet])/[Standart
Maliyet])AS KAR_ORANI FROM Ürünler
ORDER BY 4 DESC
223

SELECT TOP 50 PERCENT * FROM
Müşteriler

SELECT TOP 50 PERCENT * FROM
Müşteriler ORDER BY Şehir
224
DISTINCT



DISTINCT kelimesi bir sütundaki benzersiz
kayıtları listeler. Bir sütunda belirli bir kelime iki
veya daha fazla sayıda tekrarlanıyor olabilir.
Distinct anahtar kelimesi ile her tekrarlanan kayıt
sadece bir kez listelenir.
SELECT DISTINCT [İş Unvanı] FROM Müşteriler



WHERE yantümcesi görüntülemek
istediğimiz verileri belirli bir kritere göre
seçebilmemizi sağlar.
Where yantümcesinin kullanımı zorunlu
değildir. Fakat bir koşula bağlı veri seçmek
istediğimizde FROM yantümcesinden sonra
eklenebilir.
SELECT <sütun adı> FROM <tablo adı>
WHERE <koşul(lar)>
Koşula Bağlı Olarak Listeleme




SELECT komutu ile bir tablonun satırları içinde sadece verilen bir
koşulu sağlayanlar da listelenebilir. Örneğin, maaşı 5000 ‘den fazla
olan personel listelenmek istenirse, SELECT komutu aşağıdaki gibi
yazılmalıdır:
SELECT *FROM Personel WHERE maas>5000;
Burada WHERE sözcüğünü izleyen kısımda koşul belirtilmektedir.
Koşul belirtilirken iki veri birbiri ile karşılaştırılmaktadır.
Karşılaştırma ifadesinde karşılaştırılan verilerin türü aynı olmalıdır.
Yani, bir karakter türü veri ile ancak karakter türünde başka bir veri,
bir nümerik veri ile ancak nümerik olan başka bir veri
karşılaştırılabilir.
227
SELECT… WHERE


SELECT * FROM
Fiyatı]>50
SELECT * FROM
Fiyatı]=10
Ürünler WHERE [Liste
Ürünler WHERE [Liste
228

SELECT * FROM Ürünler WHERE [Liste
Fiyatı]>20 and [Liste Fiyatı]<50 ORDER BY
[Liste Fiyatı]

SELECT * FROM Ürünler WHERE [Liste
Fiyatı] BETWEEN 20 and 50 ORDER BY [Liste
Fiyatı]
229
Müşteriler WHERE

SELECT * FROM
Şehir="İstanbul“

SELECT * FROM Müşteriler WHERE
Şehir="İstanbul" OR Şehir="İzmir"
230
231
WHERE…..LIKE
232

SELECT * FROM Müşteriler WHERE ad LIKE 'T*‘

SELECT * FROM Müşteriler WHERE ad ='T*‘

SELECT * FROM Müşteriler WHERE ad
LIKE '*ER*'

233

SELECT * FROM Müşteriler WHERE ad
LIKE '[A-C]*' ORDER BY AD

SELECT * FROM Müşteriler WHERE ad
LIKE '[!A-F]*' ORDER BY AD

SELECT * FROM Müşteriler WHERE şirket
LIKE '*[a-k]' ORDER BY şirket
234

SELECT * FROM Müşteriler WHERE ad
NOT LIKE '[A-K]*' ORDER BY AD
235

SELECT * FROM Müşteriler WHERE ad
LIKE '?er*' ORDER BY ad

SELECT * FROM Müşteriler WHERE ad
LIKE '??rk*' ORDER BY ad
236
WHERE…IN

SELECT * FROM Müşteriler WHERE şehir IN
('istanbul','izmir')

SELECT * FROM Müşteriler WHERE şehir
NOT IN ('istanbul','izmir')
237

SELECT * FROM Siparişler WHERE [Sipariş
tarihi] > #05/01/2006#

SELECT *, FORMAT([Sipariş
tarihi],'dddd/mmmm/yyyy') as tarihi FROM
Siparişler
238

YEAR…Yıl
MONTH…Ay
DAY…..Gün

SELECT *, Year(OrderDate) FROM Orders


239

SELECT *,DAY([Sipariş Tarihi]),
MONTH([Sipariş Tarihi]), YEAR([Sipariş
Tarihi]) FROM Siparişler
240
SORULAR



1.Northwind veritabanında Ürünler tablosunda Ürün
Kodunun son hanesi 1-5 aralığında olan ve liste fiyatı 25
den büyük olan kayıtları listeleyiniz, liste fiyatına göre
artan sıralayınız.
Siparişler tablosunda Sevk tarihi boş olmayan ve Sipariş
tarihi Mayıs 2006 ayı içerisinde olan kayıtları listeleyiniz.
Müşteriler tablosunda İŞ ÜNVANI alanı için DISTINCT
deyimi ile müşterilerin iş ünvanlarını tekrarsız olarak
listeleyiniz
241

SELECT * from Ürünler WHERE [Ürün kodu]
LIKE '*[1-5]' AND [Liste Fiyatı]>=25;

SELECT * FROM Siparişler WHERE
MONTH([Sipariş tarihi])=5 AND
YEAR([Sipariş tarihi])=2006 and [sevk tarihi]
IS NOT NULL
SELECT DISTINCT [İş Unvanı] FROM
Müşteriler

242
SELECT…COUNT(*)

COUNT fonksiyonu (*) ile kullanıldığında FROM ile belirtilen tablodaki
toplam satır sayısını verir.

SELECT COUNT(*) AS ÇALIŞANLAR
FROM TBLKİŞİLER;

SELECT COUNT(ADI) AS ÇALIŞANLAR
FROM TBLKİŞİLER;

SELECT COUNT(*) FROM TBLKİŞİLER
243
SELECT…COUNT()



SELECT COUNT(AD) FROM Müşteriler
SELECT COUNT(*) FROM Müşteriler
SELECT COUNT(*) FROM Müşteriler
WHERE Şehir='İstanbul'
244
Group by

SELECT Şehir,COUNT(*) FROM Müşteriler
GROUP BY Şehir ORDER BY COUNT(*)

SELECT Kategori, COUNT(*) FROM Ürünler
GROUP BY Kategori ORDER BY COUNT(*)
DESC
245

SELECT [Sevk Şehir], COUNT(*) FROM
Siparişler WHERE [Sevk Şehir] LIKE '*R*'
GROUP BY [Sevk Şehir]
246




SELECT
ProductSubcategoryID,AVG(ListPrice)
FROM
Production.Product
GROUP BY ProductSubcategoryID
247



Ccm361 nolu dersin sınıf ortalamasını bulan
deyimi yazınız
SELECT Ders,AVG(Ortalama) FROM
DersOgrenci WHERE Ders='CCM361'
GROUP BY Ders
248




SELECT Ders,AVG(Vize)as vize,AVG(Final)
as final,
AVG(Ortalama)as ort
FROM DersOgrenci
GROUP BY Ders
249




SELECT Ders,MAX(Vize)as vize,MAX(Final)
as final,
MAX(Ortalama)as ort
FROM DersOgrenci
GROUP BY Ders
250


SELECT Ogrenci, MIN(vize) FROM
DersOgrenci
GROUP BY Ogrenci
251



SELECT * FROM OgrBilgileri WHERE
OgrenciNo=(SELECT Ogrenci FROM
DersOgrenci
WHERE Vize= (SELECT MIN(vize) FROM
DersOgrenci ))
252
INSERT
Tablolara kayıt eklemek için kullanılır.

INSERT INTO OgBilgileri
(adı,soyadı,bölümü) VALUES ('ayşe','taş',4)
UPDATE


Tabloda bulunan kayıt yada kayıtların
değiştirilmesi için kullanılır. Değiştirilmesi
istenen kolonların teker teker yazılıp
değerlerin atanması gerekmekte.
UPDATE TabloAdi SET (Kolonlar = Değerleri
,...) [WHERE Kosul ]
254
UPDATE

Tablo satırlarında güncelleme yapmak için
SQL’de UPDATE komutu kullanılır.

UPDATE Products SET
UnitPrice=UnitPrice*1.2

UPDATE TblÜrünler SET Fiyat = Fiyat*1.2;
UPDATE

UPDATE komutunu da koşullu ya da
koşulsuz olarak kullanmak mümkündür

UPDATE Products SET UnitPrice=100
WHERE CategoryID=1

UPDATE TblÜrünler SET Fiyat = Fiyat*1.2
WHERE kategori=2;
UPDATE Products SET UnitPrice=200,
UnitsInStock=UnitsInStock-5 WHERE
CategoryID=1

257






UPDATE TblÜrünler
SET [Ürün Adı]= “Program”
WHERE Kategori=3
UPDATE Ogrenci_Bilgileri SET Adı='Buket'
WHERE Numara=34
UPDATE Products SET Durum='URUN YOK'
WHERE UnitsInStock=0
258

UPDATE DersOgrenci SET Vize=(Vize+10)
WHERE Vize<100
259
DELETE
Bir tablonun satırlarını silmek için gerekli
komut DELETE komutudur. Satır silme
koşullu ya da koşulsuz olarak
gerçekleştirilebilir.
DELETE FROM TabloAdi [WHERE Koşul ]
 DELETE FROM TblÜrünler
 DELETE FROM [Order Details] WHERE
Discount=0

DELETE

DELETE FROM TblÜrünler WHERE
Kategori=5

DELETE FROM TblÜrünler WHERE Fiyat is
NULL

DELETE from OgrBilgileri WHERE
AdıSoyadı='Cihan Güngör'
262



SELECT * FROM Customers WHERE
EXISTS(SELECT * FROM Orders WHERE
CustomerId=Customers.CustomerId AND
ShipVia=3)
263

Çocuğu olan Çalışanlara ait bilgiler

SELECT * FROM TblÇalışanlar WHERE
EXISTS (SELECT * FROM TblÇocuklar
where çalışan=tblçalışanlar.çalışanId)
264



İki veya daha fazla çocuğu olan çalışanlar:
SELECT Çalışan,count(*) from TblÇocuklar
group by Çalışan having count(*)>=2
SELECT * FROM TblÇalışanlar where
ÇalışanId IN (SELECT Çalışan from
TblÇocuklar group by Çalışan having
count(*)>=2)
265
EXISTS

İçteki sorgu en az bir kayıt döndürdüğünde
dıştaki sorgu çalışır.

En az bir sipariş veren müşterileri bulmak
için:
SELECT * FROM TblMüşteriler WHERE
EXISTS (SELECT * FROM TblSiparişler
where MüşteriId=Tblmüşteriler.MüşteriID)

266

SELECT * FROM Müşteriler WHERE NOT
EXISTS (SELECT * FROM Siparişler where
Müşteriler.No=Siparişler.[Müşteri No])
267

SELECT * FROM Customers WHERE
EXISTS(SELECT * FROM Orders WHERE
CustomerId=Customers.CustomerId)
268





SELECT * FROM Products WHERE
NOT EXISTS
(SELECT * FROM [Order Details]
WHERE
ProductID=Products.ProductID)
269



SELECT * FROM Customers
WHERE CustomerID IN
(SELECT DISTINCT CustomerID FROM
Orders )
270
EXISTS


9 Numaralı ürüne ait en az bir sipariş veren
müşterileri bulmak için:
SELECT * FROM TblMüşteriler WHERE
EXISTS (SELECT * FROM TblSiparişler
where MüşteriId=Tblmüşteriler.MüşteriID and
ürünId=9)
271
NOT EXISTS

SELECT * FROM TblMüşteriler WHERE
NOT EXISTS (SELECT * FROM
TblSiparişler WHERE
MüşteriId=Tblmüşteriler.MüşteriID) ORDER
BY MüşteriId;
272




SELECT * INTO
Musteriler FROM Customers
SELECT * INTO
Deneme FROM Müşteriler
273
UNION


Tabloları birleştirme için kullanılır.
Birleştirilen tabloların alan sayıları ve
türlerinin aynı olması gerekir.
SELECT *FROM TblMüşteriler
UNION
SELECT *FROM tBLÇalışanlar;
274
UNION
SELECT 'Müşteri' as kim,*FROM TblMüşteriler
UNION
SELECT "Çalışan" as kim, *FROM tBLÇalışanlar;
275



(SELECT 'Çalışan' as
kim,Çalışanlar.No,soyadı,ad FROM
Çalışanlar
UNION
SELECT 'Müşteri' as
kim,Müşteriler.No,soyadı,ad FROM
Müşteriler)
276
UNION
SELECT 'Musteriler den' as kim,*FROM
Musteriler
UNION
SELECT 'Customers dan' as kim,*FROM
Customers;
277
UNION ALL

Birleştirilen tablololarda aynı olan kayıtların
da gösterilmesini sağlar.
278



SELECT *FROM Müşteriler
UNION ALL
SELECT *FROM Customers;
279
ANY


İç içe sorgularda, SOME, ANY deyimi ile dışarıdaki
SELECT ifadesinin seçeceği kayıtlar karşılaştırma
kriterine göre kullanılabilir
ANY dışarıdaki SELECT ifadesi sonucunda çıkacak
kayıtlar, içerideki SELECT ifadesi ile seçilen alan
değerlerinden en az birine göre kıyası sağlıyorsa (
küçük,büyük, eşit, büyük eşit, küçük eşit) seçilir
ANY


Kategori 5’deki herhangi bir üründen daha
yüksek fiyata sahip olan ürünlere ait tüm
bilgileri listeleyen SQL deyimi:
SELECT * FROM TblÜrünler
WHERE fiyat>any (select (fiyat) from
TBlürünler where kategori=5);

SELECT * FROM Ürünler where [Liste
Fiyatı]<ANY(SELECT [Liste Fiyatı] FROM
Ürünler WHERE Kategori='Tatlılar')
282
ALL

ALL dışarıdaki SELECT ifadesi sonucunda
çıkacak kayıtlar, içerideki SELECT ifadesi ile
seçilen alan değerlerinden TÜMÜNE göre kıyası
sağlıyorsa ( küçük,büyük, eşit, büyük eşit, küçük
eşit) seçilir.


SELECT * FROM TblÜrünler WHERE
fiyat>ALL(select fiyat from TBlürünler where
kategori=3);

SELECT * FROM Ürünler where [Liste
Fiyatı]<ALL (SELECT [Liste Fiyatı] FROM
Ürünler WHERE Kategori='Tatlılar')

{13,6}
284
INNER JOIN

İki tablonun ortak bir alanında aynı değerler
bulunan kayıtların bir araya getirilmesi.

SELECT ALAN1, ALAN2, ALAN3 FROM TABLO1 INNER
JOIN TABLO2 ON TABLO1. YABANCI ANAHTAR=
TABLO2.BİRİNCİL ANAHTAR

SELECT * FROM Orders INNER JOIN Customers
ON
Orders.CustomerID=Customers.CustomerID


285

SELECT * FROM Müşteriler INNER JOIN
Siparişler ON
Müşteriler.No=Siparişler.[Müşteri No]

SELECT ad, soyadı,[Sipariş No] FROM
Müşteriler INNER JOIN Siparişler ON
Müşteriler.No=Siparişler.[Müşteri No]
286

SELECT ad, soyadı,[Sipariş No] FROM
Müşteriler as m INNER JOIN Siparişler as s
ON m.No=s.[Müşteri No]
287

SELECT * from TblDoktorlar,TblBölümler
WHERE
TblDoktorlar.Bölüm=TblBölümler.BölümID

SELECT * from TblDoktorlar INNER JOIN
TblBölümler ON
TblDoktorlar.Bölüm=TblBölümler.BölümID
288


SELECT * FROM Orders ,Customers
WHERE
Orders.CustomerID=Customers.CustomerID
289
SELECT o.CustomerID,c.CompanyName,
o.orderID FROM Orders AS o INNER JOIN
Customers AS c ON
o.CustomerID=c.CustomerID

290

SELECT TblÜrünler.[ÜRÜN ADI],
TblKategoriler.[Kategori ADI]
FROM Tblürünler INNER JOIN Tblkategoriler
ON
Tblürünler.kategori=TblKategoriler.KategoriId;
291

SELECT * FROM Tblürünler, Tblkategoriler
WHERE
Tblürünler.kategori=TblKategoriler.KategoriId
;
292


SELECT *from Customers,Orders
WHERE
Customers.CustomerID=Orders.CustomerID
293

Her kategorideki ürün sayısını kategori adı ve
numarası ile birlikte görüntüleyen SQL
deyimini yazınız.
294


SELECT Orders.CustomerID, count(*) FROM
Orders GROUP BY
CustomerID
295



SELECT
Orders.CustomerID,Customers.ContactName
,count(*) FROM Orders
INNER JOIN Customers ON
Orders.CustomerID=ORDERS.CustomerID
GROUP BY
Orders.CustomerID,Customers.ContactName
296
Download