VERİTABANI DERS NOTLARI Yrd.Doç.Dr. Buket Doğan
Ders İçeriği Veritabanı ve ilişkisel veritabanı kavramı, tasarımı ve yönetimini anlamak, veri tabanı sistemlerinin denetimi ve erişimi yöntemlerini ve araçlarını öğrenmek, (SQL komutlarının kullanımı) verilecek teori bilgiler temelinde VTYS uygulamalarını (Microsoft Access) yapmaktır.
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
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.
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:
TEMEL KAVRAMLAR TABLO ALAN 3 ALAN 1 ALAN 2 ADI BABA ADI DOĞUM YERİ KAYIT ADI BABA ADI DOĞUM YERİ ADI BABA ADI DOĞUM YERİ Kayıtlar birbiri ile ilişkili alanlardan(field) oluşmaktadır. Her kayıt farklı bilgileri içermektedir.
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.
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
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.
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.
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.
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:
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.
İ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.
İ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.
İ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)}
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
Etki Alanı Adı ve Soyadı 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ı
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.
Ç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.
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.
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)
Birden-bire İlişki A varlık kümesi içindeki bir varlık, B kümesi içindeki sadece bir varlık ile ilişkili ise birden-bire ilişki söz konusudur. a1 a2 a3 : :an b1 b2 b3 :bn
Birden-bire İlişki Her müşterinin bir hesabı olabilir. 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.
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
Birden-çoğa İlişki ID Öğretmen adı NO OGR_ID Girdiği DERS 101 Ayşe 1 Matematik 203 Ahmet 2 Geometri 405 Derya 3 Bilgisayar Prog. 607 Selin 4 Office Programları Öğretmenler birden fazla derse girmektedir.
Ç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
Çoktan-bire İlişki No Kişi_ID DERS 1 101 Matematik 2 Geometri 3 405 İsim Doğum.Tarihi 101 Ayşe 3.06.1990 203 Ahmet 12.04.1980 405 Derya 15.04.1983 607 Selin 5.07.1981 No Kişi_ID DERS 1 101 Matematik 2 Geometri 3 405 Bilg. Prog. 4 Office Prog
Ç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. b1 b2 b3 : :bn a1 a2 a3 : :an
Ç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.
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.
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.
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.
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.
Varlık-İlişki Şemaları (Entity-Relationship Model) Varlık-ilişki modeli ; Veritabanı modelleri içerisinde , varlık ve bu varlıkların birbirleri arasındaki ilişkilere dayanarak herhangi bir ön-veri olmaksızın model oluşturmakta kullanılan modeldir. Buradaki varlık; benzersiz bir şekilde tanımlanabilen ve bağımsız var olabilme yetisine sahip nesne ya da oluşum olarak tanımlanabilir. Varlıklar , ev, araba gibi fiziksel nesneler olabileceği gibi müşteri ödemesi veya sipariş gibi soyut nesneleri de içerirler
Güçlü & Zayıf Varlık Kümeleri Her varlık kümesi için bir anahtar bulmak mümkün olmayabilir. Eğer bir varlık kümesinin niteliklerinden en az bir anahtar oluşturulabiliyorsa, bu varlık kümesine güçlü (strong) varlık kümesi denir. Eğer bir varlık kümesinin niteliklerinin tümü alınsa bile bir anahtar oluşturmuyorsa bu varlık kümesine zayıf (weak) varlık kümesi denir.
Zayıf Varlığı Güçlendirmek Zayıf bir varlık kümesinde, niteliklerin değerleri ile varlıkları birbirinden ayırdetmek mümkün değildir. Zayıf bir varlık kümesinin anlamlı olabilmesi için şu özelliklere sahip olması gerekir: Bu varlık kümesi ile güçlü bir varlık kümesi arasında birden-bire ya da (güçlüden-zayıfa) birden-çoğa bir ilişki bulunmalıdır. Zayıf varlıklar için bu ilişkinin var olma bağımlılığı oluşturmalıdır. Böylece zayıf bir varlığın anahtarı, bağlı olduğu üstün varlığın anahtarına ayırıcı nitelikler eklenerek elde edilir.
Zayıf Varlığı Güçlendirme Örneği Türkiye'deki tüm lise öğrencilerinin bilgilerini içeren ÖĞRENCİ varlık kümesi zayıf bir varlık kümesidir. Çünkü farklı liselerde öğrenci numarası, adı ve soyadı aynı olan öğrenciler bulunabilir. ÖĞRENCİ varlık kümesi ile LİSE varlık kümesi arasında bir OKUYAN ilişkisi kurulursa, öğrencileri birbirinden ayırdetmek için kullanılan ÖĞR_NO niteliğine, LİSE varlık kümesinin anahtarı olan LİSE_KODU eklenir. Bu durumda ÖĞRENCİ varlık kümesinin anahtarı (LİSE_KODU, ÖĞR_NO) ikilisi olur.
Varlık-İlişki Şemaları VARLIK NİTELİK ANAHTAR NİTELİK İLİŞKİ TÜRETİLEN NİTELİK
Rol Aralarında ilişki kurulan varlıklardan her birinin ilişkideki işlevine varlığın rolü denir. Farklı varlık kümeleri arasındaki ilişkilerde roller dolaylı yoldan anlaşılabildiği için çoğunlukla açıkça belirtilmez Örneğin, öğrenci ve ders arasında kurulan “aldığı” ilişkisinde varlıkların rolleri bellidir: öğrenci dersi alan, ders ise öğrenci tarafından alınandır.
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
Varlık-İlişki Şemaları Müdür-Çalışanlar ÇALIŞANLAR-PROJELER
İlişkinin büyüklüğü ile ilgilidir İkili İlişkiler İlişkinin büyüklüğü ile ilgilidir Bire-bir: OTOMOBİL 1:1 ÇALIŞAN OTO-TAHSİS ÖĞRENCİ 1:N YURT Bire-çoklu: YURTTA-KALMA KULÜP M:N ÖĞRENCİ Çoka-çoklu: ÖĞRENCİ-KULÜP
Varlık-İlişki Şemaları Bir varlığı belirlemeye yarayan, o varlıkla etkileşim kurmak ya da o varlığı kullanmak için gerekli önemli özellikleri (yani varlıkların metadata’ları) ÇALIŞAN Soyadı İkinci Adı İlk Adı Adı SSN Yaşı Doğ. tar Projeler
İlişkilerde Nitelik İlişkilerde de tanımlayıcı nitelikler bulunabilir. Aşağıdaki “Miktar” niteliği “Sattığı” ilişkisi için tanımlayıcı niteliktir. Mağz. No Mağz. Adı Mal Kodu Mal Adı Sattığı n m Mağaza Mal Miktar
Varlık-İlişki Şemaları YurtAdı YurtAdı YURTTA-KALMA ÖğrenciNo 1:N YURT ÖĞRENCİ Yer Kirası OdaSayısı ÖğrenciAdı ÖğrenciSınıfı
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.
Varlık-İlişki Şemaları Yaşı Cadde Personel Doğum Tarihi Adres Sokak Apartman
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.
Varlık-İlişki Şemaları Adres Adı Müşteri 1:1 Hesap Hesap No Bakiye MüşHes Tarih SSK NO
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
Varlık-İlişki Şemaları
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.
Varlık-İlişki Şemaları Adı Oto plaka Bakiye Renk Müşteri No Sahip M:N Otomobil Müşteri Müşteri Tarih Müşteri ve otomobil varlıkları ve sahip ilişkisi için varlık-ilişki şeması
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 348 34 AV 45
Varlık-İlişki Şemaları Tak.No Takım Adı TAKIM 1 Oynar N OYUNCU İSİM Yaş Performans Puanı
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 SOYADI ADI CİNSİYETi DERS KREDİSİ ÖĞRNO ÖĞRENCİ 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 SOYADI LİSENO ADI LİSEADI OKUDUĞU ÖĞRNO ÖĞRENCİ LİSE 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 MALKODU MALADI SATTIĞI n m MAĞAZA MAL MİKTAR
İ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 GÖREVİ SALON ESNO TARİH ESADI KATILIM KONSNO KONSER ESER 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 GÖREVİ SALON ESNO TARİH ESADI KATILIM KONSNO KONSER ESER 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 KONSER(KONSNO, TARİH, SALON) ESER(ESNO, ESADI, ESTÜRÜ, BESTECİ) GÖREVİ SALON ESNO TARİH ESADI KATILIM KONSNO KONSER ESER 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 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.
İ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.
İ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.
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.
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)
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.
VERİTABANI ÖRNEĞİ ALT ŞEMA A FİZİKSEL ŞEMA FİZİKSEL ŞEMA FİZİKSEL ŞEMA Uygulama Programı 1 ALT ŞEMA A Uygulama Programı 2 FİZİKSEL ŞEMA FİZİKSEL ŞEMA FİZİKSEL ŞEMA FİZİKSEL ŞEMA FİZİKSEL ŞEMA FİZİKSEL ŞEMA MANTIKSAL ŞEMA MANTIKSAL ŞEMA MANTIKSAL ŞEMA MANTIKSAL ŞEMA MANTIKSAL ŞEMA MANTIKSAL ŞEMA MANTIKSAL ŞEMA MANTIKSAL ŞEMA MANTIKSAL ŞEMA MANTIKSAL ŞEMA MANTIKSAL ŞEMA MANTIKSAL ŞEMA MANTIKSAL ŞEMA MANTIKSAL ŞEMA MANTIKSAL ŞEMA MANTIKSAL ŞEMA MANTIKSAL ŞEMA MANTIKSAL ŞEMA MANTIKSAL ŞEMA MANTIKSAL ŞEMA Uygulama Programı 3 ALT ŞEMA B VERİTABANI ŞEMALARI VERİTABANI ŞEMALARI Uygulama Programı 4 FİZİKSEL VERİTABANI KULLANICILAR
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)
İ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)
İ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)
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
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.
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.
BİRİNCİL VE YABANCI ANAHTAR BİRİNCİL ANAHTAR BÖLÜM ÇALIŞANLAR YABANCI ANAHTAR
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.)
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.
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
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
Normalleştirme(Normalizasyon) Normalleştirilmemiş bir tabloda çok değerli nitelikler ve tekrarlanan gruplar vardır.
Normal Forms: Review Unnormalized – Çok değerli nitelikler ve tekrarlayan gruplar vardır 1 NF- Çok değerli nitelikler ve tekrarlayan gruplar ortadan kaldırılır. 2 NF – 1 NF + kısmi bağımlılık ortadan kaldırılır. 3 NF – 2 NF + Geçişken bağımlılık ortadan kaldırılır.
Birinci Normal Form Örneğin kitap tablosunda, birden fazla yazarı olan kitap için yazar1, yazar2, yazar3 diye alanlar açsaydık, bu kurala uymamış olurduk. Böyle bir durumda, ayrıca yazarlar tablosu da oluşturarak kuralı çiğnememiş oluruz. Genellikle yapılan hata: Verileri virgül veya bir başka karakter ile ayırıp aynı alana girmek. Daha sonra program içerisinde split ile bu değerleri ayırmak. Ancak bu ilişkisel veritabanının doğasına terstir.
BİRİN Cİ NORMAL FORM Veri tabanı için temel kuralları içerir. Tekrarlayan sütunların olması engellenir. İlişkili veri gruplarına ait ayrı tablolar oluşturulmalı ve her satır birincil anahtar ile temsil edilmelidir.
Müşterilere ait telefon numaralarını içerecek bir veritabanı tasarlamak istediğimizde aşağıdaki tasarımlar Birinci Normal formda değildir.
Birinci Normal Form Çözüm iki ayrı tablo olarak tasarım yapmaktır
İkinci Normal Form KISMİ BAĞIMLILIKLAR KALDIRILMALIDIR. Bir tablo için, anahtar alan dışındaki her alan, birincil anahtar olarak tanımlı tüm alan veya alanlara bağlı olmak zorundadır. Kayıtlar bir tablonun birincil anahtarı dışında bir öğeye bağımlı olmamalıdır. KISMİ BAĞIMLILIKLAR KALDIRILMALIDIR. Birden çok kayıt için geçerli olan değer kümeleri için ayrı tablolar oluşturmalıdır. Bu tabloları bir yabancı anahtarla ilişkilendirilmesi gerekir
Kısmi bağımlılık(Partial Dependency) Anahtar olmayan alan, birleşik anahtarın sadece bir kısmı ile belirlenebiliyorsa, buna kısmi bağımlılık denir.
2NF’a Geçiş Nitelikler, birincil alanın tamamına bağımlı olmalıdır, bir kısmına değil. Kısmi bağımlı olan olan ayrı bir tabloya alınmalıdır.
2NF’a Geçiş
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.
Geçişken Bağımlılık( Transitive Dependency) A,B,C niteliklilerini içeren 3 nitelikli bir tabloda A, B, ve C için A B B C fonksiyonel bağımlılıkları bulunmakta ise, C kısmi olarak A’ya B aracılığı ile bağımlıdır. 105
Üçüncü Normal Form Geçişken bağımlılıklar kaldırılmalıdır. Her sütun direkt olarak birincil anahtara bağımlı olmalıdır Birincil anahtara bağlı olmayan alanlar ayrı bir tabloya alınmalıdır. Üçüncü normal formda tablonun, Primary Key ile direk ilişkisi bulunmayan, ancak diğer alanlara bağlı alanlar bulunur.
Geçişken Bağımlılık( Transitive Dependency) 3NF’ a geçiş Manager alanı anahtar olmayan Dept. alanına bağlıdır.
3NF Geçişken bağımlılığı ortadan kaldırmak için, Manager alanı için ayrı bir tablo oluşturulur.
Örnek ISBN Title ISBN Publisher Publisher Address Her nitelik doğrudan veya dolaylı birincil anahtara bağlıdır. Tekrarlayan nitelik yoktur.1NF özellikleri taşımaktadır. ISBN Title ISBN Publisher 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. ISBN Title ISBN Publisher 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. ISBN Title ISBN Publisher Publisher Address
Sonuç olarak bu tablo 2NF’dedir. Örnek Sonuç olarak bu tablo 2NF’dedir. ISBN Title ISBN Publisher Publisher Address
Öğrenci No, Öğrenci Adı, Ders Adı, Dersin Kredisi bilgilerini tutacak bir tablo için tasarım yapalım
1NF MüŞ.No EvNo Müş.Adı Adres KiraBaşl. KiraBitiş Kira SahipNo SahipAdı
2NF Müş.No Müş.Adı Müş.No İşlemNo KiraBaşl. KiraBitiş Ev No Adres Kira SahipNo SahipAdı
3NF İşlem No Adres Kira SahipNo SahipNo SahipAdı
3NF(TÜM TABLOLAR) SahipNo SahipAdı İşlem No Adres Kira SahipNo Müş.No İşlemNo KiraBaşl. KiraBitiş Müş.No Müş.Adı İşlem No Adres Kira SahipNo SahipNo SahipAdı
1NF İşçi No İşçi Adı Bölüm Yönetici İşçi No Proje Id Başlangıç Tarihi Konum Hafta
1NF 2NF’a geçiş için kısmi bağımlılıklar kaldırılmalıdır. Proj Start Date Proj-id’ye bağımlıdır.
2NF Proj Start Date için ayrı bir tablo oluşturulur.
3NF’ a geçiş Manager alanı anahtar olmayan Dept. alanına bağlıdır.
3NF Manager alanı için ayrı bir tablo oluşturulur.
TÜM TABLOLAR
2NF
Birinci tablo 2NF’de Fakat ikinci tabloda bileşik anahtarın sadece bir kısmına bağımlı alan alanlar var. Employee name, Department No and Department Name alanları SADECE Employee No’ya bağlıdır. Bu ALANLARIN BAŞKA TABLOAYA ALINMASI GEREKİR. Hourly Rate ise, Project Code ve Employee No alanlarının ikisine birden bağlıdır. Her çalışan farklı projeler için farklı ödemeler alabilir.
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.
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.
DÖRDÜNCÜ NORMAL FORM Tablolarda çok değerli bağımlılık yer almamalıdır. Yandaki tabloda Öğretim Üyesi dersle ilişkili durumdadır. Fakat dersler ve kitaplar birbirinden bağımsızdır. ELC212 dersi için yeni bir kitap eklemek istersek, Öğretim üyesinin adını da yazmak zorunda kalırız. Ders Kitap Öğretim Üyesi ELC212 Silberschatz John D Nederpelt William M Christian G EDC102
DÖRDÜNCÜ NORMAL FORM Aynı şekilde öğretim üyesi eklemek istersek kitap adı yazmak zorunda kalırız. Bu alanları boş bırakırsak yine tabloda BOŞ alan soruna neden olmuş oluruz. Bu problemi ayrı iki tablo ile çözebiliriz. DERS KİTAP DERS ÖĞRETİM ÜYESİ Ders Kitap Öğretim Üyesi ELC212 Silberschatz John D Nederpelt William M Christian G EDC102
ÖDEV (NORMALİZASYON) Öğrenci No İsim Soyisim B.N Bölümü Ders Kodu Aldığı Dersler TC NO Dersin Öğretmeni Oda Numarası Dahili Tel. 2506013 RAMAZAN DEMİR 1 Elektronik Bilgisayar ELC346 Veritabanı 23322 Buket Doğan D406 217 ELC223 Mikroişlemciler 33332 H.Hüseyin Çelik D508 223 ELC123 Elektronik 22222 Hayriye Korkmaz D506 219 2516014 AHMET YILMAZ 2 Makine Eğitimi ELC124 Mukavemet 1111 Mustafa Kurt A433 313 ELC125 Teknik Resim 11111 Hasan Tahsin 2526015 AYŞE DOĞAN 142
MÜŞTERİ NO ADI SOYADI ADRES SİPARİŞ NO SİP TARİH ÜRÜN NO Kategorisi MARKA ÜRÜN ADI FİYAT ADET 101 AHMET DEMİR GÜNAY CAD. NO:15 SAKARYA 1210 12.10.2010 1230 Bilgisayar CASPER CASPER CD.GLE6500S 565,00 TL 1 1215 13.10.2010 1323 Yazılım MICROSOFT WINDOWS 7 HOME 240,00 TL 2 1218 14.10.2010 1235 Telefon NOKIA NOKIA 5800 RED 468,00 TL 102 DEMET TAŞ ATATÜRK CAD.NO:16 KOZYATAĞI İSTANBUL 1245 1246 15.10.2010 1234 APPLE IPHONE 3GS 8GB SİYAH 1.256,00 TL 105 MEHMET DOĞAN ŞAİR NEDİM SOK. NİŞANTAŞI İSTANBUL 1252
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.
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.
SAYI SAYISAL DEĞERLER İÇİN KULLANILIR. BYTE, TAMSAYI, UZUN TAMSAYI, ÇİFT VE TEK DUYARLIKLI TANIMLARI YAPILABİLİR.
TARİH/SAAT BELLEKTE 8 BYTE’LIK YER KAPLAR VE TARİH/SAAT BİLGİSİ İÇERİR.
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.
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.
BOLEAN (EVET/HAYIR ) 1 BYTE’LIK UZUNLUĞA SAHİP BU ALANLAR EVET VEYA HAYIR BİÇİMİNDEKİ VERİLERİN SAKLANMASI İÇİN KULLANILIR.
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.
KÖPRÜ (HİPERLİNK) BU VERİ TÜRÜ İLE HERHANGİ BİR WEB SİTESİNİN ADRESİ SAKLANIR.
BYTE 0-255 ARASI POZİTİF TAMSAYILARI SAKLAR. BELLEKTE 1 BYTE YER KAPLAR.
INTEGER (TAMSAYI) 2 BYTE’LIK İŞARETLİ TAMSAYI TİPİDİR. -32.768 İLE 32.767 ARASINDA BİR DEĞER ALABİLİR.
LONG (UZUN TAMSAYI) 4 BYTE’LIK İŞARETLİ TAMSAYI TİPİDİR. -2.147.483.648 İLE 2.147.483.647 ARASINDA BİR DEĞER ALABİLİR.
DİKKAT !!!! BYTE, INTEGER VE LONG TİPİNDEKİ DEĞİŞKENLERE ONDALIK SAYI ATANIRSA, SAYI EN YAKIN TAMSAYIYA YUVARLANIR. Dim i as integer i=4.3 ‘ i=4 olarak atanır i=4.5 ‘ i=5 olarak atanır i=4.6 ‘ i=5 olarak atanır.
SINGLE (TEK) 4 BYTE’LIK ONDALIK SAYI TİPİDİR. (+/-)3.402823E38 İLE (+/-)1.401298E-45 ARASINDA DEĞER ALABİLİR. ONDALIK OLARAK EN FAZLA 7 HANE SAKLAYABİLİR.
DOUBLE (ÇİFT) 8 BYTE’LIK ONDALIK SAYI TİPİDİR. (+/-)1.79769313486232E308 İLE (+/-)4.94065645841247E-324 ARASINDA DEĞER ALABİLİR. ONDALIK OLARAK EN FAZLA 7 HANE SAKLAYABİLİR.
CURRENCY 8 BYTE’LIK ONDALIK SAYI TİPİDİR. ANCAK SAYININ ONDALIK KISMI 4 BASAMAKTAN FAZLA OLAMAZ. BU TİP, DAHA ÇOK PARA HESAPLARI VE VİRGÜLDEN SONRAKİ HASSASİYETİ ÖNEMSİZ OLAN İŞLEMLER İÇİN KULLANILIR.
CURRENCY 922337203685477.5808 İLE 922337203685477.5808 ARASINDA DEĞER ALABİLİR. Dim i as currency i=4.30571 ‘i=4.3057 i=4.30575 ‘i=4.3058 OLARAK ATANIR.
DECIMAL (ONDALIK) 14 BYTE’LIK VERİ TİPİDİR. BU TİPİN EN ÖNEMLİ ÖZELLİĞİ,SAYIDAKİ BÜTÜN BASAMAKLARIN TUTULMASIDIR. BU VERİ TÜRÜ 28 ONDALİK KARAKTER SAKLAYABİLİR.
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.
INPUT MASK (MASKE) MASKENİN OLUŞTURULMASINDA BAZI ÖZEL İŞERETLERDEN YARARLANILIR. ?:A-Z ARASI ALFABETİK KARAKTER. L: A-Z ARASI ALFABETİK KARAKTER.* #:0-9 ARASI RAKAM VEYA BOŞLUK. 0:0-9 ARASI RAKAM* 9: 0-9 ARASI RAKAM VEYA BOŞLUK. *giriş zorunlu
Validation Rule Sadece a..z arası harf: Is Null OR Not Like "*[!a-z]*“ Sadece 0..9 arası rakam: Is Null OR Not Like "*[!0-9]*“ 8 karakter: Is Null OR Like "????????“ Is Null OR "M" Or "F" Sadece pozitif sayı Is Null OR >= 0 1000 ile 9999 sayıları arasında değer:Is Null OR Between 1000 And 9999
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
>?<???????????????????????
GİRİŞ MASKESİ(input mask)
00\->L??\-099 PLAKA İÇİN GİRİŞ MASKESİ
SQL SQL Yapısal sorgulama dili (SQL - Structured Query Language) ilişkisel veri tabanı dilidir. SQL veri tabanında yeni tablo oluşturma, veri ekleme, silme, düzeltme, güncelleme, sorgulama ve koruma ve daha çok sayıda işlemin bir anda yapılmasını sağlar. SQL dili IBM tarafından 1979’da oluşturulduktan sonra SQL dilinin kullanımındaki farklılıkları ortadan kaldırmak ve bu konuda bir standart yakalamak için 1983 yılında ANSI ve ISO bir araya gelerek bir çalışma başlatmış ve 1987 yılında resmi olmayan ilk SQL standardı olan SQL1'i ortaya çıkarmıştır. Bu standardın yetersiz kalmasının ardından 1989 yılında SQL89 adında yine aynı kurumlar tarafından yeni bir standart geliştirilmiştir. Daha sonra 1992 yılında SQL2 diye bir standart çıkarılmıştır
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.
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ı
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 )
Tablo oluşturmak için: CREATE TABLE TabloADI ( Alan_Adı Veri_türü(Boyutu), [NULL | NOT NULL] [isteğe bağlı kısıtlar] );
CREATE TABLE Ürünler ( ID INTEGER, Ürün_Adı char(30), Fiyat MONEY, Tanım CHAR (40) );
CREATE TABLE Deneme ( ID COUNTER (4), [Ürün Adı] TEXT, Fiyat MONEY );
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 );
CREATE TABLE Toys ( ToyID INTEGER, ToyName CHAR (30) NOT NULL, Price MONEY NOT NULL, Description CHAR (40) NULL, CONSTRAINT ToyPk PRIMARY KEY (ToyId,ToyName) );
Ö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.
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) );
UNIQUE : Girilen değerlerin her kayıt için farklı olmasını sağlar 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.
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;
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)
ALTER TABLE Toys ADD COLUMN Age Char(15), Country Char(25)
ALTER TABLE Ürünler ADD COLUMN Kdv_Oranı Integer, Üretim_Yeri Char(25)
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);
ALTER TABLE Toys ALTER COLUMN Price MONEY DEFAULT 10
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
ADD CONSTRAINT CheckAmount CHECK (Price > 3); ALTER TABLE Toys ADD CONSTRAINT CheckAmount CHECK (Price > 3); DROP CONSTRAINT CheckAmount; ALTER TABLE toys DROP CONSTRAINT Toypk
ALTER TABLE Ürünler DROP CONSTRAINT kısıt2 Kısıt Eklemek ALTER TABLE Ürünler ADD CONSTRAINT Kısıt2 UNIQUE (Üretim_Yeri); ADD CONSTRAINT Kısıt1 UNIQUE (ID); Kısıt Silmek ALTER TABLE Ürünler DROP CONSTRAINT kısıt2
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
CUSTOMER ORDER (CustNo,CustName, OrderNo, ProdNo, ProdDesc, Qty, CustAddress, DateOrdered)
2NF - remove partial dependencies CUSTOMER (CustNo,CustName, CustAddress) ORDER (OrderNo ,CustNo,, ProdNo, ProdDesc, Qty, DateOrdered)
3NF - remove transitive dependencies CUSTOMER (CustName, CustAddress) ORDER (OrderNo ,CustNo,, ProdNo, Qty, DateOrdered) PRODUCT (ProdNo, ProdDesc)
Geçişken Bağımlılık
Doktor no Doktor adı Hasta No Hasta Adı Randevu Saati İşlem No
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
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
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
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ı)
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
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ı]
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
SELECT…AS SELECT Adres +" "+ Şehir +" " + [Eyalet/İl] AS Müşteri_Adres FROM Müşteriler
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.
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
SELECT TOP 50 PERCENT * FROM Müşteriler SELECT TOP 50 PERCENT * FROM Müşteriler ORDER BY Şehir
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.
SELECT… WHERE SELECT * FROM Ürünler WHERE [Liste Fiyatı]>50
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ı]
SELECT * FROM Müşteriler WHERE Şehir="İstanbul“ SELECT * FROM Müşteriler WHERE Şehir="İstanbul" OR Şehir="İzmir"
WHERE…..LIKE
SELECT * FROM Müşteriler WHERE ad LIKE 'T*‘ SELECT * FROM Müşteriler WHERE ad ='T*‘ SELECT * FROM Müşteriler WHERE ad LIKE '*ER*'
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
SELECT * FROM Müşteriler WHERE ad NOT LIKE '[A-K]*' ORDER BY AD
SELECT * FROM Müşteriler WHERE ad LIKE '?er*' ORDER BY ad SELECT * FROM Müşteriler WHERE ad LIKE '??rk*' ORDER BY ad
WHERE…IN SELECT * FROM Müşteriler WHERE şehir IN ('istanbul','izmir') SELECT * FROM Müşteriler WHERE şehir NOT IN ('istanbul','izmir')
SELECT * FROM Siparişler WHERE [Sipariş tarihi] > #05/01/2006# SELECT *, FORMAT([Sipariş tarihi],'dddd/mmmm/yyyy') as tarihi FROM Siparişler
YEAR…Yıl MONTH…Ay DAY…..Gün SELECT *, Year(OrderDate) FROM Orders
SELECT *,DAY([Sipariş Tarihi]), MONTH([Sipariş Tarihi]), YEAR([Sipariş Tarihi]) FROM Siparişler
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
SELECT. from Ürünler WHERE [Ürün kodu] LIKE ' 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
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 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'
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
SELECT [Sevk Şehir], COUNT( SELECT [Sevk Şehir], COUNT(*) FROM Siparişler WHERE [Sevk Şehir] LIKE '*R*' GROUP BY [Sevk Şehir]
SELECT ProductSubcategoryID,AVG(ListPrice) FROM Production.Product GROUP BY ProductSubcategoryID
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
SELECT Ders,AVG(Vize)as vize,AVG(Final) as final, AVG(Ortalama)as ort FROM DersOgrenci GROUP BY Ders
SELECT Ders,MAX(Vize)as vize,MAX(Final) as final, MAX(Ortalama)as ort FROM DersOgrenci GROUP BY Ders
SELECT Ogrenci, MIN(vize) FROM DersOgrenci GROUP BY Ogrenci
SELECT * FROM OgrBilgileri WHERE OgrenciNo=(SELECT Ogrenci FROM DersOgrenci WHERE Vize= (SELECT MIN(vize) FROM DersOgrenci ))
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 ]
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
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
UPDATE DersOgrenci SET Vize=(Vize+10) WHERE Vize<100
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'
SELECT * FROM Customers WHERE EXISTS(SELECT * FROM Orders WHERE CustomerId=Customers.CustomerId AND ShipVia=3)
Ç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)
İ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)
EXISTS İçteki sorgu en az bir kayıt döndürdüğünde dıştaki sorgu çalışır. En az bir sipariş veren müşterileri bulmak için: SELECT * FROM TblMüşteriler WHERE EXISTS (SELECT * FROM TblSiparişler where MüşteriId=Tblmüşteriler.MüşteriID)
SELECT. FROM Müşteriler WHERE NOT EXISTS (SELECT SELECT * FROM Müşteriler WHERE NOT EXISTS (SELECT * FROM Siparişler where Müşteriler.No=Siparişler.[Müşteri No])
SELECT. FROM Customers WHERE EXISTS(SELECT SELECT * FROM Customers WHERE EXISTS(SELECT * FROM Orders WHERE CustomerId=Customers.CustomerId)
SELECT * FROM Products WHERE NOT EXISTS (SELECT * FROM [Order Details] WHERE ProductID=Products.ProductID)
SELECT * FROM Customers WHERE CustomerID IN (SELECT DISTINCT CustomerID FROM Orders )
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)
NOT EXISTS SELECT * FROM TblMüşteriler WHERE NOT EXISTS (SELECT * FROM TblSiparişler WHERE MüşteriId=Tblmüşteriler.MüşteriID) ORDER BY MüşteriId;
SELECT * INTO Musteriler FROM Customers Deneme FROM Müşteriler
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;
UNION SELECT 'Müşteri' as kim,*FROM TblMüşteriler UNION SELECT "Çalışan" as kim, *FROM tBLÇalışanlar;
(SELECT 'Çalışan' as kim,Çalışanlar.No,soyadı,ad FROM Çalışanlar UNION SELECT 'Müşteri' as kim,Müşteriler.No,soyadı,ad FROM Müşteriler)
UNION SELECT 'Musteriler den' as kim,*FROM Musteriler UNION SELECT 'Customers dan' as kim,*FROM Customers;
UNION ALL Birleştirilen tablololarda aynı olan kayıtların da gösterilmesini sağlar.
SELECT *FROM Müşteriler UNION ALL SELECT *FROM Customers;
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')
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}
INNER JOIN İki tablonun ortak bir alanında aynı değerler bulunan kayıtların bir araya getirilmesi. SELECT ALAN1, ALAN2, ALAN3 FROM TABLO1 INNER JOIN TABLO2 ON TABLO1. YABANCI ANAHTAR= TABLO2.BİRİNCİL ANAHTAR SELECT * FROM Orders INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID
SELECT. FROM Müşteriler INNER JOIN Siparişler ON Müşteriler 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]
SELECT ad, soyadı,[Sipariş No] FROM Müşteriler as m INNER JOIN Siparişler as s ON m.No=s.[Müşteri No]
SELECT. from TblDoktorlar,TblBölümler WHERE TblDoktorlar 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
SELECT * FROM Orders ,Customers WHERE Orders.CustomerID=Customers.CustomerID
SELECT o.CustomerID,c.CompanyName, o.orderID FROM Orders AS o INNER JOIN Customers AS c ON o.CustomerID=c.CustomerID
SELECT TblÜrünler.[ÜRÜN ADI], TblKategoriler.[Kategori ADI] FROM Tblürünler INNER JOIN Tblkategoriler ON Tblürünler.kategori=TblKategoriler.KategoriId;
SELECT. FROM Tblürünler, Tblkategoriler WHERE Tblürünler SELECT * FROM Tblürünler, Tblkategoriler WHERE Tblürünler.kategori=TblKategoriler.KategoriId;
SELECT *from Customers,Orders WHERE Customers.CustomerID=Orders.CustomerID
Her kategorideki ürün sayısını kategori adı ve numarası ile birlikte görüntüleyen SQL deyimini yazınız.
SELECT Orders.CustomerID, count(*) FROM Orders GROUP BY
SELECT Orders.CustomerID,Customers.ContactName,count(*) FROM Orders INNER JOIN Customers ON Orders.CustomerID=ORDERS.CustomerID GROUP BY Orders.CustomerID,Customers.ContactName