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