verİtabani ders notlari

295
1 VERİTABANI DERS NOTLARI Yrd.Doç.Dr. Buket Doğan

Upload: deiter

Post on 21-Mar-2016

323 views

Category:

Documents


23 download

DESCRIPTION

VERİTABANI DERS NOTLARI. Yrd.Doç.Dr. Buket Doğan. 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ı) - PowerPoint PPT Presentation

TRANSCRIPT

1

VERİTABANI DERS NOTLARI

Yrd.Doç.Dr. Buket Doğan

2

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.

33

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.

4

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

5

Veri Tabanı Yönetim Sistemi-VTYS

Veri tabanı tanımlamak, yaratmak, yaşatmak ve veri tabanına denetimli erişim sağlamak için kullanılan yazılım sistemidir.

6

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:

7

TABLO

TEMEL KAVRAMLAR

ADI BABA ADI DOĞUM YERİ

Kayıtlar birbiri ile ilişkili alanlardan(field) oluşmaktadır.Her kayıt farklı bilgileri içermektedir.

KAYITALAN 1

ADI BABA ADI DOĞUM YERİ

ADI BABA ADI DOĞUM YERİ

ALAN 2 ALAN 3

8

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.

9

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.

Veritabanı

Uygulama Programları

Veritabanı Yönetim Sistemi

10

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.

11

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.

12

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.

13

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. Varlık (Entity): Bir alan içersinde diğer nesnelerden ayırt

edilebilen bir şey (“thing”) yada “nesne” (“object”) Niteliklerin kümesi (set of attributes) tarafından

tanımlanır. İlişki (Relationship): Birden fazla varlığın arasındaki bağıntı-ilişki.

Görsel olarak varlık-ilişki tablosu ile gösterilir:

14

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.

15

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

16

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

17

İlişki ve İlişki KümeleriMüş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)}

18

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

19

Etki Alanı Niteliğin aldığı değerlere etki alanı(domain)

adı verilir.

Adı ve SoyadıBurak ÖzkanDemet DemirAhmet ÖnderBegüm Özkan

Etki Alanı

Nitelik

20

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.

21

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

22

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.

23

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)

24

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 birden-bire ilişki söz konusudur.

a1

a2

a3::

:an

b1

b2

b3::

:bn

25

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.

26

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

27

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.

28

Ç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

29

Çoktan-bire İlişki

ID İsimDoğum.Tarihi

101 Ayşe 3.06.1990

203 Ahmet 12.04.1980

405 Derya 15.04.1983

607 Selin 5.07.1981

No Kişi_ID

DERS

1 101 Matematik2 101 Geometri3 405 Bilg. Prog.4 405 Office Prog

30

Ç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

31

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

32

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.

33

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.

34

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.

35

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.

36

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

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.

40

Varlık-İlişki Şemaları

VARLIK NİTELİK

ANAHTAR NİTELİK

TÜRETİLEN NİTELİK

İLİŞKİ

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.

42

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

43

Varlık-İlişki Şemaları

Müdür-Çalışanlar

ÇALIŞANLAR-PROJELER

44

İkili İlişkiler• İlişkinin büyüklüğü ile ilgilidir

OTOMOBİL1:1ÇALIŞANBire-bir:

ÖĞRENCİ1:NYURT

KULÜPM:NÖĞRENCİ

Bire-çoklu:

Çoka-çoklu:

OTO-TAHSİS

YURTTA-KALMA

ÖĞRENCİ-KULÜP

45

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ı)

ÇALIŞAN

Soyadı

İkinci Adı

İlk Adı

Adı SSN

Yaşı

Doğ. tar

Projeler

İ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ğaza MalSattığı

Mağz. No Mağz. Adı Mal Kodu Mal Adı

Miktar

mn

47

Varlık-İlişki Şemaları

ÖĞRENCİ1:NYURT

OdaSayısı

YurtAdı

YerKirası

ÖğrenciAdı ÖğrenciSınıfı

ÖğrenciNoYURTTA-KALMAYurtAdı

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.

49

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.

50

Varlık-İlişki Şemaları

Personel

Yaşı

Doğum Tarihi Adres

Cadde

Sokak

Apartman

51

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.

52

Varlık-İlişki Şemaları

Adres

Adı

Müşteri 1:1 Hesap

Hesap No Bakiye

MüşHes

Tarih

Adres

SSK NO

Adı

Müşteri 1:1 Hesap

Hesap No Bakiye

MüşHes

Tarih

53

Varlık-ilişki şemalarının tablo haline dönüştürülmesi Adı SSk No Adres

Hesap No Bakiye

Müşteri={SskNo, adı,adres}

Hesap={Hesap No, Bakiye}

Müşteri Hesap ilişkisi için={SSkNo, Hesap No, Tarih}

SSk No Hesap No Tarih

54

Varlık-İlişki Şemaları

55

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.

56

Varlık-İlişki Şemaları

Müşteri M:N Otomobil

Bakiye Müşteri No

Adı

Müşteri

Oto plaka Renk

Sahip

Tarih

Müşteri ve otomobil varlıkları ve sahip ilişkisi için varlık-ilişki şeması

57

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 Tarih345 34 GF 67 12.12.2005346 45 HN 34 15.11.2002347 36 BN 67 12.12.2005348 34 AV 45 15.11.2002

58

Varlık-İlişki Şemaları

OYUNCU

TAKIM

Oynar

N

1

Yaş Performans Puanı

İSİM

Takım AdıTak.No

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.

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İ)

Örnek

ÖĞRENCİ

ADI SOYADI CİNSİYETi

ÖĞRNO DOĞTARDERS

DERSADI

DKODU

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.

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)

Örnek

ÖĞRENCİ

ADISOYADI

ÖĞRNO LİSE

LİSEADILİSENO

KENTOKUDUĞU

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

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.

İkili Çoktan-Çoğa İlişki Kümelerinin Dönüştürülmesi

Ö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ĞAZA MALSATTIĞI

MAĞNO MAĞADI MALKODU MALADI

MİKTAR

mn

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

KONSER, ESER ve MÜZİSYEN varlık kümeleri arasındaki KATILIM adlı üçlü ilişki kümesini düşünelim.

Örnek

KONSER

TARİHSALON

GÖREVİ

KONSNO

MZSNO

ESER

ESTÜRÜ

ESNO

BESTECİKATILIM

MÜZİSYEN SOYADI

ESADI

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

KONSER

TARİHSALON

GÖREVİ

KONSNO

MZSNO

ESER

ESTÜRÜ

ESNO

BESTECİKATILIM

MÜZİSYEN SOYADI

ESADI

ADI

KONSER(KONSNO, TARİH, SALON)ESER(ESNO, ESADI, ESTÜRÜ, BESTECİ)MÜZİSYEN(MZSNO, ADI, SOYADI)

Örnek

KONSER

TARİHSALON

GÖREVİ

KONSNO

MZSNO

ESER

ESTÜRÜ

ESNO

BESTECİKATILIM

MÜZİSYEN SOYADI

ESADI

ADI

Ö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 eser-mü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.

73

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

74

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

75

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.

76

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)

77

Nesneler ve Şemalar Programlama dillerindeki tip ve değişkenlere benzerler Şema (Schema) – Veritabanının mantıksal yapısı

Ö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)

Nesneler (Instance) – Zamandaki herhangi bir noktadaki veritabanı içersindeki içerik. 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.

78

VERİTABANI ÖRNEĞİ

FİZİKSEL ŞEMA

MANTIKSAL ŞEMA

MANTIKSAL ŞEMA

ALT ŞEMAB

MANTIKSAL ŞEMA

Uygulama Programı 1

Uygulama Programı 2

Uygulama Programı 4

Uygulama Programı 3

VERİTABANI ŞEMALARI

FİZİKSEL ŞEMA

MANTIKSAL ŞEMA

FİZİKSEL ŞEMA

MANTIKSAL ŞEMA

MANTIKSAL ŞEMA

MANTIKSAL ŞEMA

MANTIKSAL ŞEMA

MANTIKSAL ŞEMA

MANTIKSAL ŞEMA

FİZİKSEL ŞEMA

MANTIKSAL ŞEMA

MANTIKSAL ŞEMA

MANTIKSAL ŞEMA

FİZİKSEL VERİTABANI

VERİTABANI ŞEMALARI

FİZİKSEL ŞEMA

MANTIKSAL ŞEMA

FİZİKSEL ŞEMA

MANTIKSAL ŞEMA

MANTIKSAL ŞEMA

MANTIKSAL ŞEMA

MANTIKSAL ŞEMA

MANTIKSAL ŞEMA

MANTIKSAL ŞEMA

ALT ŞEMAA

KULLANICILAR

79

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)

80

İ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)

81

İ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)

JonesSmithCurryLindsay

customer_name

MainNorthNorthPark

customer_street

HarrisonRyeRyePittsfield

customer_city

customer

Öznitellikler (veya sütunlar)attributes

(or columns)

Değerler (yada satırlar)

tuples(or rows)

82

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)

Örneğin iki müşteri tek hesaba sahip (ne tekrarlar?) Boş değerlerin ihtiyaçı

Örneğin hesabı olmayan müşterinin gösterimi Normalizasyon teorisi (Normalization theory) ilişkisel veri tabanının tasarımından

bahsetmektedir

83

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.

84

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.

85

BİRİNCİL VE YABANCI ANAHTAR

B_ no isim1 muhasebe2 insan kaynakları3 IT

Calısan_ no B_ no isim1 2 Nora Edwards2 3 Ajay Patel3 2 Ben Smith4 1 Brian Burnett5 3 J ohn O'Leary6 3 J ulia Lenin

BÖLÜM

ÇALIŞANLAR

BİRİNCİL ANAHTAR

YABANCI ANAHTAR

86

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

87

Fonksiyonel BağımlılıkID İSİM ŞEHİR123 Ahmet Ankara324 Derya Ankara574 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.

88

Fonksiyonel Bağımlılık

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_nokimlik_no - > ogr_no , ogr_name , bolum , sinif

A -> B A fonksiyonel olarak B’yi tanımlar.)

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

90

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

91

Normalleştirme(Normalizasyon) Normalleştirilmemiş bir tabloda çok değerli nitelikler

ve tekrarlanan gruplar vardır.

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

97

İ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

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ş

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

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.

2NF’a GeçişCUSTOMER

Stud_ID Name Course_ID Credit

101 Lennon MSI 250 3,00

101 Lennon MSI 415 3,00

125 Johnson MSI 331 3,00

STUDENT_COURSE

Stud_ID Course_ID

101 MSI 250

101 MSI 415

125 MSI 331

COURSE

Course_ID Credit

MSI 250 3,00

MSI 415 3,00

MSI 331 3,00

STUDENT

Stud_ID Name

101 Lennon

101 Lennon

125 Johnson

101

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

İ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

105

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.

Geçişken Bağımlılık( Transitive Dependency)

Üçü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

BOOK

ISBN Title Publisher Address

Her nitelik doğrudan veya dolaylı birincil anahtara bağlıdır. Tekrarlayan nitelik

yoktur.1NF özellikleri taşımaktadır.

Örnek ISBN Title ISBN Publisher Publisher Address

BOOK

ISBN Title 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.

Örnek ISBN Title ISBN Publisher Publisher Address

BOOK

ISBN Title 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.

Örnek ISBN Title ISBN Publisher Publisher Address

BOOK

ISBN Title Publisher Address

Sonuç olarak bu tablo 2NF’dedir.

Öğrenci No, Öğrenci Adı, Ders Adı, Dersin Kredisi bilgilerini tutacak bir tablo için tasarım yapalım

113

114

115

116

117

1NF

MüŞ.No EvNo Müş.Adı Adres KiraBaşl. KiraBitiş Kira SahipNo SahipAdı

118

2NFMüş.No Müş.Adı Müş.No İşlemNo KiraBaşl. KiraBitiş

Ev No Adres Kira SahipNo SahipAdı

119

3NF

İşlem No Adres Kira SahipNo

SahipNo SahipAdı

120

3NF(TÜM TABLOLAR)

Müş.No Müş.AdıMüş.No İşlemNo KiraBaşl. KiraBitiş

İşlem No Adres Kira SahipNo

SahipNo SahipAdı

1NFİşçi No İşçi Adı Bölüm Yönetici

İşçi No Proje Id Başlangıç Tarihi 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

130

2NF

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ş

139

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.

140

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.

Ders 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

141

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İ

Ders 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

143

144

MÜŞTERİ NO ADI SOYADI ADRES

SİPARİŞ NO SİP TARİH

ÜRÜN NO Kategorisi MARKA ÜRÜN ADI FİYAT ADET

101AHMET DEMİRGÜNAY CAD. NO:15 SAKARYA 1210 12.10.2010 1230Bilgisayar CASPER CASPER CD.GLE6500S

565,00 TL 1

101AHMET DEMİRGÜNAY CAD. NO:15 SAKARYA 1215 13.10.2010 1323Yazılım MICROSOFT WINDOWS 7 HOME 240,00 TL 2

101AHMET DEMİRGÜNAY CAD. NO:15 SAKARYA 1218 14.10.2010 1235Telefon NOKIA

NOKIA 5800 RED 468,00 TL 1

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İY

AH

1.256,00 TL 2

105MEHMET DOĞAN

ŞAİR NEDİM SOK. NİŞANTAŞI İSTANBUL 1252 12.10.2010 1234 TelefonAPPLE IPHONE 3GS 8GB SİY

AH

1.256,00 TL 2

145

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.

146

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.

147

SAYI SAYISAL DEĞERLER İÇİN KULLANILIR. BYTE, TAMSAYI, UZUN TAMSAYI, ÇİFT VE

TEK DUYARLIKLI TANIMLARI YAPILABİLİR.

148

TARİH/SAAT BELLEKTE 8 BYTE’LIK YER KAPLAR VE

TARİH/SAAT BİLGİSİ İÇERİR.

149

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.

150

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.

151

BOLEAN (EVET/HAYIR ) 1 BYTE’LIK UZUNLUĞA SAHİP BU

ALANLAR EVET VEYA HAYIR BİÇİMİNDEKİ VERİLERİN SAKLANMASI İÇİN KULLANILIR.

152

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.

153

KÖPRÜ (HİPERLİNK) BU VERİ TÜRÜ İLE HERHANGİ BİR WEB

SİTESİNİN ADRESİ SAKLANIR.

154

BYTE 0-255 ARASI POZİTİF TAMSAYILARI

SAKLAR. BELLEKTE 1 BYTE YER KAPLAR.

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.

163

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.

164

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

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

166

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

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

171

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 IBM tarafı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

172

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,1111Numeric(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.  

173

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ı

174

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 )

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üzenlemeTablodaki 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

212

Doktor no Doktor adı Hasta No Hasta Adı Randevu Saati İşlem No

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 Ürünler WHERE [Liste

Fiyatı]>50 SELECT * FROM Ürünler WHERE [Liste

Fiyatı]=10

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

SELECT * FROM Müşteriler WHERE Ş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

243

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

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

INSERTTablolara 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

266

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)

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

271

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)

272

NOT EXISTS SELECT * FROM TblMüşteriler WHERE NOT

EXISTS (SELECT * FROM TblSiparişler WHERE MüşteriId=Tblmüşteriler.MüşteriID) ORDER BY MüşteriId;

SELECT * INTO Musteriler FROM Customers

SELECT * INTO Deneme FROM Müşteriler

273

274

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;

275

UNION

SELECT 'Müşteri' as kim,*FROM TblMüşterilerUNION SELECT "Çalışan" as kim, *FROM tBLÇalışanlar;

(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

UNIONSELECT 'Musteriler den' as kim,*FROM

MusterilerUNION 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

285

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

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