Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

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

Benzer bir sunumlar


... konulu sunumlar: "1 VERİTABANI DERS NOTLARI Yrd.Doç.Dr. Buket Doğan."— Sunum transkripti:

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

2 2 Ders İçeriği Veritabanı ve ilişkisel veritabanı kavramı, tasarımı ve yönetimini anlamak, 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ı) 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. verilecek teori bilgiler temelinde VTYS uygulamalarını (Microsoft Access) yapmaktır.

3 33 TEMEL KAVRAMLAR Veri 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. 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. 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. Veri kaydedilebilir bilinen gerçeklerdir. Örneğin bir kişinin ismi, adresi, telefon numarası gibi. Örneğin bir kişinin ismi, adresi, telefon numarası gibi.

4 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 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 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 7 TABLO TEMEL KAVRAMLAR ADIBABA ADIDOĞUM YERİ Kayıtlar birbiri ile ilişkili alanlardan(field) oluşmaktadır. Her kayıt farklı bilgileri içermektedir. KAYIT ALAN 1 ADIBABA ADI DOĞUM YERİ ADIBABA ADI DOĞUM YERİ ALAN 2 ALAN 3

8 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 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 Veritabanı Yönetim Sistemi

10 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 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 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 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 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 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 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 17 İlişki ve İlişki Kümeleri Müşteri noMüşteri adıHesaplarBakiye 101Ayşe ,00 YTL 203Mehmet ,00 YTL 405Derya ,00 YTL 607Selin ,00 YTL R1={(Ayşe,33567),(Mehmet,33344)} R2={(Derya,33790)} R3={(Selin,34013)}

18 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 19 Etki Alanı Niteliğin aldığı değerlere etki alanı(domain) adı verilir. Adı ve Soyadı Burak Özkan Demet Demir Ahmet Önder Begüm Özkan Etki Alanı Nitelik

20 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 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 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 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 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. a1a2a3:::an b1b2b3:::bn

25 25 Birden-bire İlişki Müşteri noMüşteri adıHesaplarBakiye 101Ayşe ,00 YTL 203Mehmet ,00 YTL 405Derya ,00 YTL 607Selin ,00 YTL Her müşterinin bir hesabı olabilir.

26 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. a1a2a3:::an b1b2b3:::bn

27 27 Birden-çoğa İlişki ID Öğretmen adıNOOGR_IDGirdiği DERS 101Ayşe1101 Matematik 203Ahmet2101 Geometri 405Derya3405 Bilgisayar Prog. 607Selin4405 Office Programları Öğretmenler birden fazla derse girmektedir.

28 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. a1a2a3:::an b1b2b3:::bn

29 29 Çoktan-bire İlişki IDİsim Doğum.Tari hi 101Ayşe Ahmet Derya Selin NoKişi_IDDERS 1101Matematik 2101Geometri 3405Bilg. Prog. 4405Office Prog

30 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. a1a2a3:::an b1b2b3:::bn

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

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

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

39 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 40 Varlık-İlişki Şemaları VARLIKNİTELİK ANAHTAR NİTELİK TÜRETİLEN NİTELİK İLİŞKİ

41 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 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 43 Varlık-İlişki Şemaları Müdür-Çalışanlar ÇALIŞANLAR-PROJELER

44 44 İkili İlişkiler İlişkinin büyüklüğü ile ilgilidir OTOMOBİL 1:1 ÇALIŞAN Bire-bir: ÖĞRENCİ 1:N YURTKULÜP M:N ÖĞRENCİ Bire-çoklu: Çoka-çoklu: OTO-TAHSİS YURTTA-KALMA ÖĞRENCİ-KULÜP

45 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

46 İ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ğazaMal Sattığı Mağz. NoMağz. AdıMal KoduMal Adı Miktar mn

47 47 Varlık-İlişki Şemaları ÖĞRENCİ 1:N YURT OdaSayısı YurtAdı Yer Kirası ÖğrenciAdı ÖğrenciSınıfı ÖğrenciNo YURTTA-KALMA YurtAdı

48 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 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 50 Varlık-İlişki Şemaları Personel Yaşı Doğum Tarihi Adres Cadde Sokak Apartman

51 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 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 53 Varlık-ilişki şemalarının tablo haline dönüştürülmesi AdıSSk NoAdres Hesap NoBakiye Müşteri={SskNo, adı,adres} Hesap={Hesap No, Bakiye} Müşteri Hesap ilişkisi için={SSkNo, Hesap No, Tarih} SSk No Hesap NoTarih

54 54 Varlık-İlişki Şemaları

55 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 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 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 nooto plakaTarih GF HN BN AV

58 58 Varlık-İlişki Şemaları OYUNCU TAKIM Oynar N 1 Yaş Performans Puanı İSİM Takım AdıTak.No

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

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

61 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 ÖĞRNODOĞTAR DERS DERSADI DKODU KREDİSİ

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

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

64 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İ ADI SOYADI ÖĞRNO LİSE LİSEADI LİSENO KENT OKUDUĞU

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

66 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

67 Ö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ĞAZAMAL SATTIĞI MAĞNOMAĞADIMALKODUMALADI MİKTAR mn

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

69 KONSER, ESER ve MÜZİSYEN varlık kümeleri arasındaki KATILIM adlı üçlü ilişki kümesini düşünelim. Örnek KONSER TARİH SALON GÖREVİ KONSNO MZSNO ESER ESTÜRÜ ESNO BESTECİ KATILIM MÜZİSYEN SOYADI ESADI ADI

70 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İH SALON GÖREVİ KONSNO MZSNO ESER ESTÜRÜ ESNO BESTECİ KATILIM MÜZİSYEN SOYADI ESADI ADI

71 KONSER(KONSNO, TARİH, SALON) ESER(ESNO, ESADI, ESTÜRÜ, BESTECİ) MÜZİSYEN(MZSNO, ADI, SOYADI) Örnek KONSER TARİH SALON GÖREVİ KONSNO MZSNO ESER ESTÜRÜ ESNO BESTECİ KATILIM MÜZİSYEN SOYADI ESADI ADI

72 Ö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 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 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 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 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 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 78 VERİTABANI ÖRNEĞİ FİZİKSELŞEMA MANTIKSALŞEMAMANTIKSALŞEMA ALT ŞEMA B 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ŞEMAMANTIKSALŞEMA MANTIKSALŞEMAMANTIKSALŞEMAMANTIKSALŞEMA FİZİKSELŞEMA MANTIKSALŞEMAMANTIKSALŞEMA MANTIKSALŞEMA FİZİKSEL VERİTABANI VERİTABANI ŞEMALARI FİZİKSELŞEMA MANTIKSALŞEMA FİZİKSELŞEMA MANTIKSALŞEMA MANTIKSALŞEMAMANTIKSALŞEMA MANTIKSALŞEMAMANTIKSALŞEMAMANTIKSALŞEMA ALT ŞEMA A KULLANICILAR

79 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 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 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) Jones Smith Curry Lindsay customer_name Main North Park customer_street Harrison Rye Pittsfield customer_city customer Öznitellikler (veya sütunlar) attributes (or columns) Değerler (yada satırlar) tuples (or rows)

82 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 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 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 85 BİRİNCİL VE YABANCI ANAHTAR BÖLÜM ÇALIŞANLAR BİRİNCİL ANAHTAR YABANCI ANAHTAR

86 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 87 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.

88 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_no kimlik_no - > ogr_no, ogr_name, bolum, sinif A -> B A fonksiyonel olarak B’yi tanımlar.)

89 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 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şlemidiralt kümelerine

91 91 Normalleştirme(Normalizasyon) Normalleştirilmemiş bir tabloda çok değerli nitelikler ve tekrarlanan gruplar vardır.

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

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

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

95 Müşterilere ait telefon numaralarını içerecek bir veritabanı tasarlamak istediğimizde aşağıdaki tasarımlar Birinci Normal formda değildir.

96 Birinci Normal Form Çözüm iki ayrı tablo olarak tasarım yapmaktır

97 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

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

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

100 2NF’a Geçiş

101 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

102 İ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 103

104 104

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

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

107 Geçişken Bağımlılık( Transitive Dependency) 3NF’ a geçiş Manager alanı anahtar olmayan Dept. alanına bağlıdır.

108 3NF Geçişken bağımlılığı ortadan kaldırmak için, Manager alanı için ayrı bir tablo oluşturulur.

109 Ö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.

110 Ö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.

111 Ö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.

112 Örnek ISBN  Title ISBN  Publisher Publisher  Address Sonuç olarak bu tablo 2NF’dedir.

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

114 114

115 115

116 116

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

118 118 2NF Müş.No Müş.Adı Müş.No İşlemNo KiraBaşl. KiraBitiş Ev No Adres Kira SahipNo SahipAdı

119 119 3NF İşlem No Adres Kira SahipNo SahipNo SahipAdı

120 120 3NF(TÜM TABLOLAR) Müş.No Müş.Adı Müş.No İşlemNo KiraBaşl. KiraBitiş İşlem No Adres Kira SahipNo SahipNo SahipAdı

121 1NF İşçi No İşçi Adı Bölüm Yönetici İşçi No Proje Id Başlangıç Tarihi Konum Hafta

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

123 2NF Proj Start Date için ayrı bir tablo oluşturulur.

124 3NF’ a geçiş Manager alanı anahtar olmayan Dept. alanına bağlıdır.

125 3NF Manager alanı için ayrı bir tablo oluşturulur.

126 TÜM TABLOLAR

127

128

129 129

130 130 2NF

131 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 132

133 133

134 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

135 2NF DF

136 3NF

137 3NF ye geçiş

138

139 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 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. DersKitapÖğretim Üyesi ELC212SilberschatzJohn D ELC212 NederpeltJohn D ELC212 SilberschatzWilliam M ELC212 NederpeltWilliam M ELC212 SilberschatzChristian G ELC212 NederpeltChristian G EDC102SilberschatzJohn D EDC102SilberschatzWilliam M

141 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İ DersKitapÖğretim Üyesi ELC212SilberschatzJohn D ELC212 NederpeltJohn D ELC212 SilberschatzWilliam M ELC212 NederpeltWilliam M ELC212 SilberschatzChristian G ELC212 NederpeltChristian G EDC102SilberschatzJohn D EDC102SilberschatzWilliam M

142 142 ÖDEV (NORMALİZASYON) Öğrenci NoİsimSoyisimB.NBölümüDers KoduAldığı DerslerTC NODersin Öğretmeni Oda Numara sı Dahili Tel RAMAZANDEMİR 1Elektronik BilgisayarELC346Veritabanı23322Buket DoğanD RAMAZANDEMİR 1Elektronik BilgisayarELC223Mikroişlemciler33332H.Hüseyin ÇelikD RAMAZANDEMİR 1Elektronik BilgisayarELC123Elektronik22222Hayriye KorkmazD AHMETYILMAZ 2Makine EğitimiELC124Mukavemet1111Mustafa KurtA AHMETYILMAZ 2Makine EğitimiELC125Teknik Resim11111Hasan TahsinA AYŞEDOĞAN 1Elektronik Bilgisayar ELC346 Veritabanı Buket DoğanD AYŞEDOĞAN 1Elektronik Bilgisayar ELC223 Mikroişlemciler H.Hüseyin ÇelikD508223

143 143

144 144 MÜŞTERİ NOADISOYADIADRES SİPARİŞ NOSİP TARİH ÜRÜN NOKategorisiMARKAÜRÜN ADIFİYATADET 101AHMETDEMİR GÜNAY CAD. NO:15 SAKARYA BilgisayarCASPERCASPER CD.GLE6500S565,00 TL1 101AHMETDEMİR GÜNAY CAD. NO:15 SAKARYA YazılımMICROSOFTWINDOWS 7 HOME240,00 TL2 101AHMETDEMİR GÜNAY CAD. NO:15 SAKARYA TelefonNOKIA NOKIA 5800 RED 468,00 TL1 102DEMETTAŞ ATATÜRK CAD.NO:16 KOZYATAĞI İSTANBUL BilgisayarCASPERCASPER CD.GLE6500S565,00 TL1 102DEMETTAŞ ATATÜRK CAD.NO:16 KOZYATAĞI İSTANBUL TelefonAPPLE IPHONE 3GS 8GB SİYAH 1.256,00 TL2 105 MEHME TDOĞAN ŞAİR NEDİM SOK. NİŞANTAŞI İSTANBUL TelefonAPPLE IPHONE 3GS 8GB SİYAH 1.256,00 TL2

145 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 146 NOT BAZEN TABLO İÇİNDE UZUN AÇIKLAMALAR YAPMAK GEREKEBİLİR. BU TÜR ALANLARA KARAKTER UZUNLUĞUNDA VERİ KAYDEDİLEBİLİR.

147 147 SAYI SAYISAL DEĞERLER İÇİN KULLANILIR. BYTE, TAMSAYI, UZUN TAMSAYI, ÇİFT VE TEK DUYARLIKLI TANIMLARI YAPILABİLİR.

148 148 TARİH/SAAT BELLEKTE 8 BYTE’LIK YER KAPLAR VE TARİH/SAAT BİLGİSİ İÇERİR.

149 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 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 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 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 153 KÖPRÜ (HİPERLİNK) BU VERİ TÜRÜ İLE HERHANGİ BİR WEB SİTESİNİN ADRESİ SAKLANIR.

154 154 BYTE ARASI POZİTİF TAMSAYILARI SAKLAR. BELLEKTE 1 BYTE YER KAPLAR.

155 INTEGER (TAMSAYI) 2 BYTE’LIK İŞARETLİ TAMSAYI TİPİDİR İLE ARASINDA BİR DEĞER ALABİLİR.

156 LONG (UZUN TAMSAYI) 4 BYTE’LIK İŞARETLİ TAMSAYI TİPİDİR İLE ARASINDA BİR DEĞER ALABİLİR.

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

158 SINGLE (TEK) 4 BYTE’LIK ONDALIK SAYI TİPİDİR. (+/-) E38 İLE (+/-) E-45 ARASINDA DEĞER ALABİLİR. ONDALIK OLARAK EN FAZLA 7 HANE SAKLAYABİLİR.

159 DOUBLE (ÇİFT) 8 BYTE’LIK ONDALIK SAYI TİPİDİR. (+/-) E308 İLE (+/- ) E-324 ARASINDA DEĞER ALABİLİR. ONDALIK OLARAK EN FAZLA 7 HANE SAKLAYABİLİR.

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

161 CURRENCY İLE ARASINDA DEĞER ALABİLİR. Dim i as currency i= ‘i= i= ‘i= OLARAK ATANIR.

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

165 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 >= ile 9999 sayıları arasında değer:Is Null OR Between 1000 And 9999

166 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

167 Geçerlik kuralı (Validation Rule) “E" Or “K" >= ile 9999 sayıları arasında değer: Between 1000 And 9999

168 >?

169 GİRİŞ MASKESİ(input mask)

170 00\->L??\-099 PLAKA İÇİN GİRİŞ MASKESİ 00" -">L??\-099""

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

172 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, , 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, Float;Kayan noktalı bir sayı tipi.Float; 4.7, 54.12, Double;Yüksek duyarlı bir kayan noktalı bir sayı tipi.Double; 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/2002 Blop;Büyük miktarda ikilik sayı tutabilir.

173 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 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 175

176 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

177 CREATE TABLE Ürünler ( ID INTEGER, Ürün_Adı char(30), Fiyat MONEY, Tanım CHAR (40) ); 177

178 178

179 179

180 180

181 CREATE TABLE Deneme ( ID COUNTER (4), [Ürün Adı] TEXT, Fiyat MONEY ); 181

182 182

183 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

184 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

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

186 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

187 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

188 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

189 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

190 ALTER TABLE Toys ADD COLUMN Age Char(15), Country Char(25) 190

191 ALTER TABLE Ürünler ADD COLUMN Kdv_Oranı Integer, Üretim_Yeri Char(25) 191

192 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

193 ALTER TABLE Toys ALTER COLUMN Price MONEY DEFAULT

194 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

195 ALTER TABLE Toys ADD CONSTRAINT CheckAmount CHECK (Price > 3); ALTER TABLE Toys DROP CONSTRAINT CheckAmount; ALTER TABLE toys DROP CONSTRAINT Toypk 195

196 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

197 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

198 CUSTOMER ORDER (CustNo,CustName, OrderNo, ProdNo, ProdDesc, Qty, CustAddress, DateOrdered) 198

199 2NF - remove partial dependencies CUSTOMER (CustNo,CustName, CustAddress) ORDER (OrderNo,CustNo,, ProdNo, ProdDesc, Qty, DateOrdered) 199

200 3NF - remove transitive dependencies CUSTOMER (CustName, CustAddress) ORDER (OrderNo,CustNo,, ProdNo, Qty, DateOrdered) PRODUCT (ProdNo, ProdDesc) 200

201 201

202 202

203 203

204 Geçişken Bağımlılık 204

205 205

206 206

207 207

208 208

209 209

210 210

211 211

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

213 213

214 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

215 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

216 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

217 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

218 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

219 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

220 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

221 SELECT…AS SELECT Adres +" "+ Şehir +" " + [Eyalet/İl] AS Müşteri_Adres FROM Müşteriler 221

222 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

223 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

224 SELECT TOP 50 PERCENT * FROM Müşteriler SELECT TOP 50 PERCENT * FROM Müşteriler ORDER BY Şehir 224

225 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

226 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 FROM WHERE

227 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

228 SELECT… WHERE SELECT * FROM Ürünler WHERE [Liste Fiyatı]>50 SELECT * FROM Ürünler WHERE [Liste Fiyatı]=10 228

229 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

230 SELECT * FROM Müşteriler WHERE Şehir="İstanbul“ SELECT * FROM Müşteriler WHERE Şehir="İstanbul" OR Şehir="İzmir" 230

231 231

232 WHERE…..LIKE 232

233 SELECT * FROM Müşteriler WHERE ad LIKE 'T*‘ SELECT * FROM Müşteriler WHERE ad ='T*‘ SELECT * FROM Müşteriler WHERE ad LIKE '*ER*' 233

234 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

235 SELECT * FROM Müşteriler WHERE ad NOT LIKE '[A-K]*' ORDER BY AD 235

236 SELECT * FROM Müşteriler WHERE ad LIKE '?er*' ORDER BY ad SELECT * FROM Müşteriler WHERE ad LIKE '??rk*' ORDER BY ad 236

237 WHERE…IN SELECT * FROM Müşteriler WHERE şehir IN ('istanbul','izmir') SELECT * FROM Müşteriler WHERE şehir NOT IN ('istanbul','izmir') 237

238 SELECT * FROM Siparişler WHERE [Sipariş tarihi] > #05/01/2006# SELECT *, FORMAT([Sipariş tarihi],'dddd/mmmm/yyyy') as tarihi FROM Siparişler 238

239 YEAR…Yıl MONTH…Ay DAY…..Gün SELECT *, Year(OrderDate) FROM Orders 239

240 SELECT *,DAY([Sipariş Tarihi]), MONTH([Sipariş Tarihi]), YEAR([Sipariş Tarihi]) FROM Siparişler 240

241 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

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

244 SELECT…COUNT() SELECT COUNT(AD) FROM Müşteriler SELECT COUNT(*) FROM Müşteriler SELECT COUNT(*) FROM Müşteriler WHERE Şehir='İstanbul' 244

245 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

246 SELECT [Sevk Şehir], COUNT(*) FROM Siparişler WHERE [Sevk Şehir] LIKE '*R*' GROUP BY [Sevk Şehir] 246

247 SELECT ProductSubcategoryID,AVG(ListPrice) FROM Production.Product GROUP BY ProductSubcategoryID 247

248 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

249 SELECT Ders,AVG(Vize)as vize,AVG(Final) as final, AVG(Ortalama)as ort FROM DersOgrenci GROUP BY Ders 249

250 SELECT Ders,MAX(Vize)as vize,MAX(Final) as final, MAX(Ortalama)as ort FROM DersOgrenci GROUP BY Ders 250

251 SELECT Ogrenci, MIN(vize) FROM DersOgrenci GROUP BY Ogrenci 251

252 SELECT * FROM OgrBilgileri WHERE OgrenciNo=(SELECT Ogrenci FROM DersOgrenci WHERE Vize= (SELECT MIN(vize) FROM DersOgrenci )) 252

253 INSERT Tablolara kayıt eklemek için kullanılır. INSERT INTO OgBilgileri (adı,soyadı,bölümü) VALUES ('ayşe','taş',4)

254 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

255 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;

256 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;

257 UPDATE Products SET UnitPrice=200, UnitsInStock=UnitsInStock-5 WHERE CategoryID=1 257

258 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

259 UPDATE DersOgrenci SET Vize=(Vize+10) WHERE Vize<

260 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

261 DELETE DELETE FROM TblÜrünler WHERE Kategori=5 DELETE FROM TblÜrünler WHERE Fiyat is NULL

262 DELETE from OgrBilgileri WHERE AdıSoyadı='Cihan Güngör' 262

263 SELECT * FROM Customers WHERE EXISTS(SELECT * FROM Orders WHERE CustomerId=Customers.CustomerId AND ShipVia=3) 263

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

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

267 SELECT * FROM Müşteriler WHERE NOT EXISTS (SELECT * FROM Siparişler where Müşteriler.No=Siparişler.[Müşteri No]) 267

268 SELECT * FROM Customers WHERE EXISTS(SELECT * FROM Orders WHERE CustomerId=Customers.CustomerId) 268

269 SELECT * FROM Products WHERE NOT EXISTS (SELECT * FROM [Order Details] WHERE ProductID=Products.ProductID) 269

270 SELECT * FROM Customers WHERE CustomerID IN (SELECT DISTINCT CustomerID FROM Orders ) 270

271 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 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;

273 SELECT * INTO Musteriler FROM Customers SELECT * INTO Deneme FROM Müşteriler 273

274 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 275 UNION SELECT 'Müşteri' as kim,*FROM TblMüşteriler UNION SELECT "Çalışan" as kim, *FROM tBLÇalışanlar;

276 (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

277 UNION SELECT 'Musteriler den' as kim,*FROM Musteriler UNION SELECT 'Customers dan' as kim,*FROM Customers; 277

278 UNION ALL Birleştirilen tablololarda aynı olan kayıtların da gösterilmesini sağlar. 278

279 SELECT *FROM Müşteriler UNION ALL SELECT *FROM Customers; 279

280 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

281 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);

282 SELECT * FROM Ürünler where [Liste Fiyatı]

283 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);

284 SELECT * FROM Ürünler where [Liste Fiyatı]

285 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

286 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

287 SELECT ad, soyadı,[Sipariş No] FROM Müşteriler as m INNER JOIN Siparişler as s ON m.No=s.[Müşteri No] 287

288 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

289 SELECT * FROM Orders,Customers WHERE Orders.CustomerID=Customers.CustomerID 289

290 SELECT o.CustomerID,c.CompanyName, o.orderID FROM Orders AS o INNER JOIN Customers AS c ON o.CustomerID=c.CustomerID 290

291 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

292 SELECT * FROM Tblürünler, Tblkategoriler WHERE Tblürünler.kategori=TblKategoriler.KategoriId ; 292

293 SELECT *from Customers,Orders WHERE Customers.CustomerID=Orders.CustomerID 293

294 Her kategorideki ürün sayısını kategori adı ve numarası ile birlikte görüntüleyen SQL deyimini yazınız. 294

295 SELECT Orders.CustomerID, count(*) FROM Orders GROUP BY CustomerID 295

296 SELECT Orders.CustomerID,Customers.ContactName,count(*) FROM Orders INNER JOIN Customers ON Orders.CustomerID=ORDERS.CustomerID GROUP BY Orders.CustomerID,Customers.ContactName 296


"1 VERİTABANI DERS NOTLARI Yrd.Doç.Dr. Buket Doğan." indir ppt

Benzer bir sunumlar


Google Reklamları