TEMEL KAVRAMLAR. 1.1 Klasik Dosya Yapıları Kayıt ve Alan Sıralı Dosyalar 1 / 192

Ebat: px
Şu sayfadan göstermeyi başlat:

Download "TEMEL KAVRAMLAR. 1.1 Klasik Dosya Yapıları Kayıt ve Alan Sıralı Dosyalar 1 / 192"

Transkript

1 TEMEL KAVRAMLAR 1.1 Klasik Dosya Yapıları Bilgisayarların ilk ortaya çıktığından bu yana hem donanım hem de yazılım alanında pek çok değişim ortaya çıkmıştır. Doğal olarak bu değişim, kuruluşların ve kişilerin gereksinimlerine daha iyi cevap verebilmek amacıyla ortaya çıkmaktadır. Pek çok kuruluşta eskiye oranla çok daha fazla veri üretildiğinden, geleneksel veri saklama ve işleme tekniklerinin yetersiz kaldığı gözlemlenmiştir. Veri saklama birimlerinde depolanan veri topluluklarına dosya (file) denir Kayıt ve Alan Dosyalar kendi içinde kayıtlara bölünmüştür. Bir sınıftaki öğrenci listesini göz önüne alalım. Bu liste çok sayıda veri içerebilir. O halde, listenin ana bellekte tutulması söz konusu olamaz. Ana bellekte tutulduğu takdirde, bilgisayarın kapatılması durumunda bu bilgiler yok olacaktır. O halde bu verilerin kalıcı bir ortamda, örneğin sabit disk üzerinde yer alması gerekecektir. Disk üzerinde tutulan bu bilgiler, yeni öğrenci eklendiğinde büyüyecek veya çıkarıldığında küçülecektir. Ayrıca zaman zaman içeriği değişecektir. Bu listedeki her bir öğrenci bilgisi bir mantıksal kayıt oluşturur. Her kayıt da farklı bilgiler içerebilir. Örneğin; öğrencinin adı, baba adı, doğduğu yer vb gibi bilgileri içerebilir. Sayılan bu bilgilerin herbirine alan (field) adını veriyoruz Sıralı Dosyalar Klasik bilgisayar dosyaları birbirinden bağımsız; muhasebe, stok, pazarlama, üretim ve diğer uygulamalarda kullanılmak üzere hazırlanır. Bu dosyalar, sıralı ya da doğrudan erişim yöntemleri kullanılarak işlenir. Sıralı erişimde, dosyanın tüm kayıtları tek tek taranarak istenilen kayıtlara ulaşılır. Doğrudan erişim yönteminde ise, kayıtlar tek tek sırayla okutulmaz, istenilen kayıda doğrudan erişerek işlenir. Sıralı dosyalar, bir başka deyişle ardışık dosyalar, içerdiği kayıtlara birinci kayıttan başlamak üzere sırayla erişim yapmak üzere tasarlanmış dosyalardır. Bu tür dosyaların kayıtlarına ardışık olarak erişilebilmesine karşılık, kayıtlar fiziksel olarak ardışık olmayabilir. Sıralı dosyaların herbir kayıtına ardışık olarak erişilmesi bazı durumlarda yararlı olmasına rağmen, bazı uygulamalarda sorunlar yaratır. 1 / 192

2 Örneğin; okuldaki tüm öğrencilerin tümü listelenecek ise, kayıtlara peşpeşe erişim söz konusudur. Bu durumda dosyanın sıralı olarak tasarlanmış olması sorun yaratmaz. Ancak sadece birkaç öğrencinin listelenmesi isteniliyorsa, tüm öğrencilerin okunarak bu listenin elde edilmesi uygun bir yöntem olmayacaktır. Söz konusu öğrencilere doğrudan erişilmesi en uygun yoldur İndeksli Dosyalar Sıralı dosyalarda tüm kayıtlar ardarda gelmesi gerekiyordu. Bu soruna çözüm bulmak amacıyla doğrudan erişimli dosyalar kullanılır. Bu tür dosyalarda, herbir arama işlemi dosyanın başından itibaren yapılmaz. Belirlenen kayıtlara doğrudan erişilerek üzerinde işlem yapılır. Doğrudan erişimli dosyaların en tanınmışı, indeksli dosyalar olarak bilinir. İndeksli dosyalar veya bir başka deyişle indeks sıralı dosyalar, veri dosyasından ayrı olarak bir indeks dosyasının oluşturulması ile birlikte hazırlanır. Bir dosya için oluşturulan indeks; söz konusu dosyanın anahtarları ile bu anahtarların disk üzerinde bulunduğu adresi içerir. Anahtar alan, erişimde kulanılmak üzere seçilen alan olarak değerlendirilir. Örneğin; öğrenci dosyasında, öğrenci numarasını içeren alanının indeks alanı olarak tasarlandığını varsayalım. Herhangi bir öğrencinin bilgilerine ulaşmak söz konusu olduğunda; bu numara önce indeks üzerinde aranılarak bulunur ve söz konusu kayıda ilişkin adres bilgisi elde edilerek, bu adrese doğrudan erişilir. 2 / 192

3 1.2 Veri Tabanı Sistemleri Karmaşık dosya yapıları ve çok sayıda dosya arası ilişki ve kullanıcıların dosyalara erişimi söz konusu olduğunda, geleneksel dosya sisteminin yetersiz kaldığı görülmüştür. Bu sorunu çözmek üzere, veriyi saklama ve veriye erişim konusunda yeni yazılım teknolojilerine yönelme başlamış ve Veri Tabanı Yönetim Sistemleri (VTYS) yaklaşımı ortaya çıkmıştır. Veri Tabanı Yönetim Sistemleri (VTYS) yaklaşımında veri girişi ve depolanması, veriye erişen uygulama programlarından bağımsızdır. Klasik dosya kullanımında ise, kayıt desenleri ve dosya yapılarında ortaya çıkabilecek en ufak bir değişiklik bile uygulama programlarının değişmesine ve yeniden derlenmesine neden olmaktadır. Veri tabanı sistemleri bilgisayar sistemlerinin önemli bir bileşeni olarak değerlendirilir. Veri tabanı yönetim sistemleri (VTYS), birbirleriyle ilişkili veri ve programlar topluluğundan oluşmaktadır. Veri topluluğu bir veri tabanı olarak değerlendirilir. Veri tabanı bir kuruluşa ilişkin bilgilerin yer aldığı ortamdır. Veri tabanı sistemleri, veri kümelerinin düzenli bçimde tutulduğu ve bu verilerin çeşitli yazılımlar aracılığıyla yönetildiği ortamlardır. 1.3 Veri Tabanı Sistemlerinin Üstünlükleri Veri tabanı kullanımı, geleneksel dosya kullanımına göre birçok yönden üstünlük sağlamaktadır. 3 / 192

4 4 / 192

5 5 / 192

6 6 / 192

7 VARLIK İLİŞKİ MODELİ 2.1 Varlık İlişki Modeli Zaman içinde, her bir veri modeli için birçok VTYS leri üretilmiştir. Ancak şu ana kadar hiçbir VTYS içinde kullanılmamış bir veri modeli daha bulunmaktadır. Bu veri modeli varlık-ilişki modeli (Entity-Relationship Model) adıyla bilinmektedir. Varlık İlişki modelini kısaca Türkçe kelimelerinin baş harflerinden türeterek Vİ veya İngilizce kelimelerinin baş harflerinden türeterek kısaca ER modeli olarak isimlendirilir. Varlık-ilişki modeli herhangi bir VTYS de kullanılmasa bile, veri çözümlemede, modellemede ve ilişkilerin ortaya konulması açısından çok kullanılan bir araçtır. Bu model kullanılarak, VTYS den bağımsız olarak veri çözümlenir, modellemesi ve ilişkileri tamamlandıktan sonra herhangi bir VTYS veri tabanı şemasına dönüştürülür. Örnek bir varlık ilişki modeli şeması 2.2 Varlık Varlık (Entity), var olan ve diğer varlıklardan ayırt edilebilen bir nesnedir. Örneğin, bir bilgisayar, bir kaplan, bir savaş uçağı, bir kız çocuğu birer varlık olarak değerlendirilir. Bu kavram, aslında dünyamızdaki var olan nesneleri, olayları ve kavramları tanımlamaktadır. Yandaki nesnelerden her biri bir varlık olarak değerlendirilir. 7 / 192

8 2.4 Varlık ve İlişki Kümeleri Varlıklar arasındaki bağlantıya ilişki adı verilir. Örneğin, Burak varlığı ile Dersler varlığı arasında bir ilişki vardır çünkü; Burak bir öğrencidir ve aldığı dersler Dersler varlığı ile gösterilmektedir. İlişki kümesi, aynı türdeki ilişkilerin bir kümesidir. Biçimsel olarak, bu varlık seti üzerindeki bir matematiksel ilişki olarak ifade edilebilir. Aynı tür ilişkilerin oluşturduğu kümeye ilişki kümesi denir ve bu ilişki kümelerini R ile gösterilir. E1, E2,... En varlık kümeleri ise, bu kümeler arasındaki R ilişkisi şu şekilde tanımlanır: 8 / 192

9 Örnek Aşağıdaki iki varlık kümesini gözönüne alalım. Bu varlık kümelerinden birincisi öğrencileri, ikincisi ise bu öğrencilerin aldıkları dersleri içermektedir. E1= {Burak, Begüm} E2= {Matematik, Fizik} Bu iki küme arasındaki ilişki, öğrencilerle dersler arasında olan ilişkidir. Bu ilişkileri, öğrenci-ders çiftleri biçiminde ifade edebiliriz. Tüm öğrencilerle tüm dersler arasındaki ilişki ise kartezyen çarpım yapılarak ortaya konulur. Kartezyen çarpım, iki küme arasında olası tüm çiftleri ifade etmektedir. İki varlık kümesi için kartezyen çarpım şu şekildedir: E1 x E2 = {(Burak, Matematik), (Burak, Fizik), (Begüm, Matematik), (Begüm, Fizik)} Aşağıda gösterildiği biçimde üç ilişki kümesi tanımlayalım: R1 = {(Burak, Matematik)} R2 = {(Burak, Fizik)} R3 = {(Burak, Matematik), (Begüm, Matematik)} Bu ilişki kümeleri için aşağıdaki bağıntıların doğru olduğu görülür: R1 E1 x E2 R2 E1 x E2 R3 E1 x E2 Bu örnek bize, iki veri kümesi arasında geçerli tüm ilişki kümelerinin, R ilişki kümesinin bir alt kümesi olduğunu göstermektedir. Örnek Bir bankanın müşterileri ve bu müşteriler için bankanın düzenlediği hesaplar birer varlık olarak kabul edilir. Bu iki varlık arasında müşteri-hesap no biçiminde ifade edilen bir ilişki bulunmaktadır. "Müşteri" ve "Hesaplar" varlıkları arasında ikili ilişki bulunmaktadır. Bu ilişki kümeleri şu şekilde ifade edilebilir: R1 = {(Burak, 1350), (Burak, 1400)} R2 = {(Begüm, 1525} R3 = {(Selin,1111)} R4 = {(Sezin, 1200)} R5 = {(Dilay, 1500), (Dilay, 1750)} 9 / 192

10 2.5.2 Türetilen Nitelik Bir nitelik kullanılarak, bir başka varlık niteliği 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. 10 / 192

11 2.5.3 Çok Değere Sahip Nitelikler Bir nitelik birden fazla değer ile eşlenebiliyorsa, çok değere sahip nitelik adı verilen bir kavramdan söz edilir. ÖRNEK: Bir kişinin beğendiği araba markaları isimli nitelik, birden çok arabayı kapsayacağı için bu niteliğin çok değere sahip bir nitelik olduğu kabul edilir Rol Bir ilişki varlığın bir fonksiyonu ise, buna rol adı verilir. Örneğin, PERSONEL varlığı hem yöneticileri hem de işçileri kapsayacaktır. Bu varlıklar arasında bazıları diğerlerinin yöneticisidir. Kim kimin yöneticisidir? biçimindeki bir ilişkiyi göz önüne alalım. Bu ilişki; (Yönetici, İşçi) çiftleriyle karakterize edilir. Ancak bu çiftler arasında, (İşçi, Yönetici) çiftleri göz ardı edilir. 11 / 192

12 ÖRNEK: PERSONEL varlığı ile niteliklerini göz önüne alalım. Bu varlığın nitelikleri ve etki alanı, yani içerdiği değerler gösterilmiştir. Buna hangi PERSONELin, diğerinin yöneticisi olduğunu belirleyen çalıştığı kişi ilişkisini göz önüne alarak rol çiftlerini belirleyelim. (Begüm, Burak) (Begüm, Dilay) (Selin, Sezin) Birden-bire İlişki A varlık kümesi içindeki bir varlık, B varlık kümesi içindeki sadece bir varlık ile ilişkili ve B varlık kümesi içindeki bir varlık, A varlık kümesi içinde sadece bir varlık ile ilişkili ise birden-bire ilişki söz konusudur. A ve B kümelerinin, biçiminde olduğunu varsayalım. A kümesinin her bir elemanının, B kümesindeki bir elemanla ilişkide olması bire-bir ilişkiyi ifade etmektedir. 12 / 192

13 ÖRNEK 1: Müşteri-hesaplar ilişkisini göz önüne alalım. Her müşteri için sadece bir hesap açtırılabildiğini ve birden fazla kişi için ortak hesap açılmasına izin verilmediğini varsayalım. Şekil üzerinde gösterildiği gibi, her bir müşteri sadece bir hesap numarası ile eşlenebilmektedir. Aynı biçimde bir hesap numarası sadece bir müşteriye verilebilmektedir. O halde bu birden-bire ilişkidir. 13 / 192

14 14 / 192

15 2.6.4 Çoktan-çoğa İlişki A varlık kümesi içindeki bir varlık B varlık kümesi içindeki birden fazla varlık ile ilişkili ise ve B kümesindeki bir varlık A kümesindeki birden fazla varlık ile eşleniyorsa çoktançoğa ilişki vardır. ÖRNEK: Müşteri-hesap ilişkilerinde, aile üyelerinin ortak hesap açabilmesi durumunda çoktançoğa ilişki söz konusu olmaktadır. 15 / 192

16 Bu şekil, müşteri-hesap ilişkisinin çoktan-çoğa biçiminde olduğunu göstermektedir. Müşteriler birden fazla hesaba sahip olabilmekte ve birden fazla müşteri aynı hesabı açabilmektedir. Örneğin, Burak isimli kullanıcı 4500 ve 2310 numaralı iki hesaba sahiptir. Buna karşılık, 4500 numaralı hesabın aynı aileye üye Burak dışında Begüm isimli bir başka müşterisi bulunmaktadır. 2.7 Varoluş Koşulu Eğer X varlığının bulunması, Y varlığının bulunmasına bağlı ise, X in Y ye bağlı olduğundan söz edilir. Bir başka deyişle, Y silinirse X in bir anlamı kalmayacaktır. O halde X de silinmelidir sonucuna ulaşılır. Böyle bir durumda Y ye baskın varlık (dominant entity), X e bağımlı varlık (subordinate entity) adı verilir. 16 / 192

17 2.8.1 Süper Anahtar Varlık kümesi içinde yer alan bir varlığı kesin olarak tanımlamaya yarayan anahtara süper anahtar denir. 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. ÖRNEK: SSK numarası bir PERSONELi diğerinden ayırt etmek için yeterlidir. Çünkü bir ülkedeki tüm çalışanların sadece bir SSK numarası vardır ve iki farklı kişinin aynı SSK numarasına sahip olması olanaksızdır. PERSONELin adı süper anahtar olarak tanımlanamaz. Çünkü aynı isme sahip birçok PERSONEL var olabilir. Ancak, SSK numarası bir süper anahtar olması nedeniyle, "SSK numarası" ve "PERSONELin adı" birlikte süper anahtar olarak değerlendirilebilir. Hatta SSK Numarası, Adı, Bölümü nitelikleri birlikte bir süper anahtar olarak kabul edilebilir Aday Anahtar Varlık kümesi içinde yer alan bir varlığı kesin olarak tanımlamaya yarayan bir başka anahtar da aday anahtar olarak bilinmektedir. Bir varlık kümesinin süper anahtarı bir veya daha fazla niteliğin birleşiminden oluşabiliyordu. Bu tür bir süper anahtarın herhangi 17 / 192

18 bir alt kümesi aynı zamanda bir süper anahtar değil ise, bu anahtara aday anahtar ya da kısaca anahtar adı verilir. Bazı durumlarda; varlıklara ilişkin birkaç nitelik, birlikte bir anahtar olarak tanımlanabilir. Personel için; SSK No, Adı, Bölümü nitelikleri, birlikte "PERSONEL" varlığı içindeki her bir varlığı diğerinden ayırt etmek için kullanılabilir. Süper anahtar, varlıkları kesin olarak birbirinden ayırt etme özelliğine sahip olmasına karşılık, bu özelliği kazanmak için gerekenden fazla niteliği içerebilir. Anahtar ise, aynı tanıma uygundur. Ancak gerekenden fazla nitelik içermeme özelliğine sahiptir. Yukarıda görüldüğü gibi, SSK No niteliği süper anahtarın bir parçası olmasına karşılık, tek başına varlıkları birbirinden kesin olarak ayırt etmekte kullanılabilir. O halde SSK No niteliği bir anahtardır. ÖRNEK: Bir PERSONEL varlığının aşağıda belirtilen niteliklere sahip olduğunu varsayalım. 18 / 192

19 İsim ve soyadı Doğduğu il Eğitim düzeyi Bu üç nitelikten oluşan varlık kümesi, bir zayıf varlık kümesi olarak değerlendirilir. Çünkü, bu küme içinde aynı isim ve soyadına sahip çok sayıda PERSONEL olabilir. O halde bir anahtar olarak kabul edilemez. Benzer biçimde doğduğu il ve eğitim düzeyi nitelikleri de aynı nedenlerden ötürü birer anahtar olamaz. Bu niteliklerin tümünün birleşimi bile bir anahtar olamaz İlişki Türlerinin Gösterilmesi İlişki türleri, Birden-bire Birden-çoğa Çoktan-bire Çoktan-çoğa biçiminde tanımlanmıştı. Bu ilişkiler varlık-ilişki, yani ER şemaları ile aşağıdaki şekilde gösterilebilir. 19 / 192

20 ÖRNEK 1: Bir PERSONEL varlığının aşağıda belirtilen niteliklere sahip olduğunu varsayalım. Adı Cadde Sokak Apartman Doğum tarihi Sevdiği yiyecekler a) Cadde, sokak ve apartman nitelikleri adres isimli adıyla birleştirilecektir. b) Doğum tarihi isimli nitelikten yararlanılarak yaşı isimli yeni bir nitelik elde edilecektir. Yapılan tanımlara uygun olarak varlık-ilişki şemasını şöyle oluşturabiliriz: 20 / 192

21 ÖRNEK 2: Müşteri ve Hesap isimli iki varlık kümesi birbirine mushes isimli ilişki ile bağlıdır. Müşteri varlığının nitelikleri: Adı SSK no Adres Hesap varlığının nitelikleri: Hesap no Bakiye Varlık-ilişki şeması yanda belirtilen şekilde olabilir: ÖRNEK 3: PERSONEL isimli varlık kümesini göz önüne alalım. Bu varlık kümesinin nitelikleri şunlardır: Adı Adresi Tel no Bu PERSONEL varlık kümesindeki PERSONELin bir kısmı diğerlerinin yöneticisidir. Bu ilişki şu şekilde gösterilebilir: 21 / 192

22 2.10 Varlık İlişki Modelinin Tablolaştırılması Bir veri tabanı, tablolardan oluşur. Varlık-ilişki şemaları biçiminde çizilen bir veri tabanı tablolar halinde gösterilebilir. Veri tabanının her varlık kümesi ve her ilişki kümesi için, bu isimlerle simgelenen birer tablo düzenlenir. 22 / 192

23 23 / 192

24 24 / 192

25 25 / 192

26 26 / 192

27 27 / 192

28 28 / 192

29 İLİŞKİSEL VERİ MODELİ 3.1 İlişkisel Model İlişkisel model (relational model), günümüzde en yaygın biçimde kullanılan ( veri tabanı modelidir ) bir modeldir. Ticari veri tabanı yönetim sistemlerinin hemen hemen tümünde bu model kullanılmaktadır. İlişkisel model, varlıklar arasındaki bağlantının, içerdiği değerlere göre sağlanması esasına dayanır. İlişkisel model, varlıklar arasında oluşan karmaşık ilişkileri basite indirgemek amacıyla geliştirilmiştir. Bu yaklaşımda, veri tabanındaki tüm ilişkiler tablolar biçiminde tanımlanmaktadır. 3.2 İlişkisel Veri Tabanı İlişkisel veri tabanı, her biri özel isimlere sahip tablolardan oluşur. İlişkisel veri tabanında 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. 29 / 192

30 3.2.1 Tabloların Özellikleri İlişkisel veri tabanı içinde yer alan her bir tablo; Sütunlardan (kolonlardan) oluşur ve Her bir sütunun ayrı bir adı vardır. Her bir sütun, aynı niteliğin tanımlandığı aynı etki alanının (domain) belirlediği değerleri içerir. Her bir satır birbirinden farklıdır. Satırların sırası önemsizdir. Sütunların sırası önemsizdir Veri Tabanı Şeması Veri tabanının mantıksal tasarımına veri tabanı şeması adı verilir. Tablolar ve onların nitelikleri; veri tabanı şemasını oluşturur. Veri tabanı şemalarını iki ana grup altında ortaya koymak mümkündür Veri tabanı şeması veya bir başka deyişle kavramsal şema tasarlandıktan sonra, her bir uygulama için alt-şemalar hazırlanır. Örneğin, muhasebe uygulaması bir alt şemadır. Çünkü bu uygulama veri tabanının tümü ile ilgilenmez. 30 / 192

31 Alt şema, veri tabanı şemasının herhangi bir uygulama programı tarafından gereksinim duyulan alt-düzey mantıksal görünümüdür. Bir uygulama programının veri tabanının her noktasına erişmesi gerekmez. Çoğunlukla kendisi ile ilgili bölümlere yani alt-şemaya ulaşması yeterlidir. Örneğin, firmanın satışlarla ilgili alt-şeması, ürünler ve müşterilerle ilgili verileri kapsayacaktır. Bu uygulama, veri tabanının diğer kaynakları ile ilgilenmez Veri Tabanı Örneği Veri tabanları, zaman içinde veri eklemeleri ya da veri silinmesi gibi işlemlere tabi tutulurlar. Bu işlemler sonucunda veri tabanı sürekli olarak değişime uğrar. Ancak veri tabanının herhangi bir andaki durumu önem taşır. Veri tabanının herhangi bir andaki durumuna Veri Tabanı Örneği (database instance) adı verilir. 3.3 Veri Tabanı Bütünlüğü Veri tabanının doğru ve tutarlı biçimde çalışması ve işlemleri yerine getirmesi gerekir. Verinin doğru ve tutarlı olmasına "veri bütünlüğü" denir. Veri bütünlüğünün sağlanması sonucunda, veri tabanının eksik, yanlış, tutarsız ve çelişkili olmaması sağlanır. 31 / 192

32 Veri tabanında veri bütünlüğünü sağlamak için birçok yol bulunmaktadır. Bunlardan en önemlisi, bütünlük sınırlamaları (integrity constraints) adını almaktadır. Bütünlük sınırlamaları, veri tabanı yönetim sistemi veya uygulama programları tarafından tanımlanır. Sözü edilen sınırlamalar; kullanıcı tarafından yapılması gereken ekleme, silme ve güncelleştirme işlemlerinden önce bir denetim yapılmasına neden olur. Bu denetim sonucunda, sadece sınırlamalara uyan işlemlerin yapılmasına izin verilir. Diğerleri reddedilir Anahtar Sınırlamaları Bütünlük sınırlamalarının sağlanmasında anahtarlar önemli rol oynar. Anahtar türü belirlenerek, bu sınırlamaların veri tabanı yönetim sistemi tarafından otomatik olarak yapılması sağlanır. Söz konusu anahtarlar: Birincil anahtar (Primary key) Yabancı anahtar (Foreign key) Birincil Anahtar Sınırlamaları İlişkisel veri tabanlarında bir tablonun benzer değerler içermeyen (unique) bir sütunu ya da birkaç sütunu birlikte birincil anahtar olarak tanımlanabilir. Birincil anahtar, bir aday anahtardır ve söz konusu varlığın kayıtlarını en iyi biçimde karakterize eder. Birincil anahtar tanımlandığında, şu şekilde bir sınırlama konulmuş olacaktır; Birincil anahtar NULL değerleri veya birbirinin aynı değerleri içeremez. Boş olan değerlere NULL adını veriyoruz. Bu sınırlamanın kontrolünü ise veri tabanı yönetim sistemi yapacaktır. 32 / 192

33 Birincil anahtar tek bir sütundan oluşabileceği gibi, birden fazla sütunun birleşiminden de oluşabilir. Bu durumda bileşik birinci anahtar dan söz edilir. Bileşik birincil anahtarın içerdiği değer tek olmalıdır. Ancak bileşik anahtarı oluşturan sütunların her biri çift değerler içerebilir. Bununla birlikte birincil anahtarı oluşturan sütunların hiçbiri NULL değer içeremez. Örnek PERSONEL tablosunun No isimli sütunu birincil anahtar olarak tanımlanmıştır. Bu tabloya, şekil üzerinde görüldüğü biçimde 25 numaraya sahip yeni bir PERSONEL eklemeye çalışıyoruz. Bu isteğimiz gerçekleşmeyecektir. Çünkü, bir tabloda birincil anahtara sahip bir sütunda birbirinin aynı olan değerlere yer verilmez Dış Anahtar Sınırlamaları Bir dış anahtar, bir sütun veya çok sayıdaki sütunların birleşiminden oluşur. Dış anahtar, aynı tablo ya da bir başka tabloda yer alan bir birincil anahtarla eşleştirilir. Dış anahtarın değeri bir birincil anahtar değeriyle eşleşmeli veya NULL olmalıdır. Eğer dış anahtar birincil anahtarın bir kısmını oluşturuyorsa, doğal olarak NULL değer içeremez. 33 / 192

34 İlişkisel Bütünlük İki tablo birbirleriyle dış anahtar kullanılarak ilişkilendirildikten sonra, bu sınırlamalara dayanarak, iki tablo arasında silme ve güncelleştirme işlemleri otomatik olarak yerine getirilebilir. Örneğin; PERSONEL ve BÖLÜM isimli iki tabloyu göz önüne alalım. PERSONEL tablosunun Bölüm no isimli sütunu, BÖLÜM tablosuna ilişkin bir dış anahtar olarak tanımlanmıştır. Bu tür bir tanım beraberinde ilişkisel bütünlük özelliklerini getirecektir. BÖLÜM isimli tablodan bir satırı, örneğin 10 numaralı bölümü silmek istiyoruz. Bu satır silindiğinde, PERSONEL tablosunda da aynı satır ile ilgili tüm kayıtlar otomatik olarak yok olacaktır Veri Değerleri Sınırlaması Tablonun herhangi bir sütununda yer alacak verilerin hangi değerlere sahip olabileceği konusunda sınırlamalar getirilebilir. Bir değerin NULL olamayacağı belirtilerek bir sınırlama yapılabilir. Bunun yanı sıra, örneğin, PERSONELin şehir içi telefon numarasının 7 haneden fazla olmasını önlemek için böyle bir sınırlama konulabilir. Benzer biçimde, bir öğrencinin doğduğu ilin trafik kodunun 3 haneden fazla olamayacağı ve 1 ile 81 rakamları arasında olabileceği biçiminde sınırlamalar getirilebilir. 34 / 192

35 ÖRNEK: PERSONEL tablosu için şöyle bir sınırlama tanımlandığını varsayalım; Bölüm numaraları 1-99 arasında, yani iki haneli olacaktır. Bu sınırlamaya uymayan bir giriş yapılmaya çalışıldığında, örneğin bölüm numarası 400 olan bir kayıt girilmeye çalışıldığında, sınırlama nedeniyle kayıt ekleme işlemi yerine getirilmeyecektir İşletme Kuralları Sınırlaması Tablolar üzerinde işletme kurallarına dayalı sınırlamalar yapılabilir. Bu sayede, işletme kurallarına uygun olarak veri bütünlüğü söz konusu olabilir. Örneğin, işletmenin muhasebe bölümünde programcı kadrosuna sahip eleman çalıştırmak anlamlı değildir. Bunu denetlemek gerekecektir. Veri tabanına bilgi girişleri esnasında, muhasebe bölümüne yeni PERSONEL kaydı eklemek gerektiğinde, söz konusu işletme kuralı, uygunsuz veri girişlerini engelleyecektir. Bu tür sınırlamalar çoğunlukla uygulama programları aracılığıyla denetlenir Nitelikler Arası Bağımlılıkların Kullanılması Veri bütünlüğünün ve tutarlılığının sağlanmasında, nitelikler arasındaki bağımlılıkların kullanılması yararlı olabilir. Niteliklerin birbirleriyle olan bağımlılığı göz önüne alınmadan veri tabanı tasarımının yapılması sorunlara neden olacaktır. Nitelikler arasındaki fonsiyonel bağımlılıklar belirlenerek, şema üzerinde düzenlemeler yapılır. 35 / 192

36 36 / 192

37 İLİŞKİSEL VERİ TABANI TASARIMI 4.2 Fonksiyonel Bağımlılık R bir ilişki şeması olsun. X ve Y niteliklerinin R'nin iki alt kümesi olduğunu varsayalım., Eğer X nitelikler kümesinin değerleri Y nitelikler kümesinin değerlerini belirliyorsa; Y, X 'e fonksiyonel bağımlıdır denir. O halde; R ilişkisinin Y niteliği, R'nin X niteliğine ilişkisel olarak bağımlıdır. X 'in her bir değeri Y'nin bir değerine karşılık geliyorsa da fonksiyonel bağımlılıktan söz edilir. Bu işlevsel bağımlılık, biçiminde ifade edilir. Eğer bu bağıntı geçerli ise ve X'den bir nitelik çıkarıldığı halde bu bağımlılık hala geçerli oluyorsa; burada kısmi bağımlılık söz konusudur. Fonksiyonel bağımlılığı bir örnek ile ortaya koymak istiyoruz. Örnek Bir şirketin müşterilerine partiler biçiminde ürün gönderdiğini varsayalım. Her bir müşteri ayrı bir ilde yer almaktadır. Bir şehir birden fazla müşteri içerebilir. Her bir şehir "şehir kodu" na sahiptir. Her bir müşteriye birden fazla parti ürün gönderebilir. Bu bilgileri saklamak için bir ilişkisel tablo yaratıldığını varsayalım. Bu tablonun adı DAĞITIM olsun. Söz konusu DAĞITIM şeması şu şekilde gösterilebilir; DAĞITIM (m#, şehir_kodu, şehir, p#, miktar) 37 / 192

38 Burada m#, şehir_kodu ve şehir alanları müşteri bilgilerini, p# ve miktar ise dağıtım işlemi bilgilerini oluşturmaktadır. Bir müşteriye birden fazla parti ürün gönderilebilir. Verinin tekrarlı olmasını önlemek için m# ve p# birleşik anahtar olarak tanımlanmıştır. Bu verilere dayanarak fonksiyonel bağımlılıkları şu şekilde ifade edebiliriz: m# şehir_kodu,şehir şehir şehir_kodu (m#,p#) miktar Burada iki türlü bağımlılık tanımlanmıştır. Birinci ve üçüncüsü anahtarlara göre bağımlılıkları ortaya koymaktadır. İkinci bağımlılık ise, anahtara bağımlı olmayan, geçişli bağımlılıklardır. 4.3 Birinci Normal Form Aşağıdaki tablo birinci normal form olarak tanımlanır. İlişkisel veri tabanı modelinin temel kuralıdır. Bütün niteliklerin aldığı değerler atomik olmak zorundadır. Birinci formdaki bir tablo, belirli bazı alanlarda tekrarlı verilere sahiptir. Örneğin; sehir kodu ve şehir verileri her müşteri için tekrarlıdır. Bu tekrarlar güncelleme sorunlarına yol açacaktır. Ayrıca bu formda bilgi girişi ve silme işlemlerinde sorunlara neden olacaktır. 38 / 192

39 Satır Ekleme Sorunu Bir başka şehirdeki, örneğin "İZMİR" deki müşterinin m#, şehir_kodu ve şehir bilgilerinin girilebilmesi için; mutlaka bir dağıtım işleminin gerçekleştirilmesi gerekir. Ekleme işleminin yapılabilmesi için, bu müşteriye ilişkin bir dağıtım işleminin yapılmış olması ve p# ile miktar değerlerinin belirlenmiş olması gerekir. Bu değerler olmadan kayıt ekleme işlemi yapılamaz. 39 / 192

40 Satır Silme Sorunu Bir dağıtım işleminin iptal edilerek ilgili kaydın silinmeye çalışıldığını varsayalım. Bir satır silindiğinde, sadece dağıtım ve miktarı değil, müşteri hakkındaki diğer bilgiler de yok olacaktır. Örneğin, M3 müşterisi ile ilgili satır silindiğinde, müşterinin şehir_kodu ve şehir bilgileri de yok olacaktır Güncelleme Sorunu M1 müşterisinin yeri İSTANBUL'dan ANKARA'ya taşınırsa, bu yeni bilgi nedeniyle tablo içinde M1'e ait beş satırın güncelleştirilmesi gerekecektir. Eğer tablo çok büyük ise, sadece bir müşteri ile ilgili bu tür küçük bir değişiklik belki de binlerce kaydın güncelleştirilmesi sorununu yaratacaktır. 40 / 192

41 4.4 İkinci Normal Form Birinci normal formun, veri tabanı tasarımı esnasında bazı sorunlara neden olduğunu öğrendik. Bu sorunlardan bir kısmını çözmek için birinci normal formdaki tablolar, başka normal formlara dönüştürülür. Tabloların sütunları arasındaki fonksiyonel bağımlılıktan yararlanarak, 1NF (birinci normal form) tablolarının birden fazla tabloya dönüştürülmesi sonucunda; ikinci normal forma (2NF) ulaşılır. Eğer bir ilişki şemasındaki birincil anahtar olmayan bir nitelik, R'nin herhangi bir anahtar niteliğine kısmi fonksiyonel olarak bağımlı değilse (yani tam fonksiyonel bağımlı ise), bu ilişki ikinci normal formdadır. İkinci normal formda ilişkisel tablonun her bir anahtar olmayan sütunu, birincil anahtara tam fonksiyonel bağımlıdır. Bu; anahtar olmayan her kolon, birincil anahtara bağımlı olmalıdır demektir. DAĞITIM tablosu birinci normal formdadır. Çünkü, şehir_kodu ve şehir sütunları (m#, p#) birleşik anahtarının sadece m# sütunu üzerinde fonksiyonel bağımlıdır. İkinci normal form, kendisi anahtar olmayan tüm sütunların anahtara bağlanarak yeni tablolara ayrıştırılması ile oluşturulur. Örnek; DAĞITIM isimli tabloda m# ve p# anahtarları göz önüne alınarak, bu tablo iki ayrı tabloya dönüştürülebilir. Bu tablodaki fonksiyonel bağımlılıklar şu şekilde ifade edilebilir: m# -> şehir_kodu, şehir şehir -> şehir_kodu (m#,p#) -> miktar Bu fonksiyonel ilişkilerden birincisi ve üçüncüsü, anahtarlara fonksiyonel bağlı olarak tanımlanmıştır. Bu tanımlar 2NF formunun yapısını belirler. 2NF durumunda DAĞITIM tablosu ŞEHİRLER ve MİKTARLAR isimli iki tabloya dönüşür. DAĞITIM(m#, şehir_kodu, şehir, p#, miktar) ŞEHİRLER(m#, şehir_kodu, şehir) MİKTARLAR(m#, p#, miktar) 41 / 192

42 Bu tabloların görünümü aşağıdaki animasyonda canlandırılmıştır Satır Ekleme Sorunu ŞEHIRLER isimli tabloya yeni bir müşteri kayıtı girilmediği sürece, yeni bir şehir kodu ve şehir adı girilmesine olanak yoktur. Örneğin bu tabloya, 61 şehir koduna sahip TRABZON ilini eklemek gerektiğinde bir sorunla karşılaşılacaktır. Bu ili tabloya dahi etmek için, bu ilde yerleşmiş bir müşteriye ihtiyaç vardır. Böyle bir müşteri olmadığı sürece şehir ile ilgili bu tür bilgiler tabloya eklenemez. 42 / 192

43 Satır Silme Sorunu Tablodan bir müşteri silindiğinde, şehir kodu ve şehir adı bilgileri de yok olacaktır. Örneğin, ŞEHİRLER tablosundan M5 müşterisi silindiğinde, o müşterinin yerleştiği İZMİR iline ilişkin veriler de tablodan yok olur. 43 / 192

44 4.5 Üçüncü Normal Form R'deki herhangi bir anahtar içinde yer almayan nitelik, R'nin herhangi bir niteliğine geçişli fonksiyonel bağımlı değil ve ayrıca 2NF özelliklerine sahip ise; bu ilişkinin üçüncü normal formda (3NF) olduğu söylenir. İkinci normal formda sadece anahtarlara ilişkin fonksiyonel bağımlılıklar kullanılmıştı. Bunun dışındaki geçişli bağımlılıklar da tablolara dönüştürülerek, üçüncü normal form elde edilir. Örneğimizdeki fonksiyonel bağımlılıkları şu şekilde tanımlamıştık; m# -> şehir_kodu, şehir şehir -> şehir_kodu (m#,p#) ->miktar Bu durumda, bir anahtara bağlı olmayan, şehir -> şehir_kodu geçişli bağıntısı da ayrı bir tabloya dönüştürülerek, 3NF'deki aşağıdaki tablo tanımlarına ulaşılır; MÜŞTERİ_ŞEHİR(m#, şehir) ŞEHİR_KOD(şehir_kodu, şehir) MİKTARLAR(m#, p#, miktar) Tablolar bu tanımlara göre yeniden düzenlenir. 44 / 192

45 4.6 Boyce-Codd Normal Formu 2NF, 3F durumunda olup geçişli bağımlılık içermeyen bir ilişkidir. Kendisi anahtar olmayan özellikler, anahtara fonksiyonel olarak bağlı bulunmamaktadır. 3NF'da da bazı sorunlarla karşılaşılabilir. Bu sorunları önlemek için Boyce-Codd normal formu (BCNF) kullanılır. Örnek olarak aşağıdaki ilişkiyi göz önüne alalım; ÖĞRENCİ(öğrenci_no, bölüm, öğretim_üyesi) Burada birincil anahtar; (öğrenci_no, bölüm) olarak belirlenmiştir. Aday anahtar ise; (öğrenci_no, öğretim üyesi) biçimindedir. Fonksiyonel bağıntı ise şu şekilde ifade edilebilir; Öğretim_üyesi -> bölüm Şekil üzerindeki ilişki 3NF durumuda olup bazı sorunlara sahiptir. Örneğin, bir öğrenci birden çok bölüme yazılabildiği gibi; bir bölümde birden fazla öğretim üyesi de yer alabilmektedir. Bu durumda, öğrenci birden çok bölüme yazılabildiği için, öğrenci_no anahtarı bölümü ve öğretim üyesini belirleyememektedir. Burada öğrenci_no ile bölüm anahtarları birlikte, öğretim üyesi niteliğini; öğrenci_no ile öğretim_üyesi anahtarları da bölüm niteliğini belirlemektedir. Bu kombinasyonların her ikisi de anahtar olabilir. ÖĞRENCİ şeması tanım olarak, birinci normal formdadır. Anahtarsız nitelikler, bir anahtara bağlı olduğu için de ikinci normal formdadır. Ayrıca geçişli bağımlılık bulunmadığı için, üçüncü normal formdadır. Buna rağmen yukarıdaki şema yine bazı sorunlara sahiptir. Örneğin, 98 numaralı öğrencinin kaydının silinmesi durumunda, B.ÖZKAN 'a ait olan bilgi de yok olacaktır. Aynı şekilde, yeni bir öğrenci EKONOMİ bölümüne yazılıncaya kadar bu bölüm tablo üzerinde görülmeyecektir. Bu sorunları önlemek için, Boyce-Codd normal formu elde edilmeye çalışılır. BCNF, her belirleyicinin bir anahtar oluşu halidir. ÖĞRENCİ şemasında öğretim_üyesi bir aday anahtar değil, bir belirleyici olduğu için, bu ilişki BCNF'da bulunmamaktadır. ÖĞRENCİ şeması aşağıda görüldüğü biçimde iki ilişkiye ayrılması halinde, BCNF oluşturulur ve yukarıda sayılan sorunlara son verilmiş olur. 45 / 192

46 4.7 Dördüncü Normal Form Bazı durumlarda BCNF'daki bir ilişkide de sorunlar görülebilmektedir. Örnek olarak aşağıdaki tabloyu göz önüne alalım: ÖĞRENCİ(öğrenci_no, bölüm, spor) Bu ilişki; değerlerin atomik oluşu, anahtarlarının bulunuşu, geçişli belirleyicilerinin olmaması ve belirleyicilerinin anahtar oluşu özellikleri nedeniyle 1NF, 2NF, 3NF ve BCNF koşullarına uymaktadır. Buna karşılık, yine de bazı sorunları bulunmaktadır. Burada bir öğrenci, birden çok sayıda bölüme ve spor etkinliğine sahip olabilmektedir. Bu nedenle, öğrenci_no ile bölüm ve öğrenci_no ile spor arasındaki ilişkiler birer fonksiyonel bağıntı değil; çok değerli bağımlılık halindedir. Çok değerli bağımlılıklar -> -> simgesi ile ifade edilir. Bir ilişki şemasında bir A anahtar olmak üzere, bütün fonksiyonel bağımlılıklar için; A -> X ve bütün çok değerli bağımlılıklar için; A -> -> Y biçiminde ise, dördüncü normal form söz konusudur. 46 / 192

47 Çoklu bağıntılarda ekleme ve silme esnasında sorunlarla karşılaşılabilir. Örneğin, MATEMATİK ve MUHASEBE bölümleri ile KAYAK ve TENİS spor etkinliklerine katılan 65 numaralı öğrenci için 4 ayrı kayıt yapılmaktadır. Bu öğrencinin FUTBOL etkinliğine katılabilmesi için ayrıca 2 kayıt daha eklenmesi söz konusudur. Böylece çok sayıda yineleme sorunu ortaya çıkmaktadır. Bu sorunu önlemek için, yukarıda verilen ilişki iki ayrı ilişkiye ayrılarak, çoklu bağımlılık durumu eklenmekte ve dördüncü normal form (4NF) oluşturulmaktadır. Beşinci normal form; ilişki içerisindeki her birleşik bağıntının, bu ilişkideki aday anahtarlardan oluşturulması ile sağlanmaktadır. Örnek olarak, aşağıdaki şemayı göz önüne alalım: ÖDÜNÇ (şube_adı, toplam_mevduat, şube_şehri, kredi_no, müşteri_adı, miktar) 47 / 192

48 Bu şema; silme, ekleme ve değiştirme işlemlerinde kaydın tamamının yazılmasını gerektirdiği için, iyi bir veri tabanı şeması olarak değerlendirilmez. Bu şema, önce iki ayrı şemaya bölünür. ŞUBE (şube_adı, toplam_mevduat, şube_şehri) KREDİ (şube_adı,kredi_no, müşteri_adı, miktar) KREDİ şeması da aşağıda belirtildiği biçimde ikiye ayrılır: KREDI_MİKTAR (şube_adı, kredi_no, miktar) MÜŞTERİ_KREDİ (kredi_no,müşteri_adı) Böylece kayıpsız ayrıştırma işlemi gerçekleştirilmiş olur. Burada ortak özellik, kredi_no olup; Kredi_no -> miktar, şube_adı bağıntısı kurulmaktadır. Böylece KREDİ şeması, KREDİ1 (kredi_no, şube_adı) KREDİ2 (kredi_no, müşteri_adı) KREDİ3 (kredi_no, miktar) biçiminde üç ayrı şemaya ayrılarak 5NF oluşmaktadır. 48 / 192

49 49 / 192

50 50 / 192

51 51 / 192

52 İLİŞKİSEL CEBİR Seçim Belirli bir ilişkiden, bazı sıraları (kayıtları) seçerek ortaya koymaya seçme işlemi denir. Bu işlem işareti ile gösterilir ve şu şekilde tanımlanır: Seçim işleminde, bir seçim kriteri kullanılır. Seçim kriteri bir eşitlik biçiminde ortaya konabilir. Bu tür bir işlemde "=" karşılaştırma işleci yerine " " işleçlerinden biri de kullanılabilir. Ayrıca mantıksal işleçlere de yer vermek mümkündür. "Ve" için " "; "veya" için " " işleçleri kullanılabilir. 52 / 192

53 Örnek MÜŞTERİ ilişkisini (tablosunu) göz önüne alalım. "Beşiktaş" ilçesindeki müşterileri seçmek için aşağıda belirtildiği biçimde bir sorgu düzenlenebilir; Bu sorgu tablodan iki kayıdın seçilmesine neden olur. Sorgulamayı şu şekilde anime edebiliriz : 53 / 192

54 Örnek MÜŞTERİ tablosunu yeniden göz önüne alalım. İlçesi "Beşiktaş" ve bakiye miktarı 100'den büyük olan müşterileri seçmek istiyoruz. Amacımıza uygun sorgu şu şekilde tanımlanabilir; Bu sorgu, tablodan bir kayıdın seçilmesine neden olur. Sorgulamayı şu şekilde göstebiliriz; 54 / 192

55 5.1.2 Atma İşlemi Belirli bir ilişkiden bazı sütunları atmak suretiyle yapılan seçim işlemidir. Bu işlem işareti ile gösterilir. Atma (projection) adı verilen bu işlem şu şekilde tanımlanır; Örnek MÜŞTERİ tablosunda yer alan kayıtlara bir sorgu uygulayarak, sadece müşteri adı ve şehir bilgisi elde edilmek istenmektedir. Söz konusu sorgu ilişkisel cebir ifadeleriyle şu şekilde ortaya konulabilir; Sorgulamayı şu şekilde gösterebiliriz; 55 / 192

56 5.1.3 Çarpma Belirli bir ilişkiden mümkün olabilecek tüm çiftleri elde ederek tek bir ilişki biçiminde göstermek için kartezyen çarpım oluşturulur. Kartezyen çarpım Kartezyen çarpım şu şekilde ifade edilir; işareti ile gösterilir. 56 / 192

57 Örnek Aşağıdaki ÖĞRENCİ ve DERSLER ilişkilerini göz önüne alalım. İki tablonun kartezyen çarpımı, her iki tablonun tüm satırlarının birbirleriyle eşlenmesi sonucunda elde edilir. Sonuç, mümkün olabilecek tüm eşleşmeleri kapsayacaktır. Söz konusu çarpım şu şekilde ifade edilir; Sorgulamayı şu şekilde gösterebiliriz; 57 / 192

58 Örnek ÖĞRENCİ ve DERSLER ilişkilerini göz önüne alalım. "İktisat" bölümünde okuyan ve tüm dersleri alan öğrencileri bulmak için; sorgusu tanımlanabilir. Bu sorgu işleminde yer alan ifadesi, ÖĞRENCİ ve DERSLER tablolarından elde edilebilecek tüm ikilileri ifade etmektedir. biçimindeki bir tanım ise, bu sonuç üzerinden bölümü "İktisat" olan satırları seçmektedir. Sorgulamayı şu şekilde gösterebiliriz; 58 / 192

59 Örnek "İktisat" bölümünde okuyan ve hem "Matematik" hem de "İstatistik" dersi alan öğrenciler listelenecektir. Ancak bunlara ilişkin olarak sadece ders ve öğrenci adı elde edilecektir. Amacımıza uygun sorgu şu şekilde olabilir; Sorgulamayı şu şekilde gösterebiliriz; 59 / 192

60 Örnek Aşağıdaki ilişkileri göz önüne alalım. Bankanın "Beşiktaş" şubesinde mevduat ve/veya kredi hesabı bulunan kişileri seçmek ve sadece isimlerini sunmak için şöyle bir ifade tanımlanabilir; Sorgulamayı şu şekilde gösterebiliriz; 60 / 192

61 Örnek Aşağıdaki ilişkileri göz önüne alarak, bankanın "Beşiktaş" şubesinde hem mevduat hem de kredi hesabı olan müşterileri bulmak için aşağıdaki sorgu düzenlenebilir; Sorgulamayı şu şekilde gösterebiliriz; 61 / 192

62 Örnek Aşağıdaki ilişkileri göz önüne alarak, bankanın "Ulus" şubesinde mevduatı olup kredisi olmayan müşterilerin isimlerini bulmak için şu şekilde bir işlem tanımlanır; Sorgulamayı şu şekilde gösterebiliriz; 62 / 192

63 Doğal Birleştirme (A,B) ve (B,C) niteliklerine sahip iki ayrı ilişkinin, (A,B,C) niteliklerine sahip tek bir ilişki haline dönüştürülmesine Doğal Birleştirme denir. Bu işlem işareti ile gösterilir. Örnek Aşağıdaki ilişkileri göz önüne alarak, kredi hesabı olan ve aynı ilçede oturan tüm müşterilerin isimlerini bulmak için şu şekilde bir ifade tanımlanır; Bu tanım sonucunda KREDİ ve MÜŞTERİ tablolarında yer alan adı ve ilçe nitelikleri karşılaştırılır ve birbirleriyle eşleşen kayıtlar birleştirilir. Sorgulamayı şu şekilde gösterebiliriz; 63 / 192

64 5.1.8 Bölme İkili ve birli; iki ayrı ilişkiyi karşılaştırarak, birli olan ilişkiye eş olan ikinci ilişkinin değerlerinden oluşan, yeni bir ilişki oluşturulabilir. Bu tür bir işlem bölme işlemidir ve (:) işareti ile gösterilir. Örnek Bir bankanın İSTANBUL ilindeki bütün şubelerinde mevduat hesabı olan müşterilerini öğrenmek istiyoruz. 64 / 192

65 Adım 1: Şube isimleri ŞUBE ilişkisi ile tanımlıdır. Önce İSTANBUL 'da yer alan tüm şubeleri elde edelim. Adım 2: Bu kez aşağıdaki MEVDUAT tablosunu göz önüne alalım. MEVDUAT tablosundan tüm müşterilerin adını ve şubesini elde etmek için aşağıda belirtilen işlem uygulanır; Adım 3: Bölme işlemi biçiminde tanımlanır. Bu işlem sonucunda aşağıda belirtilen sonuç elde edilir. Burada Adım 1'deki şube isimlerinin Adım 2'dekilerle karşılaştırıldığı ve eşleşen kayıtların elde edildiği anlaşılmaktadır. 65 / 192

66 66 / 192

67 SQL YAPISAL SORGULAMA DİLİ 6.1. Sorgulama İşlemleri SQL'de sorgulama işlemleri, SELECT deyimi yardımıyla yerine getirilir. SELECT deyimi temel olarak üç farklı işlemi yerine getirmek için kullanılır: SELECT Deyiminin Yapısı SELECT deyimi en basit biçimde şu şekilde ifade edilmektedir; SELECT [DISTINCT] { * sütun,...} FROM tablo; Tanım içinde bazı SQL anahtar kelimelerine yer verilmektedir. Bu anahtar kelimeler, SQL 'in kendi özel kelimeleridir ve aynen bu şekilde ifade edilmelidir. SELECT FROM DISTINCT SQL'in sorgulama deyimidir. Hangi tablonun sorgulanacağını ifade eder. Çift kayıtları önleyen anahtar kelimedir. Tanımdaki her bir işaretin veya farklı gösterimin hangi anlama geldiğini aşağıdaki tablodan görebilirsiniz. [ ] Kullanılması zorunlu olmayan SQL sözcükleri, bu işaretler arasında tanımlanır. Altı çizili ve italik olan bu ifadeler, kullanıcı tarafından verilen isimleri ifade etmektedir. 67 / 192

68 Bunlar SQL sözcüğü değildir. {.... } * Bu biçimde gösterilen ifadeler, birden fazla seçeneğin varlığını ve bu seçeneklerden birinin mutlaka seçilmesi gerektiğini ifade eder. Seçenekler birbirlerinden işareti ile ayrılmaktadır. Tek bir sütunu değil, tüm sütunları ifade eder SELECT Yazım Kuralları SQL deyimleri düzenlenirken bazı kuralları ve önerileri göz önünde tutmak gerekmektedir. Aksi takdirde sorgu hata verir ve çalışmaz. SQL sorgu yazım kurallarını aşağıdaki animasyonu inceleyerek görebilirsiniz Bir Tablonun Tüm Satırlarını Seçmek Bir tablonun tüm sütunlarını seçmek söz konusu ise, SELECT deyimi içinde sütun isimleri yerine; * işareti kullanılır. Örnek: BÖLÜM isimli tablonun sütunları şunlardır; Sütun adı Açıklama 68 / 192

69 Bölüm_no Bölüm numarasıdır. Bölüm_adı Bölümün adıdır. Konumu Bölümün bulunduğu yerin adıdır. Bu tablonun içerdiği tüm verileri görüntülemek istiyoruz. Bunun için aşağıda belirtilen SELECT deyimi düzenlenir: SELECT * FROM BÖLÜM; Bu deyimi, daha izlenebilir olmasını sağlamak için şu şekilde de yazabiliriz; SELECT * FROM BÖLÜM; Sorgunun nasıl çalıştığını aşağıda görebilirsiniz.! Sorguyu çalıştırmak için "Çalıştır" düğmesine tıklayınız Belirli Sütunların Seçilmesi 69 / 192

70 Tablo içinde belirlenen sütunların elde edilmesi söz konusu ise, SELECT deyimi içinde bu sütun isimlerine yer verilir. Sütun isimleri virgüllerle birbirlerinden ayrılır. Örnek: BÖLÜM tablosunun sadece bölüm numaralarını ve bölüm isimlerini içeren sütunlarını, yani BÖLÜM_NO ve BÖLÜM_ADI sütunlarını seçerek görüntülemek istiyoruz. Amacımıza uygun SELECT deyimi şu şekilde düzenlenebilir; SELECT BÖLÜM_NO, BÖLÜM_ADI FROM BÖLÜM; Sütun isimleri, tablo isimleriyle birlikte ifade edilebilir. Özellikle birden fazla tablo varsa bu yola başvurulur. Bunun için, tablo ismi her bir alanın başına eklenir ve araya bir nokta işareti konur. SELECT BÖLÜM.BÖLÜM_NO, BÖLÜM.BÖLÜM_ADI FROM BÖLÜM; Sorgunun nasıl çalıştığını aşağıda görebilirsiniz.! Sorguyu çalıştırmak için "Çalıştır" düğmesine tıklayınız. 70 / 192

71 Örnek PERSONEL tablosunun PERSONEL ve ÜCRET isimli iki sütunu listelenecektir. Ayrıca ÜCRET sütununun içerdiği değere; 1500 değeri eklenerek (yani ücretlere zam yapılıyor) ayrı bir sütun elde etmek istiyoruz. Amacımıza uygun SELECT deyimi aşağıda görüldüğü biçimde düzenlenebilir; SELECT PERSONEL_NO, ADI, ÜCRET+1500 FROM PERSONEL; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 71 / 192

72 72 / 192

73 Örnek Önceki kısımdaki örnekte 12*ÜCRET+500 biçiminde bir tanım yaparak, yıllık ücrete zam yapmıştık. Bu kez aylık ücrete 500 zam yapmak istiyoruz. Amacımıza uygun ifade şu şekilde olabilir: 12*(ÜCRET+500) Bu durumda, ücret sütununun içerdiği değere 500 eklenir ve bulunan değer 12 ile çarpılır. Amacımıza uygun SELECT deyimi şu şekilde olabilir; SELECT PERSONEL_NO, ADI, 12*(ÜCRET+500) FROM PERSONEL; 73 / 192

74 Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız Aritmetik İfadelerde NULL Değerlerin Kullanımı NULL Değer; var olmayan, atanamayan, bilinmeyen bir değer olarak kabul edilir. NULL Değer, bir sıfır ya da boşluk olarak da değerlendirilmez. Eğer bir sütun NULL değerler içeriyorsa, SELECT deyimi çalıştırıldığında bu değerler boş olarak görüntülenir. Örnek Eğer bir aritmetik ifade içinde NULL değer içeren bir sütun varsa, ifade ne olursa olsun o satırlarla ilgili sonuç da NULL olarak elde edilir. KOMİSYON isimli sütunun NULL değerler içerdiği bilinmektedir. O halde; SELECT ADI, ÜCRET,KOMİSYON, 12*ÜCRET+KOMİSYON FROM PERSONEL; 74 / 192

75 deyimi çalıştırıldığında, tanımlanan aritmetik ifade her satır için NULL değerler üretecektir. NULL ile yapılan hesaplamalara dikkat ediniz. Örneğin, 12*7000+NULL NULL olduğu unutulmamalıdır. Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 6.3. Sütunlar İçin Takma İsimler Kullanımı SELECT deyimi çalıştırıldığında, elde edilen sonuçlar yine sütunlar biçiminde olacaktır. Tablonun sütun isimleri, SELECT deyiminin çalışması sonucu elde edilen listenin sütun başlıkları olacaktır. Bunun yerine, çıktı sütunlarına istenilen başlıklar atanabilir. AS anahtar kelimesi bu amaçla kullanılır. Eğer takma isim birden fazla kelimeden oluşuyorsa tırnak işaretleri arasında belirtilebilir. 75 / 192

76 Örnek PERSONEL tablosunun PERSONEL sütunu için İSİM, ücret sütunu için AYLIK_ÜCRET takma isimlerini atayacağız. Ayrıca yıllık ücreti hesaplayarak bu sütuna da YILLIK_ÜCRET takma ismini vermek istiyoruz. Amacımıza uygun SELECT deyimi şu şekilde olabilir; SELECT ADI AS İSİM, ÜCRET AS AYLIK_ÜCRET, 12*ÜCRET+KOMİSYON AS YILLIK_ÜCRET FROM PERSONEL; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 76 / 192

77 Örnek PERSONEL adı ve görev bilgisini birleştirerek, iki sütun bilgisi arasına "-" işaretini yerleştirmek ve tek sütun biçiminde görüntülemek istiyoruz. SELECT deyimini ORACLE veri tabanı için şu şekilde düzenleyebiliriz; SELECT ADI '-' GÖREVİ AS ADI_GÖREVİ FROM PERSONEL; Aynı amaca SELECT deyimini MS Access veri tabanında şu şekilde kullanarak ulaşabiliriz; SELECT ADI & "-" & GÖREVİ AS ADI_GÖREVİ FROM PERSONEL; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 77 / 192

78 6.5. Aynı Değere Sahip Satırlar Bir SELECT deyimi çalıştırıldığında, aynı değerlere sahip satırların görüntülenmesi engellenemez. Örneğin, SELECT BÖLÜM_NO FROM PERSONEL; deyimi çalıştırıldığında, PERSONEL tablosunun BÖLÜM_NO sütunu içerikleri aynen listelenir. Bu sütunun içerdiği değerlerin çoğu birbirinin aynı olabilir. Eğer tekrarlı değerlerin sadece bir tanesinin elde edilmesi söz konusu ise, SELECT deyimi DISTINCT anahtar kelimesi ile birlikte kullanılır. SELECT DISTINCT BÖLÜM_NO FROM PERSONEL; 78 / 192

79 6.6. Verinin Sınırlandırılması Veri tabanından veriyi alma sırasında, satırlara bazı kısıtlamalar koyarak, tablonun tüm satırları yerine bir kısmı elde edilebilir. Tablonun belirli kısımlarını seçmek için WHERE sözcüğü kullanılır. Bu sözcük SELECT deyimi içinde aşağıda gösterildiği biçimde yer alır. WHERE sözcüğü içinde tanımlanan koşul; sütun içindeki değerleri, literal değerleri, aritmetik ifadeleri veya fonksiyonları içerebilir. 79 / 192

80 Örnek PERSONEL tablosu içinde yer alan PERSONEL arasında görevi MEMUR olanları seçerek listelemek istiyoruz. Amacımıza uygun SELECT deyimi şu şekilde düzenlenebilir; SELECT ADI,GÖREVİ,BÖLÜM_NO FROM PERSONEL WHERE GÖREVİ='MEMUR'; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 80 / 192

81 Diğer Karşılaştırma İşleçleri Şu ana kadar öğrendiğimiz karşılaştırma işleçleri dışında, bazı özel amaçlarla kullanılabilecek başka karşılaştırma işleçleri de bulunmaktadır. Aşağıdaki etkileşimli listeden bu işleçleri ve anlamlarını görebilirsiniz. 81 / 192

82 82 / 192

83 IN İşleci Sütun değerlerinin, bir listedeki değerler ile karşılaştırılması söz konusu ise, SELECT deyimi ile birlikte IN işleci kullanılır. Liste içindeki değerler birbirlerinden virgüllerle ayrılır. IN işleci herhangi bir veri türü için kullanılabilir. Karakter ve tarih veri türleri, tırnak işareti arasında yer almalıdır. IN( liste) Örnek Görevi MEMUR veya PAZARLAMACI olan tüm personeli listelemek istiyoruz. Bunun için IN işlecini kullanabiliriz. SELECT ADI,GÖREVİ FROM PERSONEL WHERE GÖREVİ IN('MEMUR', 'PAZARLAMACI'); Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 83 / 192

84 LIKE İşleci WHERE sözcüğü ile, bir sütunun değerini tam olarak değil, sadece bir kısmını belirterek arayabiliriz. Örneğin, adı "A" harfi ile başlayan personeli aramak gibi. Bu tür amaçlar için LIKE işleci kullanılabilir. Bu operatör ile birlikte, farklı amaçlar için (%) veya (_) işaretleri kullanılabilir. Bunlardan (%) işareti, bu işaretten önce ya da sonra gelen karakterler için arama yapılacağını belirtir. Örneğin, "A" harfi ile başlayanlar, 'A%' biçiminde; "S" harfi ile bitenler, 'S%' biçiminde ifade edilir. (_) işareti ise herhangi bir tek karakteri simgeler. LIKE ile birlikte kullanılan (%) işareti yerine, MS Access'de (*) işareti kullanılır. LIKE ( kural) Örnek Adı "A" harfi ile başlayan tüm personeli listelemek istiyoruz. Amacımıza uygun SELECT deyimi şu şekilde düzenlenebilir; SELECT ADI, GÖREVİ FROM PERSONEL WHERE ADI LIKE "A*"; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 84 / 192

85 IS NULL İşleci NULL değeri; var olmayan, atanamayan ve bilinmeyen bir değer olduğu için NULL ile ilgili karşılaştırmalarda (=) işleci kullanılamaz. Bunun yerine, sütun değerlerinin NULL olup olmadığını denetlemek için IS NULL işleci kullanılır. Eğer söz konusu tabloda NULL olmayan alanlar aranacak ise, bu kez IS NOT NULL işlecine başvurmak gerekecektir. Örnek PERSONEL tablosu içinde komisyon alan personeli listelemek istiyoruz. Komisyon almayan personelin bu sütunları NULL değerler içerdiği için, NULL olmayan değerleri seçerek amacımıza ulaşıyoruz. SELECT ADI, GÖREVİ,KOMİSYON FROM PERSONEL WHERE KOMİSYON IS NOT NULL; 85 / 192

86 Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız Mantıksal İşleçler Koşulları içeren karşılaştırma işlemlerinde mantıksal işleçlere de yer verilebilir. Bu işleçlerden; AND ve OR iki koşulu birlikte değerlendirmek üzere kullanılırlar. 86 / 192

87 SELECT ADI, GÖREVİ, ÜCRET FROM PERSONEL WHERE ÜCRET>=2000 AND GÖREVİ='MEMUR'; Eğer belirli bir personelin ücreti 2000'e eşit veya daha fazla ise; ÜCRET>=2000 koşulu doğru olacaktır. Yani TRUE değerini döndürür. Aynı personelin görevi memur ise yani, GÖREVİ='MEMUR' koşulu doğru ise, bu koşul da TRUE değerini döndürür. Böylece her iki koşul için TRUE değerlerine sahip olan personel isimleri listelenir. Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 87 / 192

88 88 / 192

89 89 / 192

90 İşleçlerin öncelik sırasını göz önüne alarak değerlendirme yapmamız gerekiyor. AND işleci OR dan daha öncelikli olduğu için, AND işlecini ilgilendiren koşulu öncelikle değerlendirmemiz gerekiyor. Ardından geriye kalan koşulu göz önüne alıyoruz. O halde aşağıda belirtildiği biçimde iki koşuldan söz edilebilir; 1) Görevi ŞEF olanlar ve ücreti 3000'den fazla olanlar 2) Görevi MEMUR olanlar Bu iki koşulu öncelik sıralarını göz önüne alarak birleştirirsek, şöyle bir seçme işlemiyle karşılaşırız; "Görevi ŞEF olanlar ve ücreti 3000'den fazla olanlar veya görevi MEMUR olanların seçimi" Örnek Görevi; ŞEF veya MEMUR olanlar ve ücreti 3000'den fazla olanların seçimini yapacak SELECT deyimini yazınız. SELECT ADI, GÖREVİ,ÜCRET FROM PERSONEL WHERE (GÖREVİ='MEMUR' OR GÖREVİ='ŞEF') AND ÜCRET>3000; Parantezlerin öncelik sırasına sahip olduğunu unutmayınız. 90 / 192

91 6.7. Sıralama İşlemleri Tabloların satırlarının, herhangi bir sütuna göre sıralı olarak elde edilmesi söz konusu ise, SELECT deyimi ORDER BY sözcükleri ile birlikte kullanılır. Sıralama sözcükleri de dahil olmak üzere SELECT deyimi şu şekilde tanımlanır; SELECT [DISTINCT] { * sütun,...} FROM tablo [WHERE koşul [ORDER BY {sütun, ifade} [ASC DESC] ]; Örnek Personeli işe giriş tarihine göre sıralamak istiyoruz. Bunun için SELECT deyimi şu şekilde düzenlenebilir; SELECT ADI, GÖREVİ, GİRİŞ_TARİHİ FROM PERSONEL ORDER BY GİRİŞ_TARİHİ; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 91 / 192

92 Örnek Bu kez personeli ücretine göre her bölüm içinde sıralamak istiyoruz. Bu durumda, bölümleri ve ücretleri birlikte sıralamız söz konusudur. SELECT deyimi şu şekilde düzenlenebilir; SELECT BÖLÜM_NO, ADI, ÜCRET FROM PERSONEL ORDER BY BÖLÜM_NO, ÜCRET DESC; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 92 / 192

93 93 / 192

94 SQL FONKSİYONLARININ KULLANIMI Tek satır fonksiyonları, tablonun bir satırı için uygulanır ve her satır için bir sonuç üretilir. Çoklu satır fonksiyonları ise, bir grup satıra uygulanır ve sonuç buna göre elde edilir. Burada anlatılan SQL standart ANSI SQL 'dir. Ancak bazı fonksiyonları tüm veri tabanlarının desteklemediğini göreceksiniz. ANSI SQL'in tüm özelliklerini barındıran ORACLE veri tabanı üzerinde çalıştığımızı varsayarak, fonksiyonları ona göre anlatacağız Tek Satır Fonksiyonları Tek satır fonksiyonları, tablonun her bir satırına uygulanan fonksiyonlardır. Tek satır fonksiyonlarının birçok türü bulunmaktadır. 94 / 192

95 Bu derste, aksi söylenmedikçe "fonksiyon" sözcüğü ile tek satır fonksiyonlarından söz edildiği anlaşılacaktır. Tek satır fonksiyonlarını aşağıda belirtildiği biçimde tanımlıyoruz; Karakter Fonksiyonları Karakter fonksiyonları; karakter verileri girdi olarak alan, karakter ya da sayısal değerler döndürebilen fonksiyonlardır. Bu fonksiyonların en çok kullanılanlarını şu şekilde sıralayabiliriz; 95 / 192

96 Bu eğitimde bahsedilen fonksiyonlar, ORACLE veri tabanı için verilmiştir. Bu fonksiyonlar, bazı veri tabanlarında farklılık gösterebilir. Örneğin; MS Access'de bu fonksiyonların bazıları farklı biçimdedir LOWER() ve UPPER() Fonksiyonları Bu fonksiyonlar, bir karakterin büyük harfe ya da küçük harfe dönüştürülmesi söz konusu olduğunda kullanılabilir. a. LOWER() Fonksiyonu LOWER() fonksiyonu, bir karakter katarının tüm harflerini küçük harflere dönüştürür. Örnek PERSONEL tablosunda personel isimleri büyük harflerle yazdırılmış olarak yer almaktadır. Bu isimleri küçük harflerle görüntülemek için SELECT deyimi şu şekilde düzenlenebilir; SELECT LCASE(ADI) AS İSİMLER FROM PERSONEL WHERE BÖLÜM_NO=10 OR GÖREVİ='PAZARLAMACI' Yukarıdaki SELECT deyimi MS Access veri tabanı için düzenlenmiştir. MS Access veri tabanında LOWER() fonksiyonu yerine LCASE() fonksiyonu kullanılmaktadır. Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 96 / 192

97 b. UPPER () Fonksiyonu UPPER() fonksiyonu, bir karakter katarındaki tüm harfleri büyük harflere çevirir LENGTH() Fonksiyonu Bir karakter katarın kaç karakterden oluştuğunu veya uzunluğunu bulmak amacıyla ORACLE veri tabanında LENGTH(); MS Access veri tabanında LEN() fonksiyonu kullanılır. Lenght() fonksiyonu, bir sayısal değer döndürür. Örnek Personel isimlerinin kaç karakterden oluştuğunu bulmak istiyoruz. Bu amaçla SELECT deyimi şu şekilde kullanılabilir; SELECT ADI,LEN(ADI) AS İSİMLER FROM PERSONEL; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 97 / 192

98 Sayısal Fonksiyonlar Sayısal veriler üzerinde çeşitli işlemleri gerçekleştirmek üzere özel fonksiyonlar bulunmaktadır. Sayısal fonksiyonlar, sayısal veriler alır ve yine sayısal sonuçlar üretirler. Bu fonksiyonların en çok kullanılanlarını şu şekilde sıralayabiliriz: Sayısal değeri yuvarlatmak amacıyla kullanılır. Sayısal değeri belirtilen ondalığa göre budamak (kesmek) amacıyla kullanılır. İki sayısal değerin, m ve n 'nin birbirine bölümünden elde edilen kalanı döndürür ROUND() Fonksiyonu ROUND() fonksiyonu, bir sütun değerinin veya bir ifadenin içerdiği sayısal değerin yuvarlatılması amacıyla kullanılır. Yuvarlatma işlemi, bir n ondalık hanesine göre yapılır. 98 / 192

99 Eğer n sıfır ise veya fonksiyon içinde belirtilmemiş ise, yuvarlatma sonunda elde edilecek tamsayının ondalık hanesi olmayacaktır. ROUND() fonksiyonu şu şekilde tanımlanır; Örnek PERSONEL tablosunun ÜCRET sütunundaki bilgiler aylık ücretleri kapsamaktadır. Görevi MEMUR olanlar için, aylık ücretleri 30'a bölerek günlük ücretleri bulmak ve sonucu 2 ondalık haneye göre yuvarlatmak istiyoruz. Amacımıza uygun SELECT deyimi şu şekilde olacaktır; SELECT ADI,ÜCRET AS AYLIK, ROUND(ÜCRET/30,2) AS GÜNLÜK FROM PERSONEL WHERE GÖREVİ='MEMUR'; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız TRUNC() Fonksiyonu TRUNC() fonksiyonu, bir sütunun içerdiği sayısal değerin ya da bir ifade sonunda elde edilen sayısal değerin, belirlenen haneye göre budanması (kesilmesi) amacıyla kullanılır. Bu fonksiyon, ORACLE veri tabanında geçerlidir. Fonksiyon şu şekilde tanımlanır; 99 / 192

100 Tanımlamadaki n sayısal değerin ondalık noktadan itibaren kesileceği konumu belirler. Sözü edilen n değeri sıfır ise veya belirtilmemiş ise, sayısal değerin ondalık noktadan sonrası budanır. Eğer n negatif ise, ondalık noktanın sonundan itibaren budama işlemi gerçekleşir. Örnek Personelin günlük ücretini hesaplayan ve sonucu yuvarlatmadan ondalık noktasından itibaren budayan SELECT deyimi aşağıda gösterildiği biçimde düzenlenebilir: SELECT ADI, ÜCRET AS AYLIK, TRUNC(ÜCRET/30) AS GÜNLÜK FROM PERSONEL MOD() Fonksiyonu İki sayısal değerin birbirine bölünmesi sonucunda elde edilen kalanı döndürmek için; MOD() fonksiyonu kullanılır. Bu fonksiyon şu şekilde tanımlanır; Burada m ve n birbirine bölünecek sayısal değerleri ifade etmektedir. Örnek Personel ücretlerinin komisyonlarına oranını hesaplayan ve kalanı bulan SELECT deyimi aşağıda belirtildiği biçimde olabilir; SELECT ADI, ÜCRET, KOMİSYON, MOD(ÜCRET,KOMİSYON) AS KALAN FROM PERSONEL; Tarih Fonksiyonları Tarih işlemlerinde kullanılan bazı tarih fonksiyonlarından söz edilebilir. Bu fonksiyonların en çok kullanılanlarından biri SYSDATE fonksiyonudur. Bu fonksiyonun herhangi bir argümanı bulunmamaktadır. O andaki tarih ve zaman bilgisini elde etmek amacıyla kullanılır. Diğer tarih fonksiyonlarını aşağıdaki tablo üzerinde görebilirsiniz; Fonksiyon İşlevi İki tarih arasında kaç aylık bir süre olduğunu saptar. Belirli bir tarih bilgisine n ay ilave edildiğinde hangi tarihe ulaşılacağını belirler. Haftanın belirli bir gününün, bir sonra hangi tarihe karşılık geldiğini bulmak için kullanılır. Belirlenen tarihe ilişkin ayın son gününü bulmak için kullanılır. 100 / 192

101 Örnek 1 Personelin işe giriş tarihinden bu zamana kadar olan süreyi ay olarak hesaplatmak istiyoruz. Amacımıza uygun SELECT deyimi şu şekilde olabilir; SELECT ADI, GİRİŞ_TAR, MONTHS_BETWEEN (SYSDATE,GİRİŞ_TAR) AS AY FROM PERSONEL; Örnek 2 İşe giriş süresi 200 aydan daha az olan personeli listelemek için şu şekilde bir sorgu yapılabilir; SELECT ADI,GİRİŞ_TAR, MONTHS_BETWEEN(SYSDATE,GİRİŞ_TAR) AS AY FROM PERSONEL WHERE MONTHS_BETWEEN(SYSDATE,GİRİŞ_TAR)<200; Örnek 3 Personelin işe giriş tarihinden 6 ay sonrasının hangi tarihe karşılık geldiğini hesaplayan bir sorgu şu şekilde oluşturulabilir; SELECT ADI, GİRİŞ_TAR, ADD_MONTHS (GİRİŞ_TAR,6) FROM PERSONEL; Örnek 4 Personelin işe giriş tarihlerini göz önüne alarak her bir tarihin ait olduğu ayın en son gününü belirleyen sorgu ifadesi şu şekilde olabilir; SELECT ADI, GİRİŞ_TAR, LAST_DAY(GİRİŞ_TAR) FROM PERSONEL; Dönüştürme Fonksiyonları Karakter, sayısal ve tarih verilerinin birbirlerine dönüştürülmesi ve özellikle biçimlendirme işlemlerinde çeşitli fonksiyonlardan yararlanılır. Bu fonksiyonları aşağıdaki tabloda görebilirsiniz; Fonksiyon İşlevi Tarih veya sayısal bilginin istenildiği gibi biçimlendirilerek karakter dizisine dönüştürülmesini sağlar. Bir karakter katarının içerdiği sayısal değerleri istenildiği gibi biçimlendirilerek sayısal veri türüne dönüştürmek için kullanılır. 101 / 192

102 Bir karakter katarının içerdiği tarih verilerini istenildiği gibi biçimlendirilerek tarih veri türüne dönüştürmek için kullanılır TO_CHAR Fonksiyonu Bu fonksiyon, tarih veya sayısal bilginin istenildiği gibi biçimlendirilerek karakter dizisine dönüştürülmesini sağlar. İki farklı uygulama alanı bulunmaktadır. Eğer tarih bilgisini karakter dizisine, yani bir katara dönüştürmek söz konusu ise; tanımı uygulanır. Eğer, bir sayısal değerin karakter katarına dönüştürülmesi isteniyorsa, tanımı kullanılır. Aşağıdaki canlandırmada TO_CHAR fonksiyonu; bir sayısal değeri biçimlendirerek karakter dizisine çeviriyor. Tarihle ilgili biçimlendirme ifadesi; bazı biçimlendirme elemanlarından ve kurallardan oluşur. Biçimlendirme ifadesi, tek tırnaklar arasında yazılır ve büyük küçük harf ayrımına karşı duyarlıdır. Tarih ile ilgili biçimlendirme ifadelerinde aşağıdaki tanımlardan yararlanılır; Eleman Anlamı YYYY Dört haneli yıl bilgisi. Örneğin; 2002 YEAR MM MONTH DD DY DAY Yılın rakamlarla değil, okunduğu gibi yazılması İki haneli ay bilgisi Ayın tam adı İki haneli gün bilgisi Haftanın günü. Üç karakterden oluşur. Günün tam adı Zamanla ilgili biçimlendirme ifadeleri ise aşağıdaki elemanlardan oluşabilir; Eleman AM,PM HH Anlamı Meridyen göstergesi Günün saati 102 / 192

103 MI SS Dakika bilgisi Saniye bilgisi Sayısal değerleri kullanan TO_CHAR() fonksiyonu, aşağıdaki tabloda yer alan biçimlendirme elemanlarını kullanabilir; Eleman Anlamı 9 0 $ L., Sayısal değeri ifade eder. Sıfır değerini ifade eder. Dolar işaretini yerleştirir. Yerel para işaretini yerleştirir. Ondalık hanesini gösterir. Binler hanesini gösterir. Örnek 1 Personelin işe giriş tarihlerini MM/YY biçiminde elde etmek için şu şekilde bir sorgu düzenlenebilir; SELECT ADI,TO_CHAR(GİRİŞ_TAR,'MM/YY') FROM PERSONEL; Örnek 2 Personel ücretlerini, binler hanesinden ayırarak elde etmek istiyoruz. Ayrıca ücret rakamının sol tarafına ($) işaretini yerleştireceğiz. Amacımıza uygun sorgu şu şekilde düzenlenebilir; SELECT ADI,TO_CHAR(ÜCRET,'$99,999') FROM PERSONEL; TO_NUMBER Fonksiyonu Karakter alan olarak tanımlanmış bir sütunun içerdiği sayısal değerleri, sayısal veri türüne dönüştürmek için TO_NUMBER() fonksiyonu kullanılır. Bu fonksiyon şu şekilde tanımlanır; 103 / 192

104 Aşağıdaki canlandırmada, TO_NUMBER() fonksiyonu bir karakter katarı girdisini sayısal veri türüne çeviriyor. Biçimlendirme ifadesi, TO_CHAR() fonksiyonunda olduğu gibi, aşağıda yer alan işaretler kullanılarak düzenlenir; Eleman Anlamı 9 0 $ L., Sayısal değeri ifade eder. Sıfır değerini ifade eder. Dolar işaretini yerleştirir. Yerel para işaretini yerleştirir. Ondalık hanesini gösterir. Binler hanesini gösterir. Örnek İşe giriş tarihlerine göre PERSONEL tablosunu sorgulayacağız. Arama ifadesi "Ocak 1, 1980" biçiminde olabilir. Bu ifadeyi SELECT deyiminin yorumlayabileceği bir biçime dönüştürmek gerekiyor. Amacımıza uygun SELECT deyimi şu şekilde olabilir; 104 / 192

105 SELECT ADI, GİRİŞ_TAR FROM PERSONEL WHERE GİRİŞ_TAR=TO_DATE('OCAK 1,1980',MONTH DD, YYYY'); 105 / 192

106 DECODE() Fonksiyonu Programlama dillerinde kullanılan CASE veya IF..THEN..ELSE denetim deyimlerinin SQL içinde tam karşılığı olabilecek bir deyim yoktur. Onun yerine, aynı işlevi yerine getirmek üzere DECODE() fonksiyonundan yararlanılır. Bu fonksiyon şu şekilde tanımlanır; 106 / 192

107 Örnek Personel arasında görevi; MEMUR olanlara %10, ŞEF olanlara %15, MÜDÜR olanlara ise, %20 zam yapılacaktır. Diğerlerinde ise herhangi bir değişiklik olmayacaktır. Bu işlemleri yerine getirmek üzere aşağıdaki SELECT deyimini düzenliyoruz; SELECT ADI,GÖREVİ,ÜCRET, DECODE(GÖREVİ,'MEMUR', ÜCRET*1.10, 'ŞEF',ÜCRET*1.15, 'MÜDÜR'ÜCRET*1.20, ÜCRET) AS "YENİ ÜCRETLER" FROM PERSONEL; 7.4. İç İçe Fonksiyonlar Bir SELECT deyimi içinde herhangi bir fonksiyonun nasıl kullanılabildiğini gördük. Bazı uygulamalarda, bir fonksiyonun içinde bir başka fonksiyona yer vermek gerekebilir. Örneğin, DECODE(TRUNC(ücret,0), ) biçiminde bir tanım yapılabilir. Burada DECODE() fonksiyonu içinde TRUNC() fonksiyonunun kullanıldığı görülüyor. İç içe fonksiyonlarda, önce iç taraftaki fonksiyon işlem görür, ardından elde edilen sonuç dıştaki fonksiyon tarafından kullanılır.! Adımların sonuçlarını görmek için ADIM 1, ADIM 2 ve ADIM 3 düğmelerine tıklayınız. 107 / 192

108 108 / 192

109 VERİLERİ GRUPLAYARAK ANALİZ ETMEK 8.1. Grup Fonksiyonları Tek satır fonksiyonları, tablonun bir satırına uygulanabiliyor ve buna karşılık gelen bir sonuç satırı elde edilebiliyordu. Bir grup satıra bir fonksiyonun uygulanması söz konusu ise; "çoklu satır" ya da bir başka deyişle "grup fonksiyonlarından" söz edilir. Grup fonksiyonları tablonun tüm satırlarına uygulanabildiği gibi, GROUP BY sözcüğü yardımıyla da alt gruplara uygulanabilir. Bir tablonun tüm satırları için grup fonksiyonu uygulanacak ise, SELECT deyimi aşağıda belirtildiği biçimde kullanılır; AVG()Fonksiyonu Herhangi bir sütunun içerdiği sayısal değerlerin aritmetik ortalamasını hesaplamak amacıyla; AVG() fonksiyonu kullanılır. Bu fonksiyonun uygulandığı sütunun veri türü sayısal olmalıdır. Örnek 1 Personel ücretlerini göz önüne alalım. Ücretlerin ortalamasını bulmak için şöyle bir yol izlenir; SELECT AVG (ÜCRET) AS ORTALAMA FROM PERSONEL; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 109 / 192

110 Örnek 2 Personel arasında görevi MEMUR olanların ortalama ücreti aşağıda gösterildiği biçimde hesaplanabilir; SELECT AVG (ÜCRET) AS ORTALAMA, FROM PERSONEL WHERE GÖREVİ='MEMUR'; SUM()Fonksiyonu Sütunların içerdiği sayısal değerleri toplamak amacıyla SUM() fonksiyonundan yararlanılır. Örnek Tüm personel ücretlerinin toplamını hesaplayan SELECT deyimi aşağıda gösterildiği biçimde oluşturulabilir; SELECT SUM(ÜCRET) AS TOPLAM FROM PERSONEL; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 110 / 192

111 SELECT STDEV(ÜCRET) AS STANDART_SAPMA FROM PERSONEL; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 111 / 192

112 SELECT VARP(ÜCRET) AS VARYANS FROM PERSONEL; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 112 / 192

113 8.1.5 MAX() ve MIN() Fonksiyonları Tablonun içerdiği değerlerin en büyük ve en küçük olanlarını bulmak için MIN() ve MAX() fonksiyonları kullanılır. Bu fonksiyonlar herhangi bir veri türüne uygulanabilir. Soldaki canlandırmalardan MAX() ve MIN() fonksiyonlarının çalışma şekillerini öğrenebilirsiniz. Örnek 1 Personel ücretlerini göz önüne alalım. En az ve en yüksek ücretin ne olduğunu öğrenemek istiyoruz. Amacımıza uygun SELECT deyimi aşağıda belirtildiği biçimde olabilir; SELECT MIN(ÜCRET) AS EN_AZ, MAX(ÜCRET) AS EN_FAZLA FROM PERSONEL; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız Örnek 2 İşe en son giren personelin işe giriş tarihini belirlemek için SELECT deyimi şu şekilde düzenlenebilir; SELECT MAX(GİRİŞ_TAR) FROM PERSONEL; Örnek 3 Personel isimlerini alfabetik olarak sıraladığımızda birinci sırada hangi ismin elde edileceğini şu şekilde öğrenebiliriz; 113 / 192

114 SELECT MIN(ADI) FROM PERSONEL; COUNT() Fonksiyonu Bir tablodaki kayıtların sayılması amacıyla COUNT() fonksiyonu kullanılır. Bu fonksiyon iki farklı biçimde kullanılabilir; COUNT(*) COUNT(sütun) COUNT(*) fonksiyonu, NULL değerleri de içeren tüm kayıtların sayılmasına neden olur. WHERE ile birlikte kullanılırsa, bu koşula uygun tüm kayıtların sayısının öğrenilmesini sağlar. İkinci biçim tercih edilirse, yani COUNT(sütun) biçiminde kullanılırsa, söz konusu sütunda NULL değerler içermeyen tüm kayıtların sayılmasına neden olur. Örnek 30 numaralı bölümde görev yapan kaç tane personel olduğunu bulmak istiyoruz. SELECT deyimi şu şekilde düzenlenir; SELECT COUNT(*) AS PERSONEL_SAYISI FROM PERSONEL; WHERE BOLUM_NO=30; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 114 / 192

115 8.2. Gruplama İşlemleri Bir tablonun satırları gruplara ayrılarak, grup fonksiyonlarının bunlara uygulanması sağlanabilir. Böyle bir amaçla SELECT deyimi içinde GROUP BY sözcüğünden yararlanılır. SELECT sütun, grup fonksiyonu(sütun) FROM tablo [WHERE koşul] [GROUP BY sütun] [ORDER BY sütun]; PERSONEL tablosunda bulunan personel ücretlerini; Bölüm_No'suna göre gruplayıp her bölümdeki toplam personel harcamalarını bulabiliriz. Bunun için; SELECT BÖLÜM_NO, SUM(ÜCRET) AS TOPLAM_ÜCRET FROM PERSONEL GROUP BY BÖLÜM_NO; Örnek PERSONEL tablosunu göz önüne alarak, her bölüm için personel sayısını, ücret toplamını ve ortalama ücretleri hesaplayan SELECT deyimi şu şekilde oluşturulabilir; SELECT BÖLÜM_NO,COUNT(ADI) AS SAYI, SUM(ÜCRET) AS TOPLAM, AVG(ÜCRET) AS ORTALAMA FROM PERSONEL GROUP BY BÖLÜM_NO; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 115 / 192

116 8.2.1 GROUP BY Kullanırken Dikkat Edilecek Noktalar SELECT deyimi içinde grup fonksiyonları, sütun isimleri ile birlikte kullanılabilirler. Ancak grup fonksiyonları; GROUP BY sözcüğü olmadan aşağıda gösterildiği biçimde, sütun isimleri ve grup fonksiyonu ile birlikte kullanılamaz. Örneğin; SELECT BÖLÜM_NO, COUNT(*) FROM PERSONEL; biçiminde bir tanım yapılamaz. Böyle bir amaca ancak aşağıda gösterildiği biçimde varılabilir; SELECT BÖLÜM_NO, COUNT(*) FROM PERSONEL GROUP BY BÖLÜM_NO; Bu son sorgu; her bir bölüm numarasını ve bu bölümlerdeki personel sayısını vermektedir. GROUP BY ile birlikte sütunların takma isimleri kullanılamaz. GROUP BY ie tanımlanan grupların, burada belirtilen sütunlara göre artan sırada olduğu varsayılır. Sırayı test yönde değiştirmek söz konusu ise ORDER BY kullanılır. GROUP BY içinde belirtilen sütun isimleri, grup fonksiyonu içinde yer almak zorunda değildir. Örneğin, her bölümün numarası ve ortalama ücretlerini birlikte elde etmek için SELECT deyimi şu şekilde oluşturulabilir; 116 / 192

117 SELECT BÖLÜM_NO, AVG(ÜCRET) FROM PERSONEL GROUP BY BÖLÜM_NO; GROUP BY içinde belirtilen sütun isimleri, SELECT listesinde yer almak zorunda değildir. Örneğin; bölüm numarasına göre oluşturulan grupta, yani her bölümün ücret ortalamalarının görüntülenmesi için şöyle bir tanım yapılabilir; SELECT AVG(ÜCRET) FROM PERSONEL GROUP BY BÖLÜM_NO; Birden Fazla Sütuna Göre Gruplama GROUP BY ile bir sütuna göre gruplama yapılabildiği gibi, birden fazla sütun için de gruplama yapılabilir. Örnek Her bölümü ve bölüm içindeki görevlere göre personeli gruplayarak bu bazda ücret toplamları elde etmek amacıyla SELECT deyimi şu şekilde düzenlenebilir; SELECT BÖLÜM_NO,GÖREVİ, SUM (ÜCRET) AS TOPLAM_ÜCRET FROM PERSONEL GROUP BY BÖLÜM_NO,GÖREVİ; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 117 / 192

118 118 / 192

119 Örnek 1 PERSONEL tablosunu göz önüne alalım. Ortalama ücreti 3500'den daha fazla olan bölümlerin bölüm numarası ve o bölümdeki en yüksek ücret miktarı görüntülenecektir. Amacımıza uygun SELECT deyimi şu şekilde olabilir; SELECT BÖLÜM_NO, MAX(ÜCRET) AS EN_ÇOK FROM PERSONEL GROUP BY BÖLÜM_NO HAVING AVG(ÜCRET)>3500; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız Örnek 2 PAZARLAMA bölümü dışında çalışan personeli görevlerine göre gruplandırılarak ücretleri toplanacak ve toplam ücreti 5000 den fazla olanlar seçilecektir. Sonuçlar en düşük ücret toplamından büyüğe doğru sıralı olacaktır. Amacımıza uygun SELECT deyimi şu şekilde düzenlenebilir; SELECT GÖREVİ, SUM(ÜCRET) AS TOPLAM FROM PERSONEL WHERE GÖREVİ <>'PAZARLAMACI' GROUP BY GÖREVİ HAVING SUM(ÜCRET)>5000 ORDER BY SUM(ÜCRET); Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 119 / 192

120 120 / 192

121 ÇOKLU TABLOLAR 9.1. Çoklu Tabloların Kullanımı Bazı uygulamalarda veri birden fazla tablo üzerinde yer alabilir. Bu tablo verileri birleştirilerek sonuçlar elde edilir. Bu bölümde PERSONEL ve BÖLÜM tablolarını bu amaçla kullanacağız. PERSONEL_NO sütunu PERSONEL tablosu üzerindedir. BÖLÜM_NO sütunu hem PERSONEL hem de BÖLÜM tablosu üzerinde vardır. KONUM sütunu BÖLÜM tablosundadır. Bu iki tablo arasında ortak olan BÖLÜM_NO sütunları aracılığıyla bir ilişki kurulur ve her iki tablo verilerinden oluşan bir sonuç elde edilir. 121 / 192

122 Tanımdan görüldüğü gibi, iki tabloyu birleştirmek için bir birleştirme koşulunun düzenlenmesi gerekiyor. Bu koşul, her iki tablonun hangi sütunları kullanılarak birleştirileceğini belirler. Sütun isimlerinin ön tarafına, tablo isimlerinin yazılması yararlı olacaktır. Özellikle her iki tablodaki sütun isimleri aynı ise, söz konusu sütunların hangi tablodan geldiğini belirtmek mümkün olamayacak ve bu durumda SELECT deyimi çalışmayacaktır. Sadece iki tablo değil n sayıda tablo da birleştirilebilir. Ancak bu durumda en az (n-1) birleştirme koşulu tanımlanmalıdır. Yani, dört adet tabloyu birleştirmekiçin en az üç birleştirme koşulu olmalıdır. Bu koşul, birleştirilmiş birincil anahtara sahip tablolar için geçerli olmayacaktır Kartezyen Çarpım İki tablo arasında birleştirme koşulu tanımlanmamış ise, sonuç olarak bir kartezyen çarpım elde edilir. Bunun dışında, birleştirme koşulu geçersiz ise ve birinci tablodaki tüm satırlar ikinci tablodaki tüm satırlarla birleştirilemiyorsa, yine kartezyen çarpımdan söz edilir. Örnek PERSONEL ve BÖLÜM tablolarını göz önüne alalım. Bu iki tabloyu aşağıda görüldüğü biçimde birleştirmek istiyoruz. SELECT PERSONEL_NO, ADI,BÖLÜM_ADI FROM PERSONEL, BÖLÜM Bu sorgu çalıştırıldığında, PERSONEL ve BÖLÜM tabloları birleştirilerek bir sonuç elde edilir. Ancak, herhangi bir birleştirme koşulu tanımlanmadığı için, her iki tablodaki satırların sayısının birbirleriyle çarpımı kadar satırdan oluşan bir sonuç elde edilir. Örneğin; PERSONEL tablosunda 20, BÖLÜM tablosunda ise 5 satır varsa, bu şekildeki bir sorgu sonucunda 20x5=100 satordan oluşan bir sonuç bulunur. Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 122 / 192

123 123 / 192

124 Eşiti Olan Birleştirme Bu tür birleştirmelere "basit birleştirme", "eşiti olan birleştirme" ya da "iç birleştirme" isimleri verilmektedir. Bu birleştirme aşağıda belirtildiği biçimde gerçekleştirilir; Bir personelin çalıştığı bölümün adını elde etmek için; PERSONEL tablosu, BÖLÜM tablosunun BÖLÜM_NO isimli sütununun içeriği ile karşılaştırılır. Yani her iki tablo arasındaki BÖLÜM_NO sütununun içerdiği değerlerin eşit olması durumunda birleştirme gerçekleştirilmiş olur. Bu deyim şu şekilde yorumlanacaktır; PERSONEL tablosundan alınan sütunlar PERSONEL ön ekiyle tanımlanmıştır. Örneğin, PERSONEL.PERSONEL_NO gibi. Bu durumda PERSONEL tablosundan, PERSONEL_NO, PERSONEL_ADI,BÖLÜM_NO; BÖLÜM tablosundan ise, BÖLÜM_NO ve KONUM isimli sütunlarının alınacağı anlaşılmaktadır. FROM sözcüğü ardından yazılan tablo isimleri, bu birleşme işlemine tabi tutulacak tabloları belirlemektedir. WHERE deyimi içinde tanımlanan koşul, PERSONEL tablosunun BÖLÜM_NO sütunu içeriği ile BÖLÜM tablosunun BÖLÜM_NO sütunu içeriğinin karşılaştırılmasına neden olacaktır. Bu koşul gerçekleştiği takdirde, SELECT listesinde belirlenen sütunlar görüntülenecektir. 124 / 192

125 Tablolar için Takma İsimlerin Kullanımı Birleştirme işlemlerinde, birden fazla tablo kullanıldığı için, sütun isimleri ilgili tablo isimleriyle birlikte kullanılıyordu. Özellikle uzun tablo isimlerinde bu tür sorguları ifade etmek zorluklar yaratabilir. Gerçek tablo isimleri yerine daha kısa tablo isimleri vermek mümkündür. Bu tür bir tanıma FROM sözcüğü içinde yer verilir. Tablonun gerçek isminin hemen ardından bir boşluk bırakılarak takma isim tanımlanır. SELECT deyiminin herhangi bir yerinde, gerçek tablo ismi yerine bu takma isim kullanılabilir. Örnek Aşağıdaki SELECT deyimini göz önüne alalım; SELECT PERSONEL.PERSONEL_NO,PERSONEL.ADI, PERSONEL.BÖLÜM_NO,BÖLÜM.BÖLÜM_ADI,BÖLÜM.KONUM FROM PERSONEL,BÖLÜM WHERE PERSONEL.BÖLÜM_NO=BÖLÜM.BÖLÜM_NO; Sorgu içinde PERSONEL tablosuna P; BÖLÜM tablosuna ise, B takma ismini vererek aynı sorguyu aşağıda gösterildiği biçimde düzenleyebiliriz; SELECT P.PERSONEL_NO,P.ADI, P.BÖLÜM_NO,B.BÖLÜM_ADI,B.KONUM FROM PERSONEL P,BÖLÜM B WHERE P.BÖLÜM_NO=B.BÖLÜM_NO; 125 / 192

126 AND İşlecinin Kullanımı Birleştirme koşuluna ek olarak, WHERE sözcüğü içinde başka koşullara da yer verilebilir. Örneğin, BEGÜM isimli personelin; personel numarası, adı, bölüm numarası ve bölümünün konumunu listelemek için şöyle bir sorgu tanımlanabilir: SELECT P.PERSONEL_NO,P.ADI,B.BÖLÜM_ADI,B.KONUM FROM PERSONEL P, BÖLÜM B WHERE P.BÖLÜM_NO=B.BÖLÜM_NO AND P.ADI='BEGÜM'; Dış Birleştirme Eşiti olan birleştirmelerde; bir tablonun bir sütununun içerdiği değerler, diğer tablonun ilgili sütununda eşleştiriliyor ve ancak eşleşebilen değerler birleştiriliyordu. Doğal olarak, eşleşemeyen satırlar birleştirilemeyecek ve sonuca dahil edilemeyecektir. Eğer bu şekilde eşleşemeyen kayıtların da sonuca dahil edilmesi isteniliyorsa; dış birleştirme yönteminin uygulanması gerekecektir. Örneğin, PERSONEL ve BÖLÜM tablolarının aşağıda gösterildiği biçimde olduğunu varsayalım. 126 / 192

127 Bu iki tablo incelendiğinde, BÖLÜM tablosunda yer alan REKLAM bölümünde herhangi bir personelin çalışmadığı görülecektir. İki tablo; eşiti olan birleştirme yöntemine göre birleştirilirse, sonuç içinde bu bölüm adı görüntülenmeyecektir. Böyle durumlarda eşleşmeyen kayıtları da birleştirme işlemine katmak için; dış birleştirme yöntemi uygulanır Dış Birleştirme Nasıl Tanımlanır? Dış birleştirmeler, eşleşmeyen kayıtlar hangi tabloda yer alıyorsa ona bağlı olarak iki farklı biçimde düzenlenebilir: SELECT tablo1.sütun1, tablo2.sütun2 FROM tablo1, tablo2 WHERE tablo1.sütun1(+)=tablo2.sütun2 veya SELECT tablo1.sütun1, tablo2.sütun2 FROM tablo1, tablo2 WHERE tablo1.sütun1=tablo2.sütun2(+) Tanımda (+) işaretlerinin yer alması, dış birleşme olayının olduğunu göstermektedir. Bu işaret eksik bilginin olduğu tarafa yerleştirilir. Örnek PERSONEL ve BÖLÜM tablolarını göz önüne alalım. BÖLÜM tablosunda yer alan, ancak PERSONEL tablosunda yer almayan ve REKLAM bilgisini içeren bir satır bulunmaktadır. Bu iki tabloyu, karşılaşmayan kayıtları da görüntüleyecek biçimde birleştirmek ve sonucu listelemek istiyoruz. Bunun için aşağıdaki yol izlenir: SELECT P.ADI,P.BÖLÜM_NO,B.BÖLÜM_ADI FROM PERSONEL P,BÖLÜM B WHERE P.BÖLÜM_NO(+)=B.BÖLÜM_NO; 127 / 192

128 Bilgi eksikliği PERSONEL tablosundadır çünkü, BÖLÜM tablosunda yer alan REKLAM satırı, PERSONEL tablosunda yoktur. O halde (+) işareti, PERSONEL tablosunun ilgili sütunu yanında tanımlanmıştır. Bu işlemin aynısını MS Jet SQL'de gerçekleştirmek için biraz daha farklı tanım yapmak gerekiyor. Bu tür bir dış birleşme için LEFT JOIN ON sözcükleri kullanılır. SELECT P.ADI, B.BÖLÜM_ADI FROM BÖLÜM B LEFT JOIN PERSONEL P ON B.BÖLÜM_NO = P.BÖLÜM_NO; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız Kendine Birleştirme Bazı uygulamalarda birleştirme işlemi, iki ayrı tablo yerine tek bir tablodaki veriler kullanılarak yapılır. Örneğin, PERSONEL tablosunu aşağıda görüldüğü gibi, iki farklı tablo biçiminde düşünebiliriz. Böylece bu iki tabloyu birleştirerek çeşitli sonuçlar elde etmek imkânımız vardır. 128 / 192

129 Örnek PERSONEL tablosunun YÖNETİCİSİ başlıklı sütunu; her bir personelin yöneticisinin, personel numarasını içermektedir. Hangi yöneticilerin hangi personel ile çalıştığını belirlemek istiyoruz. Bu amaçla SELECT deyimi şu şekilde düzenlenebilir: SELECT P.PERSONEL_NO AS NO, P.ADI AS PERSONEL, Y.ADI AS YÖNETİCİSİ FROM PERSONEL P, PERSONEL Y WHERE Y.PERSONEL_NO=P.YÖNETİCİSİ; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 129 / 192

130 130 / 192

131 SELECT ADI, GÖREVİ FROM PERSONEL WHERE ADI LIKE 'A%' UNION SELECT ADI, GÖREVİ FROM PERSONEL WHERE GÖREVİ LIKE 'M%'; Bu deyim çalıştırıldığında, birbirinin aynı olan yani, çift kayıtlar görüntülenmez. Eğer çift kayıtların da görüntülenmesi isteniliyorsa; UNION ALL işleci kullanılır. 131 / 192

132 132 / 192

133 KARMAŞIK SORGULAR Alt Sorgu Kavramı Şu ana kadar ele alarak incelediğimiz tüm sorgular; önceki bölümde öğrendiğimiz işleçler yardımıyla yapılan birleştirmeler dışında, tek bir ana sorgudan oluşuyordu. Dolayısıyla, sorgu içinde sadece bir SELECT deyimine yer veriliyordu. Uygulamada, bir sorgudan elde edilen sonuç, bir diğer sorguyu ilgilendirebilir. Bu gibi durumlarda alt sorgular ya da bir başka deyişle iç sorgular kullanılır. Şu soruyu göz önüne alalım: "Hangi personelin ücreti, "HALİT" isimli personelin ücretinden daha fazladır?" Bu problemi iki farklı sorguya ayırmak mümkündür: Sorgu 1: "HALİT" isimli personelin aylık ücreti nedir? Sorgu2: Hangi personelin ücreti, "HALİT" isimli personelin ücretinden daha fazladır? Yukarıdaki iki sorguyu aşağıdaki şekilde analiz ederek bir sorgu biçimine döndürebiliriz. Alt sorgular bu amaçla tanımlanır Alt Sorgunun Tanımlanması Bir alt sorgu aşağıda gösterildiği biçimde tanımlanır: SELECT liste FROM tablo WHERE ifade işleç (SELECT liste FROM tablo); Tanımda görüldüğü gibi, iki SELECT deyimi ile bir farklı sorgu tanımlanmıştır. Bu iki sorgu birbirine WHERE koşul sözcüğü içinde bağlanmıştır. Bir alt sorgu, aşağıdaki sözcükler içinde kullanılabilir: WHERE 133 / 192

134 HAVING FROM Örnek Personel numarası "110" olan personelin ücretinden daha fazla ücret alan personel isimlerini listelemek istiyoruz. Amacımıza uygun SELECT deyimi şu şekilde olabilir: SELECT ADI,ÜCRET FROM PERSONEL WHERE ÜCRET > ( SELECT ÜCRET FROM PERSONEL WHERE PERSONEL_NO=110 ); Bu sorgu çalıştırıldığında, şöyle bir yol izlenecektir: a. Alt sorgu Personel numarası "110" olan personelin ücretini bulacaktır. Bu ücret; "5000" dir. b. Elde edilen ücret bilgisi ana sorgudaki WHERE sözcüğü içinde yerine konulacaktır. Yani ana sorgunun WHERE koşulu şu şekli almış olacaktır: WHERE ÜCRET > 5000 c. Ana sorgu bu şekilde çalışır. Yani ücreti "5000" den fazla olan personelin listesi görüntülenir. Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 134 / 192

135 Alt Sorgu Düzenleme Kuralları Alt sorgular düzenlenirken aşağıdaki kurallara uymak gerekmektedir: Bu sorgu çalıştırıldığında, alt sorgu sonucunda "140" numaralı personelin görevi, yani "ŞEF" değeri elde edilir. Ana sorgu ise görevi "ŞEF" olanları sorgular. Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 135 / 192

136 Örnek Personel numarası "155" olan personelle aynı göreve sahip olan ve "350" numaralı personelin ücretinden daha fazla ücret alan personeli listelemek istiyoruz. SELECT ADI,GÖREVİ,ÜCRET FROM PERSONEL WHERE GÖREVİ = (SELECT GÖREVİ FROM PERSONEL WHERE PERSONEL_NO=155) AND ÜCRET> (SELECT ÜCRET FROM PERSONEL WHERE PERSONEL_NO=350); Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 136 / 192

137 Grup Fonksiyonlarının Kullanımı Grup fonksiyonları sadece bir değer döndürdüğü için, bu tür fonksiyonlar tek satır alt sorgularında kullanılabilir. Örnek Personel arasında en az ücret alanları listelemek istiyoruz. Bu sorgu doğal olarak alt sorgularla yapılabilir. Önce alt sorgu içinde en az ücret alan personel belirlenecek, bulunan değer ana sorgu içinde bu ücrete göre seçilecektir. Amacımıza uygun SELECT deyimi şu şekilde olabilir: SELECT ADI,ÜCRET FROM PERSONEL WHERE ÜCRET = (SELECT MIN(ÜCRET) FROM PERSONEL); Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 137 / 192

138 HAVING ile Grup Koşullarının Tanımlanması Ana sorgu grup fonksiyonu içeriyorsa, doğal olarak grup koşullarının tanımlanması gerekebilecektir. Yani HAVING sözcüğü de kullanılacaktır. Bu durumda SELECT deyimi şu şekli alacaktır: SELECT liste FROM tablo GROUP BY sütun HAVING fonksiyon işleç (SELECT fonksiyon FROM tablo); 138 / 192

139 Örnek En düşük ücreti "20" numaralı bölümün en düşük ücretinden daha büyük olan bölümleri listelemek istiyoruz. Amacımıza ulaşmak için şu şekilde bir akıl yürüteceğiz: : a) "20" numaralı bölümün en az ücret alan personeli belirlenecektir. b) Bulunan bu değer, diğer tüm bölümlerin en düşük ücretleriyle karşılaştırılacak c) Eğer bu değer bölümlerin en düşük ücretlerinden daha küçük ise ilgili bölüm listelenecektir. Belirtilen bu adımlara uygun SELECT deyimi şu şekilde olabilir: SELECT BÖLÜM_NO,MIN(ÜCRET) AS ENAZ_ÜCRET FROM PERSONEL GROUP BY BÖLÜM_NO HAVING MIN(ÜCRET) > (SELECT MIN(ÜCRET) FROM PERSONEL WHERE BÖLÜM_NO=20); Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 139 / 192

140 Bu sorgu çalıştırıldığında, amaca ulaşılamayacaktır. Çünkü alt sorgu gruplandırılmıştır ve doğal olarak grup fonksiyonu herbir grup için bir değer üretir. Yani birden fazla satır listelenecektir. Ancak ana sorgunun WHERE sözcüğü içinde kullanılan (=) işleci bir tek satır işlecidir. Alt sorgudan sadece bir değer beklemektedir. Bu durum gerçekleşmediği için SELECT deyimi bir hata mesajı görüntüleyerek işlemi sonlandırır. Aynı sorgu şu şekilde düzenlenseydi hata durumu ortaya çıkmayacaktı: SELECT PERSONEL_NO,ADI FROM PERSONEL WHERE ÜCRET > (SELECT MIN(ÜCRET) FROM PERSONEL); 140 / 192

141 Yukarıda sayılan işleçlerden hiçbiri NOT işleci ile birlikte kullanılamaz! 141 / 192

142 biçimindeki bir sorgu, ÜCRET sütunu içeriğinin, IN işleci ile belirlenen listedeki değerlerle karşılaştırılmalarını sağlıyordu. Bu tür bir işlem, alt sorgularda da gerçekleştirilebilir. Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 142 / 192

143 143 / 192

144 Örnek En düşük ücretli MEMUR dan daha fazla maaşı olan personeli listelemek için aşağıda belirtilen yol izlenebilir: SELECT ADI,ÜCRET,GÖREVİ FROM PERSONEL WHERE ÜCRET >ANY( SELECT ÜCRET FROM PERSONEL WHERE GÖREVİ='MEMUR'); 144 / 192

145 145 / 192

146 Örnek "SEZİN" isimli personelin görevi ve ücretiyle aynı olan personeli listelemek istiyoruz. Sorgu şu şekilde düzenlenebilir: SELECT BÖLÜM_NO, ADI,ÜCRET FROM PERSONEL WHERE (GÖREVİ,ÜCRET) IN (SELECT GÖREVİ,ÜCRET FROM PERSONEL WHERE ADI='SEZİN'); Ancak bu sorguya "SEZİN" in kendi bilgileri de dahil edilmiştir. Dahil edilmesi istenmiyorsa şu şekilde bir tanım yapılır: SELECT BÖLÜM_NO, ADI,ÜCRET FROM PERSONEL WHERE (GÖREVİ,ÜCRET) IN (SELECT GÖREVİ,ÜCRET FROM PERSONEL WHERE ADI='SEZİN') AND ADI<>'SEZİN'; FROM Sözcüğü İçinde Alt Sorgu Tanımlama Normal olarak bir SELECT deyiminde kullanılabilecek tablolar, yani veri kaynağı FROM sözcüğü içinde tanımlanır. Ancak gerektiğinde bir alt sorgunun sonuçları da tıpkı bir tablo gibi değerlendirilerek, FROM içinde bu sorgu yer alabilir. 146 / 192

147 Örnek Bir bölümün ortalama ücretinden daha fazla ücret alan tüm personelin ortalama ücretlerini listelemek istiyoruz. Amacımıza uygun sorgulama şu şekilde olabilir: SELECT P.BÖLÜM_NO, P.ADI,P.ÜCRET, S.MAAŞ FROM PERSONEL P,(SELECT BÖLÜM_NO,AVG(ÜCRET) AS MAAŞ FROM PERSONEL GROUP BY BÖLÜM_NO) S WHERE P.BÖLÜM_NO=S.BÖLÜM_NO AND P.ÜCRET>S.MAAŞ; Burada, PERSONEL tablosu yanısıra bir alt sorgu tanımlanmaktadır. Bu sorgu tıpkı bir tablo gibi düşünülerek ona S adı verilmiştir. Bu sorgu bölümlerin ücret ortalamalarını üretmektedir. Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 147 / 192

148 148 / 192

149 DML (Data Manipulation Language) Tabloya Satır Ekleme Bir tabloya yeni bir satır eklemek gerektiğinde INSERT INTO deyimi kullanılır. Bu deyim aşağıda gösterildiği biçimde tanımlanıyor: INSERT INTO tablo (sütunlar) VALUES (değerler); tablo Kayıt ekleme işleminin yapılacağı tablonun adı. sütunlar Eklenecek satırların sütun isimleri. değerler Herbir sütuna girilecek yeni değerler. Bu deyim her çalıştığında tabloya yeni bir satır eklenir. INSERT INTO deyimi içinde sütun isimlerini belirlemek zorunlu değildir. Ancak, bu durumda sütunların tablo tanımındaki varsayılan sırası kabul edilir. 149 / 192

150 Örnek BÖLÜM tablosunun aşağıda görüldüğü biçimde 6 adet kayıta sahip olduğunu varsayalım: Yukarıda olduğu gibi, herhangi bir tablonun satırlarını nasıl görüntüleyeceğimizi geçen derslerden biliyoruz. Bu işlem aşağıda belirtildiği biçimde SELECT sorgulama deyimi ile yapılır: SELECT * FROM BÖLÜM; Bu tabloya yeni bir bölüm eklemek istiyoruz. Eklenecek yeni bölüm ile ilgili veriler şu şekildedir: Bölümün numarası Bölümün adı Bölümün konumu : 70 : EĞİTİM : KADIKÖY Söz konusu bir kayıtı eklemek için aşağıdaki deyim kullanılır: INSERT INTO BÖLÜM(BÖLÜM_NO,BÖLÜM_ADI,KONUM) VALUES(70,'EĞİTİM','KADIKÖY'); Bu şekilde kayıt ekleme işlemi gerçekleştirildikten sonra, BÖLÜM tablosu yeniden görüntülenirse, tablonun en sonuna söz konusu kayıtın eklendiği görülür. 150 / 192

151 Örnek BÖLÜM tablosuna yeni bir kayıt ekleyeceğiz. Eklenecek satırda KONUM sütununa NULL değerini atamak için INSERT INTO deyimi aşağıda belirtilen biçimlerde kullanılabilir. a. INSERT INTO BÖLÜM(BÖLÜM_NO,BÖLÜM_ADI) VALUES(80,'BİLGİ İŞLEM'); b. INSERT INTO BÖLÜM VALUES(80,'BİLGİ İŞLEM',NULL); Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 151 / 192

152 Bir Diğer Tablodan Satır Kopyalama INSERT INTO deyimi ile, tabloya belirlenen değerleri içeren bir satır eklenebildiği gibi, bir başka tablodan okunan satırlar da eklenebilir. Diğer tablodan satırları okumak için SELECT sorgulama deyimi kullanılır. Bu durumda VALUES sözcüğü kullanılmaz. Bir tablodan satır okuyarak, bir diğer tabloya eklemek için aşağıda belirtilen tanım kullanılır: 152 / 192

153 INSERT INTO tablo (sütunlar) alt sorgu; Alt sorgudan elde edilecek sütunlar ile INSERT INTO içinde tanımlanan sütunlar karşılıklı eşleşecektir. O nedenle, aynı veri türüne sahip olmalarına dikkat etmek gerekiyor. Bir tablodan bir başka tabloya kayıt ekleme Örnek YÖNETİCİLER isimli bir tabloya, PERSONEL tablosunda yer alan ve görevi "MÜDÜR" veya "ŞEF" olanları seçerek eklemek istiyoruz. Amacımıza uygun deyimler şu şekilde olacaktır: INSERT INTO YÖNETİCİLER(PERSONEL_NO,ADI, GÖREVİ,ÜCRET,BÖLÜM_NO) SELECT PERSONEL_NO,ADI, GÖREVİ,ÜCRET,BÖLÜM_NO FROM PERSONEL WHERE GÖREVİ='MÜDÜR' OR GÖREVİ='ŞEF'; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 153 / 192

154 11.3 Tablodaki verileri güncelleme Bir tablonun içerdiği değerler gerektiğinde değiştirilecektir. Bu amaçla UPDATE deyiminden yararlanılır. Bu deyim şu şekilde tanımlanır: UPDATE tablo SET sütun1=değer1, sütun2=değer2, [WHERE koşul]; 154 / 192

155 Verilerin güncelleştirilmesi için WHERE deyimi ile bir koşul tanımlanabilir. Bu tanımın yapılmadığı durumlarda, söz konusu tablonun tüm satırları güncelleştirilmiş olacaktır. Örnek Personel numarası "300" olan personelin ücretini "2500" olarak değiştirmek istiyoruz. Bunu sağlamak için şöyle bir yol izlenir: UPDATE PERSONEL SET ÜCRET=2500 WHERE PERSONEL_NO=300; Yukarıdaki sorgulamanın sonucunu görmek için linke tıklayınız 155 / 192

156 Örnek Numarası "350" olan personel ile aynı göreve sahip tüm personelin bölüm numarasını, "90" olarak değiştirmek istiyoruz. Amacımıza şu şekilde ulaşabiliriiz: UPDATE PERSONEL SET BÖLÜM_NO=90 WHERE GÖREVİ=(SELECT GÖREVİ FROM PERSONEL WHERE PERSONEL_NO=350); PERSONEL ve BÖLÜM tabloları üzerinde bütünlük sınırlamaları tanımlandığını varsayalım. PERSONEL ve BÖLÜM tablolarının birincil anahtarları bulunmaktadır. BÖLÜM tablosunun birincil anahtarı BÖLÜM_NO'dur. Aynı alan PERSONEL tablosunda dış anahtar olarak yer almaktadır. Bu iki tablonun BÖLÜM_NO alanlarına göre iki tablo ilişkilendirilmiştir. 156 / 192

157 Sayılan bu sınırlamalar nedeniyle, PERSONEL tablosunun BÖLÜM_NO sütununda yer alacak tüm değerlerin BÖLÜM tablosunun BÖLÜM_NO tablosundaki değerlerle aynı olması gerekmektedir. Yukarıdaki UPDATE deyimi ise sadece PERSONEL tablosu üzerinde bu alanı değiştirmeye çalışmaktadır. Sınırlama tanımları yüzünden bu işlem yerine getirilmeyerek kullanıcı uyarılır Tablodan Satır Silme Tabloda yer alan bir veya daha fazla sayıda satır silinebilir. Silme işlemi için DELETE deyimi kullanılır. Bu deyim şu şekilde tanımlanıyor: DEELETE [FROM] tablo [WHERE koşul]; Örnek 1 BÖLÜM isimli tablonun tüm kayıtlarını silmek için şöyle bir yol izlenebilir: DELETE FROM BÖLÜM; Ancak bu tür bir silme işleminin gerçekleştirilebilmesi için, bu tablo üzerinde bütünlük sınırlamalarının bulunmaması gerektiği unutulmamalıdır. Bu tablonun PERSONEL tablosu arasında bütünlük ilişkilerinin tanımlandığını varsayacak olursak, bu silme işleminin gerçekleşmeyeceğini söyleyebiliriz. Örnek 2 BÖLÜM isimli tabloda yer alan ve bölüm kodu "60" olan bölümü silmek istiyoruz. Bunun için DELETE deyimi şu şekilde düzenlenebilir: DELETE FROM BÖLÜM WHERE BÖLÜM_NO=60; BÖLÜM ile PERSONEL arasında bütünlük sınırlamaları tanımlanmış olmasına rağmen, amaçlanan silme işlemi gerçekleşir. Çünkü "60" numaralı bölüm BÖLÜM tablosunda tanımlanmasına rağmen, PERSONEL tablosunda bu bölümle ilgili herhangi bir kayıt bulunmamaktadır. 157 / 192

158 11.5. Hareket İşleme Veri tabanlarını doğal olarak aynı anda çok sayıda kişi kullanacaktır. Kullanıcı; veri ekleyebilir, veriyi değiştirebilir hatta silebilir. Bu değişikliklerin diğer kullanıcıları hemen etkilemesi istenmez. Çünkü yapılan bazı işlemlerin iptal edilerek, veri tabanının önceki hale dönüşmesi gerekebilir. Yani veri üzerinde bir değişiklik yaptığımızda, bunun sonucunu sadece kendimiz görürüz. Gerek görülürse; bu değişikliklerin kalıcı hale getirilerek diğer kullanıcılar tarafından da görülmesi sağlanabilir. Bu tür bir amaca ulaşmak için hareket işleme (transaction processing) kavramını bilmek gerekir. Verinin değiştirilmesi üzerinde etkili olan DML deyimleri çalıştırıldığında, "veri tabanı hareketleri " (database transactions) oluşur. Başlayan bir hareket COMMIT ya da ROLLBACK deyimleri çalıştırılıncaya dek sona ermez ve sonuçları kalıcı değildir. Bu deyimlerden biri çalıştırıldığında veya bir başka DDL deyimi (örneğin CREATE) çalıştırıldığında da hareket son bulur. Ayrıca bilgisayarın çalışması sona erince ya da sistem bozulmalarında (crashes) veri tabanı hareketleri sona erecektir. Veri tabanı hareketleri INSERT, UPDATE ve DELETE gibi deyimlerin çalıştırılması sonucunda başlar. 158 / 192

159 Örnek Veri tabanı kullanıcılarından birinin aşağıdaki deyimi çalıştırdığını varsayalım. UPDATE PERSONEL SET BÖLÜM_NO=10 WHERE PERSONEL_NO=300; Bu deyimin çalıştırılması ardından, "300" numaralı personelin bölüm numarası "10" olarak değiştirilir. Söz konusu değişiklik sadece bu deyimi çalıştıran kullanıcı için yapılmıştır. Veri tabanına ulaşan diğer kullanıcılar bu değişikliğin sonucunu görmezler. Çünkü kullanıcının yarattığı hareket sona ermemiştir. Aynı kullanıcı bu kez, COMMIT; deyimini çalıştıracak olursa, yaptığı tüm değişiklikler kalıcı hale gelir ve diğer veri tabanı kullanıcıları da bu değişikliği algılamış olurlar. 159 / 192

160 Örnek PERSONEL tablosunun tüm kayıtlarını silmek için, DELETE FROM PERSONEL; Deyiminin çalıştırıldığını varsayalım. Bu deyim çalıştırıldığında, bu deyimi çalıştıran kullanıcı için PERSONEL tablosunun tüm kayıtları silinmiştir. Henüz COMMIT deyimi çalıştırılmadığı için diğer kullanıcılar bu işlemden etkilenmez ve bu durumda, silinen kayıtları geri alma olanağı bulunmaktadır. Silme işlemini iptal etmek için, ROLLBACK; deyimi çalıştırılırsa, PERSONEL tablosunun eski haline dönüştüğü görülür. 160 / 192

161 Veri Tabanı Nesneleri Tablolar Tablolar veri tabanının temel yapılarıdır. Tablo yapılarının en önemli özellikleri şunlardır: a) Tablolar herhangi bir anda, hatta veri tabanının bir kullanıcı tarafından kullanılması esnasında bile yaratılabilir. b) Tablolar için bir boyut belirlemeye gerek yoktur. Ancak yine de tablonun ne kadarlık bir hacime ulaşabileceğini tahmin etmekte yarar vardır. Veri tabanlarında iki türlü tablo yer almaktadır: Kullanıcı tabloları Bu tablolar herhangi bir veri tabanı kullanıcısı tarafından yaratılan tablolardır. Söz konusu tabloların isimleri ve sütunları doğal olarak kullanıcı tarafından belirlenmiştir. 161 / 192

162 Veri sözlüğü Veri tabanı sunucusu tarafından kullanılan ve bakımı onun tarafından yapılan tablolardır. Veri tabanının yönetilmesine yönelik olan bu tablolar ve görünümler (views), veritabanı sözlüğünü (database dictionary) oluştururlar. Bu tablolara sistem yöneticisi dışında herhangi bir kullanıcının erişmesi ya da müdahale etmesi mümkün değildir Tabloları İsimlendirme Tablolara doğal olarak bir isim vermek gerekecektir. İsimlendirirken bazı kurallara uymak gerekmektedir : Tablo isimleri büyük-küçük harf ayrımına karşı duyarlı değildir. Küçük harflerle ya da büyük harflerle veya karışık yazılması fark etmez. Tablo isimleri verilirken aşağıda sıralanan hususlara dikkat edilmesi tavsiye edilir: a) Tablo ya da sütun isimleri ilişkili olduğu konuya uygun biçimde belirlenmelidir. b) Aynı sütunlar birden fazla tablo içinde yer alıyorsa, aynı isimleri vermek yararlı olacaktır. Örneğin PERSONEL ve BÖLÜM tablosu içindeki bölüm numarasını içeren sütunlar BÖLÜM_NO biçiminde belirlenmiştir. 162 / 192

163 163 / 192

164 Tabloların Yaratılması Tabloların yaratılabilmesi için CREATE TABLE deyimi kullanılır. Bu deyim şu şekilde tanımlanır: CREATE TABLE [şema.] tablo (sütun veri türü [DEFAULT ifade], ); şema tablo sütunlar veri türü DEFAULT ifade Tablonun sahibini belirler Yaratılacak tablonun adı Tablonun herbir sütunu Herbir sütunun veri türü Sütuna veri girişi yapılmadığında, o sütunun varsayılan değerini belirler Veri tabanındaki nesneler topluluğuna şema adı verilebilir. Şema nesneleri, veri tabanı içindeki verilere doğrudan karşılık gelen mantıksal yapılardır. Şema nesneleri tablolar, görünümler, dizinler ve diğer nesnelerdir. Bir tablo belirli bir kullanıcıya ait ise, tablo adı kullanıcı adı ile birlikte ifade edilir. Bir sütunun değeri, daha tablo yaratılırken varsayılan değer (default value) olarak atanabilir. Burada doğrudan bir değer, bir ifade veya bir fonksiyon belirlenebilir. Ancak belirtlenen değer, ilgili sütunun veri türüne uygun olmalıdır. Örneğin, PERSONEL tablosunun GİRİŞ_TAR isimli alanı, personelin işe giriş tarihini içerecektir. Eğer herhangi bir değer kaydedilmez ise, bu personelin tabloya kaydedildiği günün tarihini işe giriş tarihi olarak kabul etmek istiyoruz. Bu amaçla DEFAULT sözcüğü, Örnek GİRİŞ_TAR DATE DEFAULT SYSDATE biçiminde kullanılabilir 164 / 192

165 BÖLÜM tablosunun aşağıdaki sütunlardan oluşması gerektiğini varsayalım: BÖLÜM_NO Sayısal değerler içerecektir. En fazla 2 karakter olabilir. BÖLÜM_ADI Bölüm adını içerecektir. En fazla 15 karakter olabilir. KONUM Bölümün yerini belirleyecekitir. En fazla 13 karakter olabilir. Bu tablo aşağıda belirtildiği biçimde yaratılabilir: CREATE TABLE BÖLÜM (BÖLÜM_NO BÖLÜM_ADI KONUM NUMBER(2), VARCHAR2(15), VARCHAR2(13)); Bir Alt Sorgu İle Tabloların Yaratılması Bir tablo yaratıldıktan sonra, INSERT INTO deyimi yardımıyla, bu tabloya bir başka tablodan sorgulama işlemi yapılarak bilgi giriş yapılabilir. Ancak, bilgi giriş işlemi daha tablo yaratılırken de yapılabilir. Bunun için, CREATE TABLE deyimi bir alt sorgu ile birlikte kullanılabilir. CREATE TABLE tablo [(sütunlar)] AS altsorgu ; CREATE TABLE deyiminde sütun tanımları yapılmamış ise, alt sorgudan elde edilen sütunlar yeni yaratılacak olan tablonun sütunlarını oluşturacaktır. Eğer CREATE TABLE deyimi içinde sütun tanımları verilmiş ise, bunların sayısı alt sorgudan elde edilen sütun sayısı ile aynı olmalıdır. Bu durumda yeni tablo sütunları ile alt sorgu sütunları sıraya göre eşleşir. 165 / 192

166 Örnek PER20 isimli bir tablo yaratacağız. Bu tablo PERSONEL tablosunda yer alan ve "20" numaralı bölüme ilişkin personel kayıtlarını içerecektir. PERSONEL tablosundaki aylık ücret bilgileri yıllığa çevrilerek PER20 tablosuna yazdırılacaktır. CREATE TABLE PER20 AS SELECT PERSONEL_NO, ADI, ÜCRET*12 AS YILLIK FROM PERSONEL WHERE BÖLÜM_NO=20; Tabloya Yeni Bir Sütun Ekleme Bir tablo yaratıldıktan sonra, gerektiğinde yeni sütunlar eklenebilir. Bu amaçla ALTER deyimi kullanılır. ALTER deyimi şu şekilde tanımlanıyor: ALTER TABLE tablo ADD ((sütun1 veri türü [DEFAULT ifade] [,sütun2 veri türü] ); Örnek Daha önce yaratılan PER20 isimli tabloya GÖREVİ isimli yeni bir sütun eklemek istiyoruz. Bu sütun VARCHAR2 veri türüne sahip olacak ve en fazla 9 karakter içerebilecektir. Bunun için şöyle bir yol izlenir: ALTER TABLE PER20 ADD (GÖREVİ VARCHAR2(9)); Bir Sütun Tanımını Değiştirmek Tablo yaratıldıktan sonra, gerektiğinde bir sütun ile ilgili tanımlarda bazı değişiklikler yapılabilir. Bunun için ALTER deyimi MODIFY sözcüğü ile birlikte şu şekilde kullanılır: 166 / 192

167 ALTER TABLE tablo MODIFY ((sütun1 veri türü [DEFAULT ifade] [,sütun2 veri türü] ); Sütun tanımları istenildiği biçimde değiştirilemez. Bu işlemi yerine getirirken bazı noktalara dikkat etmek gerekiyor: Örnek PER20 isimli tablonun ADI isimli sütunun genişliğini 15 karakter olarak değiştirmek istiyoruz. Bunun için aşağıda belirtilen yol izlenir: ALTER TABLE PER20 MODIFY (ADI VARCHAR2(15)); 167 / 192

168 Tablonun Yok Edilmesi Gerektiğinde bir tablo veri tabanından silinebilir. Böyle bir amaca ulaşmak için DROP deyimi kullanılır. Söz konusu deyim şu şekilde tanımlanıyor: DROP TABLE tablo Bu deyim tehlikeli sonuçlara neden olabilecek bir deyimdir. O halde kullanırken bazı noktalara dikkat etmek gerekiyor: 168 / 192

169 Örnek PER20 isimli tabloyu yok etmek için aşağıda belirtilen yol izlenir: DROP TABLE PER20; Tablonun Budanması Bir tablonun bazı satırları ve gerektiğinde tüm satırlarının nasıl silinebildiğini biliyoruz. DELETE deyimini bu amaçla kullandık. Benzer biçimde, bir tablonun tüm satırlarını yok etmek gerektiğinde TRUNCATE TABLE deyimi kullanılır. Bu deyim şu şekilde tanımlanır: TRUNCATE TABLE tablo DELETE ve TRUNCATE deyimleri tablonun tüm satırlarının yok edilmesine neden olur. Ancak, DELETE deyimi tablonun silinen satırlarından boşalan alanı yok etmez. TRUNCATE ise bu alanı yok eder. DELETE deyimi çalıştırıldıktan sonra ROLLBACK deyimi ile işlemler geri alınabiliyordu. TRUNCATE deyimi çalıştırıldıktan sonra silinen satırlar geri alınamaz. Örnek BÖLÜM tablosunun tüm satırlarını silmek için TRUNCATE deyimi şu şekilde kullanılır: TRUNCATE TABLE BÖLÜM; 169 / 192

170 Veri tabanında, veri bütünlüğünü sağlayan çeşitli sınırlamalar tanımlanabilir. Aşağıdaki tablo bu sınırlamaları açıklamaktadır. 170 / 192

171 NOT NULL Sınırlaması Bir tablonun herhangi bir sütununun hiçbir zaman boş kalmaması istenebilir. Yani bu sütun NULL değerler içermeyecektir. Bu tür bir amaca NOT NULL sınırlaması yardımıya ulaşılabilir. Böyle bir sınırlama tablo satırlar üzerine konulabilir. Örnek PERSON tablosuna bilgi girişlerinde, personel adı ve bölüm numarası ile ilgili sütunların mutlaka dolu olmasını istiyoruz. Bu tür bir amaca ulaşmak için PERSON tablosu şu şekilde yaratılabilir UNIQUE Sınırlaması Tablonun bir sütununa girilen bir değerin, aynı sütun içinde tekrarlanmaması istenilebilir. UNIQUE anahtar sınırlaması böyle bir amaç için kullanılır. Söz konusu anahtara "tek 171 / 192

172 anahtar" adı da verilmektedir. Bu tür bir anahtar tek bir sütun yardımıyla oluşturulabileceği gibi, gerektiğinde birden fazla sütun bir araya getirilerek de oluşturulabilir. Bu durumda "birleşik tek anahtar" kavramından söz edilir. UNIQUE anahtarının tanımlandığı sütun için NOT NULL sınırlaması da tanımlanabilir. Eğer tanımlanmaz ise, NULL değerler içeren çok sayıda satır eklenebillir. Çünkü NULL değerler herhangi bir değerle eşleşmediği için, "tek olma" koşulunu bozmaz. CREATE TABLE deyimi içinde UNIQUE sınırlaması şu şekilde tanımlanır: CONSTRAINT UNIQUE anahtar adı UNIQUE( sütun adı ); Örnek BÖLÜM tablosunun BÖLÜM_NO isimli sütunu çift değerlere izin vermeyecektir. Bu koşula uygun tablo şu şekilde yaratılabilir: CREATE TABLE BÖLÜM (BÖLÜM_NO NUMBER(4), BÖLÜM_ADI VARCHAR2(14), KONUM VARCHAR2(13), CONSTRAINT BL UNIQUE(BÖLÜM_ADI)); Burada BÖLÜM isimli tablo yaratılırken, BÖLÜM_ADI için UNIQUE sınırlaması tanımlanmış ve bu sınırlamaya BL adı verilmiştir. Bu tabloya artık bölüm adı aynı olan ikinci bir kayıt eklenemez. 172 / 192

173 PRIMARY KEY Sınırlaması Bir tablo için birincil anahtarın tanımlanması söz konusu ise, PRIMARY KEY sınırlaması kullanılır. Bir tablo için sadece bir adet birincil anahtar yaratılabilir. Ancak birden fazla sütun bir araya getirilerek de birincil anahtar oluşturulabilir. Birincil anahtar olarak tanımlanan bir sütun NULL değerler veya tekrarlı değerler içeremez. CREATE TABLE deyimi içinde birincil anahtar şu şekilde tanımlanır: CONSTRAINT birincil anahtar adı PRIMARY KEY ( sütun adı ); Örnek BÖLÜM tablosunun BÖLÜM_NO isimli sütununu birincil anahtar olarak tanımlamak istiyoruz. Birincil anahtarın adı PR olacaktır. Bunun için aşağıdaki tanımı yapmak yeterlidir: CREATE TABLE BÖLÜM (BÖLÜM_NO NUMBER(4), BÖLÜM_ADI VARCHAR2(14), KONUM VARCHAR2(13), CONSTRAINT PR PRIMARY KEY(BÖLÜM_NO)); Aynı anda birden fazla sınırlamayı da tanımlayabilir. Örneğin, birincil anahtar yanısıra, BÖLÜM_ADI için, BL adını taşıyan UNIQUE anahtar tanımı birlikte yapılabilir: 173 / 192

174 CREATE TABLE BÖLÜM (BÖLÜM_NO NUMBER(4), BÖLÜM_ADI VARCHAR2(14), KONUM VARCHAR2(13), CONSTRAINT BL UNIQUE(BÖLÜM_ADI), CONSTRAINT PR PRIMARY KEY(BÖLÜM_NO)); FOREIGN KEY Sınırlaması İki tablo arasında ilişkisel bütünlüğü (referential integrity) sağlamak amacıyla FOREIGN KEY, yani dış anahtar sınırlaması tanımlanır. Bu sınırlamalar bir sütun olarak tasarlandığı gibi, bazı durumlarda birden fazla sütunun birleşimi olarak da düşünülebilir. Bir tablo için tanımlanan dış anahtar, bir başka tablonun birincil anahtarı ile ilişkilendirilir. CREATE TABLE deyimi içinde dış anahtar şu şekilde tanımlanır. CONSTRAINT dışanahtarın adı FOREIGN ( sütun adı ) REFERENCES tablo(sütun adı); FOREIGN KEY sınırlamaları ile ilgili tanımlarda bazı özel sözcüklere yer vereceğiz. Aşağıda bu sözcükler hakkında kısaca bilgi veriyoruz: FOREIGN KEY Yaratılacak tablonun dış anahtar olarak seçilen sütununu tanımlar. REFERENCES ON DELETE CASCADE Bu tablonun ilişkili olduğu tablonun birincil anahtarını belirtir. Ana tablodan bir satır silindiğinde; ilişkili olduğu tabloda, bu satır ile ilişkili tüm kayıtların silinmesini sağlar. 174 / 192

175 Örnek PERS isimli yeni bir tablo yaratılacaktır. PERS tablosu içindeki ADI ve BÖLÜM_NO alanları NULL değerler içermeyecektir. Bu tablo BÖLÜM tablosu ile BÖLÜM_NO sütununa göre ilişkili olacaktır. O halde, BÖLÜM tablosunun BÖLÜM_NO sütununa bağlı olarak bir dış anahtar tanımlanacaktır. Bu anahtarın adı FK olacaktır. Amacımıza uygun PERS tablosu şu şekilde yaratılabilir: CREATE TABLE PERS (PERSONEL_NO NUMBER(4), ADI VARCHAR2(10) NOT NULL, GÖREVİ VARCHAR2(9), YÖNETİCİSİ VARCHAR(9), GİRİŞ_TAR DATE ÜCRET NUMBER(7,2), KOMİSYON NUMBER(7,2), BÖLÜM_NO NUMBER(2) NOT NULL), CONSTRAINT FK FOREIGN KEY(BÖLÜM_NO) REFERENCES BÖLÜM(BÖLÜM_NO)); 175 / 192

176 CHECK Sınırlaması Tablonun herbir satırı için bir koşul tanımlanması söz konusu ise, CHECK sınırlaması kullanılır. Koşul tanımlanırken SQL koşul işleçlerinden yararlanılır. CREATE TABLE deyimi içinde koşul tanımları şu şekilde yapılır: CONSTRAINT koşul adı CHECK (koşul) Örnek BÖLÜM tablosunun BÖLÜM_NO sütununa girilecek değerlerin 10 ile 99 arasındaki bir değer olmasını istiyoruz. Koşulun adı KŞ olsun. Bu tür bir koşulu şu şekilde tanımlayabiliriz: CREATE TABLE BÖLÜM (BÖLÜM_NO NUMBER(4), BÖLÜM_ADI VARCHAR2(14), KONUM VARCHAR2(13), CONSTRAINT KŞ CHECK (BÖLÜM_NO BETWEEN 10 AND 99)); NOT NULL sınırlamasının eklenmesi söz konusu ise, ALTER TABLE deyimi içinde MODIFY sözcüğü kullanılır. Ancak bu tür bir sınırlamanın eklenebilmesi için, söz konusu tablonun hiç satır içermemesi gerekiyor. ALTER TABLE deyimi ile sınırlamalar için ekleme, silme, kapatma veya açma işlemleri yapılabilir. Ancak bir sınırlama mevcut ise, bunun yapısını değiştiremeyiz. Örnek PERS tablosunun YÖNETİCİSİ sütununa girilen bir değer, aynı zamanda bu tablonun PERSONEL_NO sütununda bulunan bir değer olmalıdır. Bu tür bir sınırlamayı, mevcut bir tabloya şu şekilde ekleyebiliriz: 176 / 192

177 ALTER TABLE PERS ADD CONSTRAINT TEST FOREIGN KEY(YÖNETİCİSİ) REFERENCES (PERSONEL_NO); Örnek 1 BÖLÜM tablosu üzerindeki PRIMARY KEY sınırlamasını kaldırmak için şöyle bir yol izlenebilir: ALTER TABLE BÖLÜM DROP PRIMARY KEY CASCADE; Bu işlem, BÖLÜM tablosuyla ilişkili PERSONEL.BÖLÜM_NO sütunu üzerindeki dış anahtar sınırlamalarını da kaldırır. Örnek 2 Daha önce PERS tablosu için tanımlanan TEST isimli sınırlamayı yok etmek istiyoruz. Bunun için şöyle bir yol izlenebilir: ALTER TABLE PERS DROP CONSTRAINT TEST Bu işlem, BÖLÜM tablosuyla ilişkili PERSONEL.BÖLÜM_NO sütunu üzerindeki dış anahtar sınırlamalarını da kaldırır Görünümler Bir ya da daha fazla tablonun mantıksal alt kümelerini oluşturmak için görünümlerden yararlanılır. Görünümler, bir tabloya dayalı mantıksal bir tablo olarak değerlendirilir. Görünüm, tablolar gibi veriyi fiziksel olarak saklamaz. Görünümler, saklanmış (depolanmış) SELECT deyimi olarak değerlendirilir. Bir SELECT deyiminin defalarca kullanılması söz konusu ise, onu bir görünüm biçiminde tanımlayarak, bu görünümün çalıştırılması mümkündür. Görünümler aşağıda sıralanan nedenlerle tercih edilir: 177 / 192

178 a) Görünümler, veri tabanına erişimi sınırlayan olanaklardır çünkü görünüm, tabloların sadece seçilen bir kısmını görüntüleyebilir. b) Karmaşık sorguların kolayca yapılmasını sağlar. c) Aynı veriyi kullanan çok sayıda görünüm tanımlanabilmektedir. Bir görünümün yaratılabilmesi için CREATE VIEW deyimi kullanılır. Bu deyim en basit biçimiyle, şöyle tanımlanıyor: CREATE VIEW görünüm AS alt sorgu ; Bir görünümün yaratılması esnasında kullanılacak alt sorgu içinde ORDER BY sözcüğü yer alamaz. Bazı kurallara uymak koşuluyla görünümler DML işlemlerinin yerine getirilmesi amacıyla da kullanılabilir. Aşağıda sıralanan sorgu türleri DML işlemlerinde kullanılamaz. a) Grup fonksiyonlarını içeren alt sorgular b) GROUP BY sözcüğünün yer aldığı alt sorgular c) DISTINCT sözcüğünün yer aldığı alt sorgular Var olan bir görünümü yok etmek amacıyla DROP VIEW deyimi kullanılır. 178 / 192

179 DROP VIEW görünüm ; Örnek 1 PERSONEL tablosunun PERSONEL_NO, ADI ve GÖREVİ sütunlarına bağlı olarak, PERGÖR isimli görünümü şu şekilde yaratabiliriz. CREATE VIEW PERGÖR AS SELECT PERSONEL_NO, ADI, GÖREVİ FROM PERSONEL; Örnek 2 Alt sorgu içinde alan takma isimler de kullanılabilir. Bu durumda görünümün alan isimleri, söz konusu takma isimler olacaktır. CREATE VIEW PERGÖR1 AS SELECT PERSONEL_NO, AS P_NO, ADI AS İSİM, ÜCRET AS MAAŞ FROM PERSONEL WHERE BÖLÜM_NO=20; Görünümün Sorgulanması Görünümler aynen bir tabloya benzer. SELECT deyimi ile bir görünümü okumak mümkündür. Bir görünümün içerdiği tüm sütunlar seçilebildiği gibi, gerektiğinde bazı sütunları da seçilebilir. 179 / 192

180 Örnek PERS1 isimli görünümü PERSONEL_NO, ADI ve GÖREVİ isimli sütunlardan oluşmaktadır. Bu görünümün çalıştırılarak (sorgulanarak), sadece ADI ve GÖREVİ isimli sütunlarının seçilebilmesi için; SELECT ADI,GÖREVİ FROM PERS1; biçiminde bir tanım yapmak yeterlidir. Bu görünüm çalıştırıldığında, PERSONEL tablosunun sadece; ADI ve GÖREVİ sütunları görüntülenir. 180 / 192

181 Örnek Daha önce yaratılmış PERGÖR isimli görünümü şu şekilde güncelleştirebiliriz. CREATE OR REPLACE VIEW PERGÖR AS SELECT PERSONEL_NO, ADI, GÖREVİ, ÜCRET, BÖLÜM_NO FROM PERSONEL; Indeksler İndeksler (dizinler) bir tablodaki satırlara, belirli bir sütun üzerinden daha hızlı erişimi sağlayan veri tabanı nesneleridir. İndeksler bir deyim yardımıyla kullanıcı tarafından yaratılabileceği gibi otomatik olarak da yaratılabilir. Bir tablo tanımında PRIMARY KEY ya da UNIQUE sınırlamalarına yer verilmiş ise, bu anahtarlara bağlı olarak otomatik indeksler yaratılır. PRIMARY KEY ve UNIQUE anahtar sınırlamaları sonunda yaratılan indeksler, bu anahtarların özelliğine bağlı olarak tek değerli indeksler (unique index) ismiyle bilinir. Buna karşılık tek olmayan indeksler de yaratmak mümkündür. Örneğin, FOREIGN KEY alanı için indeks yaratarak, bu alana bağlı sorguların hızını artırabiliriz. İndeksler tanımlandığında, disk için okuma/yazma miktarı azalır. Böylece veriye daha hızlı erişilir. İndeksler tablodan bağımsız olarak oluşturulur ve hem kullanımı hem de bakımı veri tabanı sunucusu tarafından otomatik olarak gerçekleştirilir. Bir tablo için indeks tanımlanmamış ise, okuma işlemlerinde tüm tablo taranır. Örnek PERSONEL tablosunun BÖLÜM_NO alanına bağlı bir indeks oluşturacağız. Indeksin adı PERBÖL olacaktır. 181 / 192

182 CREATE INDEX PERBÖL ON PERSONEL(BÖLÜM_NO); Bir İndeks Ne Zaman Yaratılır? Bir indeksin yaratılabilmesi için bazı koşulların gerçekleştirilmiş olması gerekmektedir. Aksi takdirde indeksten beklenen yarar elde edilemez. Bir indeks, aşağıda sıralanan koşullar ortaya çıktığında tanımlanır. a) Aynı alan birçok sorguda WHERE sözcüğü içinde ya da bağlantı koşulu (join condition) içinde sık sık kullanılıyorsa, b) Alan, geniş ardışık sayılar içeriyorsa, c) Alan, çok sayıda NULL değer içeriyorsa, d) İki ya da daha fazla alan birçok sorguda WHERE veya bağlantı koşulu içinde birlikte sık sık kullanılıyorsa, e) Tablo çok büyük ve sorgudan elde edilecek sonuç tablonun % 2-4 'den daha az ise, Solda sıralanan durumlar geçerli ise indeks kullanılmaz. 182 / 192

183 183 / 192

184 Kullanıcı Erişiminin Denetlenmesi Veri tabanları, çoğu şirket ve kurum için büyük öneme sahip verileri içerir. Veri tabanlarının çoğu zaman birden fazla kullanıcının aynı anda hizmetinde olmaları gerekir. Veri tabanlarını diğer kullanıcılara açarken, verilere ulaşma ve onlar üzerinde işlem yapma gibi yetkilerin her kullanıcı için aynı olmamasına dikkat etmek gerekir. Bunun için, veri tabanına erişimin dikkatle denetlenmesi gerekir. Günümüzdeki birçok Veri Tabanı Yönetim Sistemi kullanıcı erşiminin denetlenmesi ile ilgili araçları ve yöntemleri içerir. Bu bölümde bu tür araçları nasıl kullanacağımızı öğreneceğiz Kullanıcı Erişiminin Denetlenmesi Bir veri tabanını doğal olarak çok sayıda kişi kullanacaktır. Bu kullanıcılar farklı kullanım düzeyine sahip olacaktır. Her kullanıcı sistemin tüm kaynaklarına ulaşamayacaktır. Bunun denetlenmesi gerekiyor. Kullanıcıların, veri tabanı sistemine tanıtılması ve erişim yetkilerinin tanımlanması söz konusudur. Bu bölümde kullanıcı erişimi ile ilgili konuları ele alarak inceleyeceğiz. Ancak burada anlatılan konular ORACLE veri tabanı sunucusu göz önüne alınarak açıklanmıştır. Bu noktaya dikkat etmek gerekiyor. Ayrıca, bu bölümde anlatılan işlemlerin çoğunu, sadece Veri Tabanı Yöneticisinin (VTY) yapabileceğini unutmamalıyız. Veri Tabanı Yöneticisi, veri tabanı üzerinde her türlü işlemi yapmaya yetkisi olan bir kullanıcıdır. Diğer tüm kullanıcılar, veri tabanı yöneticisi tarafından yaratılır ve yetkileri yine onun tarafından atanır Kullanıcıların Yaratılması Veri Tabanı Yöneticisi (VTY), kullanıcıları veri tabanı sistemine tanıtır. Veri tabanını kullanacak kişileri, sistemin kullanıcısı olarak tanıtmak için; CREATE USER deyimi kullanılır. Bu deyim şu şekilde tanımlanır: CREATE USER kullanıcı IDENTIFIED BY (parola); 184 / 192

185 Örnek BURAK isimli yeni bir kullanıcı sisteme aşağıda belirtildiği biçimde tanıtılır. Bu kullanıcının parolası KAPLAN olarak belirtilecektir. CREATE USER BURAK IDENTIFIED BY KAPLAN; 185 / 192

186 13.3. Kullanıcılara Nesne Yaratma Yetkisinin Verilmesi Veri Tabanı Yöneticisinin kullanıcıyı sisteme tanıttıktan sonra, kullanıcıya bazı yetkileri ataması gerekmektedir. Kullanıcının bazı veri tabanı işlemlerini yerine getirebilmesi için, bu tür yetkilere ihtiyacı olacaktır. Kullanıcılara veri tabanına erişim ve nesne yaratma yetkilerinin verilmesi amacıyla GRANT deyimi kullanılır. GRANT yetkiler TO kullanıcılar ; Kullanıcıya verilebilecek bazı yetkiler aşağıda sıralanmıştır: CREATE_SESSION Veri tabanına bağlanma yetkisi. CREATE_TABLE Tablo yaratma yetkisi. CREATE_VIEW Görünüm yaratma yetkisi. Örnek CREATE USER deyimini kullanarak BURAK isimli bir kullanıcı yaratmıştık. Bu kullanıcıya tablo ve görünüm yaratma yetkisi vermek istiyoruz. Amacımıza şu şekilde ulaşabiliriz: GRANT CREATE_TABLE, CREATE_VIEW TO BURAK; 186 / 192

187 13.4. Parolanın Değiştirilmesi Kullanıcı yaratılırken, Veri Tabanı Yöneticisi tarafından söz konusu kullanıcı için bir erişim parolası belirleniyordu. Bu parola, Veri Tabanı Yöneticisi tarafından değiştirilebileceği gibi, onu yaratan kullanıcı tarafından da değiştirilebilir. Böyle bir amaca ulaşabilmek için; ALTER USER deyimi kullanılır. Bu deyim şu şekilde tanımlanır: ALTER USER kullanıcı IDENTIFIED BY parola ; Bu tür bir işlemin yapılabilmesi için, söz konusu kullanıcının ALTER USER yetkisine sahip olması gerekmektedir. Bu yetki, doğal olarak Veri Tabanı Yöneticisi tarafından kullanıcıya verilmektedir. Örnek BURAK isimli kullanıcının erişim parolasını KAPLAN olarak belirlemiştik. Bu parolayı EYLÜL olarak değiştirmek istiyoruz. Parola değiştirme işlemini şu şekilde yapabiliriz: ALTER USER BURAK IDENTIFIED BY EYLÜL; Yetki Gruplarının Tanımlanması 187 / 192

188 Yetki gruplarına rol adını veriyoruz. Bu yöntem, kullanıcılara aynı yetkilerin verilmesi söz konusu olduğunda yararlı olmaktadır. Benzer biçimde, grup yetkisinin kaldırılabilmesi işlemlerinde de rollerden yararlanılabilir. Roller, CREATE ROLE deyimi yardımıyla şu şekilde oluşturulur: CREATE ROLE rol adı; Roller, Veri Tabanı Yöneticisi tarafından yaratılır. Rol yaratıldıktan sonra, rolün içerdiği her bir yetki GRANT deyimi yardımıyla belirlenir. Rolün belirli kullanıcılara atanması işlemi de yine; GRANT deyimi yardımıyla gerçekleştirilir. Örnek YÖNETİCİ isimli bir rol yaratmayı, bu rolün tablo ve görünüm yaratma yetkilerine sahip olmasını istiyoruz. Ayrıca bu role BURAK ile BEGÜM isimli kullanıcılar sahip olacaktır. Böyle bir amaca ulaşmak için şöyle bir yol izlenir : a) YÖNETİCİ isimli rol tanımlanır: CREATE ROLE YÖNETİCİ; b) YÖNETİCİ isimli rol tanımlanmıştır. Bu rolün tablo yaratma ve görünüm yaratma yetkilerini içermesi için GRANT deyimi şu şekilde kullanılır: GRANT CREATE_TABLE, CREATE_VIEW TO YÖNETİCİ; c) Bu yetkilere BURAK ve BEGÜM isimli kullanıcıların topluca sahip olmasını sağlamak için rolün bu kullanıcılara atanması yeterlidir: 188 / 192

189 GRANT YÖNETİCİ TO BURAK,BEGÜM; Nesnelere Erişim Yetkileri Kullanıcılara, Veri Tabanı Yöneticisi tarafından yetkilerin nasıl atanabileceğini gördük. Bu kez kullanıcılara nesne kullanma yetkisinin nasıl verilebileceği üzerinde duracağız. Veri tabanı içindeki nesnelerin hangi yetkilerle kullanıcılara sunulacağını belirlemek üzere GRANT deyimi kullanılır. Bu deyimle, bir nesne üzerinde ALTER, DELETE, INDEX, INSERT, SELECT, UPDATE ve REFERENCES işlemleri için yetki verilebilmektedir. Bu yetkiler, tablo ve görünümlere verilebilmektedir. GRANT deyimi böyle bir amaca yönelik olarak en basit şu şekilde kullanılabilir: GRANT yetkiler [(rol adı)] ON nesneler TO kullanıcılar [roller][public]; Tanımda sözü edilen PUBLIC sözcüğü, belirlenen nesneler üzerinde sahip olunan yetkilerin tüm kullanıcılara verileceğini ifade eder. Örnek 1 BURAK ve BEGÜM isimli kullanıcılara PERSONEL tablosu üzerinde SELECT deyimini kullanma yetkisini şu şekilde verebiliriz: GRANT SELECT ON PERSONEL TO BURAK, BEGÜM; Örnek 2 BÖLÜM tablosunun BÖLÜM_ADI ve KONUM sütunlarında güncelleştirme yapma yetkisini SELİN kullanıcısına ve YÖNETİCİ rolüne atamak istiyoruz. GRANT deyimi şu şekilde olabilir: 189 / 192

190 GRANT UPDATE (BÖLÜM_ADI, KONUM) ON BÖLÜM TO SELİN, YÖNETİCİ; Örnek 3 BURAK kullanıcısının PERSONEL tablosuna ilişkin olarak sahip olduğu SELECT yetkisini, diğer tüm kullanıcılara vermek gerekiyorsa şu şekilde bir tanım yapılır: GRANT SELECT ON PERSONEL TO PUBLIC; Nesne Yetkilerinin Geri Alınması GRANT deyimiyle verilen yetkiler, gerektiğinde geri alınabilir. Bunun için REVOKE deyiminden yararlanılır. Bu deyim şu şekilde tanımlanır: REVOKE yetkiler ON nesneler FROM kullanıcılar [roller] [PUBLIC] ; 190 / 192

191 Örnek BURAK kullanıcısının PERSONEL tablosu üzerindeki SELECT ve INSERT işlemleri yetkilerini iptal etmek istiyoruz. Bu amaca ulaşmak için şu şekilde bir yol izlenir: REVOKE SELECT,INSERT ON PERSONEL FROM BURAK; 191 / 192

VERİ TABANI SİSTEMLERİ

VERİ TABANI SİSTEMLERİ VERİ TABANI SİSTEMLERİ 1- Günümüzde bilgi sistemleri Teknoloji ve bilgi. 2- Bilgi sistemlerinin Geliştirilmesi İşlevsel Gereksinimleri 1.AŞAMA Gereksinim Belirleme ve Analiz Veri Gereksinimleri Gereksinimler

Detaylı

BMB202. Veritabanı Yönetimi Ders 5. İlişkisel Cebir ve SQL. Erdinç Uzun NKÜ Çorlu Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

BMB202. Veritabanı Yönetimi Ders 5. İlişkisel Cebir ve SQL. Erdinç Uzun NKÜ Çorlu Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü BMB202. Veritabanı Yönetimi Ders 5. İlişkisel Cebir ve SQL Erdinç Uzun NKÜ Çorlu Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü Dersin Planı İlişkisel Cebir SQL e Giriş İlişkisel Cebir (Relational

Detaylı

BTP203 VERİTABANI YÖNETİM SİSTEMLERİ

BTP203 VERİTABANI YÖNETİM SİSTEMLERİ BTP203 VERİTABANI YÖNETİM SİSTEMLERİ Öğr.Gör.Dr. Sedat Telçeken Porsuk Meslek Yüksek Pkulu Bilg. Tekn. Bölümü 2011 2012 Güz Dönemi İLİŞKİSEL CEBİR (Relational Algebra) İlişkisel cebir, biçimsel sorgulama

Detaylı

Veritabanı. SQL (Structured Query Language)

Veritabanı. SQL (Structured Query Language) Veritabanı SQL (Structured Query Language) SQL (Structured Query Language) SQL, ilişkisel veritabanlarındaki bilgileri sorgulamak için kullanılan dildir. SQL, bütün kullanıcıların ve uygulamaların veritabanına

Detaylı

İşlevsel Bağımlılık. DAĞITIM (müşteri_no, şehir_kodu, şehir_adı, gönderi_no, miktar)

İşlevsel Bağımlılık. DAĞITIM (müşteri_no, şehir_kodu, şehir_adı, gönderi_no, miktar) İşlevsel Bağımlılık R bir ilişki şeması, X ve Y nitelik kümeleri ise R nin alt kümeleri olsun (X R, Y R). Eğer X nitelik kümesinin değerleri Y nitelik kümesinin değerlerini belirliyorsa (X in her farklı

Detaylı

Veri Tabanı Tasarım ve Yönetimi

Veri Tabanı Tasarım ve Yönetimi SAKARYA ÜNİVERSİTESİ Veri Tabanı Tasarım ve Yönetimi Hafta 5 Prof. Dr. Ümit KOCABIÇAK Bu ders içeriğinin basım, yayım ve satış hakları Sakarya Üniversitesi ne aittir. "Uzaktan Öğretim" tekniğine uygun

Detaylı

Veri Tabanı Yönetim Sistemleri Bölüm - 4

Veri Tabanı Yönetim Sistemleri Bölüm - 4 Veri Tabanı Yönetim Sistemleri Bölüm - 4 İçerik SQL e Giriş. SQL Yapısal Sorgulama Dili. Temel SQL Komutları: Sorgulama İşlemleri SELECT deyiminin temel yapısı Seçme İşlemi Atma İşlemi Aritmetik İfadelerin

Detaylı

VERİTABANI DERS NOTLARI

VERİTABANI DERS NOTLARI 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 y anlamak, veri tabanı sistemlerinin denetimi ve erişimi imi yöntemlerini

Detaylı

VERİTABANI. SQL (Structured Query Language)

VERİTABANI. SQL (Structured Query Language) VERİTABANI SQL (Structured Query Language) SQL'de Gruplama Bir tablonun satırları gruplara ayrılarak fonksiyonların bunlara uygulanması mümkündür. Gruplara ayırmak için SELECT deyimi içerisinde GROUP BY

Detaylı

Veri Tabanı Hafta Dersi

Veri Tabanı Hafta Dersi Veri Tabanı - 1 2. Hafta Dersi Dersin Hedefleri Geleneksel Dosya Sistemleri Veri Tabanı Kavramları Veri Tabanı Yönetim Sistemleri Veri Modelleri Veri nedir? Bilgisayarlarda veri nasıl saklanır? Bilgisayarlardaki

Detaylı

SQL Query and Table Application

SQL Query and Table Application SQL Query and Table Application Elbistan Meslek Yüksek Okulu 2012 2013 Bahar Yarıyılı Öğr. Gör. Murat KEÇECİOĞLU 24-25 Nis. 2013 Sorgulama İşlemleri SQL de sorgulama işlemleri SELECT deyimi yardımıyla

Detaylı

VERİ TABANI YÖNETİM SİSTEMLERİ Melih BÖLÜKBAŞI

VERİ TABANI YÖNETİM SİSTEMLERİ Melih BÖLÜKBAŞI VERİ TABANI YÖNETİM SİSTEMLERİ Melih BÖLÜKBAŞI Dersin Hedefleri Veri Tabanı Kullanıcıları Veri Modelleri Veri Tabanı Tasarımı İlişkisel VT Kavramsal Tasarımı (Entity- Relationship, ER) Modeli VT KULLANICILARI

Detaylı

VTYS İlişkisel Veri Modeli Y R D. D O Ç. D R. M. B E T Ü L Y I L M A Z

VTYS İlişkisel Veri Modeli Y R D. D O Ç. D R. M. B E T Ü L Y I L M A Z VTYS İlişkisel Veri Modeli Y R D. D O Ç. D R. M. B E T Ü L Y I L M A Z İlişkisel Veri Modelinde İlişki Kavramı Bu modelde İlişki (relation) kavramı matematiksel bir kavramdır. Daha önce gördüğümüz Varlık-İlişki

Detaylı

VERİ TABANI YÖNETİM SİSTEMLERİ

VERİ TABANI YÖNETİM SİSTEMLERİ VERİ TABANI YÖNETİM SİSTEMLERİ Veri Tabanı Nedir? Sistematik erişim imkânı olan, yönetilebilir, güncellenebilir, taşınabilir, birbirleri arasında tanımlı ilişkiler bulunabilen bilgiler kümesidir. Bir kuruluşa

Detaylı

EBE-368 Veri Tabanı Yönetim Sistemleri İlişkisel Model (The Relational Model)

EBE-368 Veri Tabanı Yönetim Sistemleri İlişkisel Model (The Relational Model) EBE-368 Veri Tabanı Yönetim Sistemleri İlişkisel Model (The Relational Model) Dr. Dilek Küçük İlişkisel Model [1] Günümüzde en yaygın kullanılan veri tabanı modelidir. Bir ilişkisel veri tabanı bir veya

Detaylı

SQL (Structured Query Language)

SQL (Structured Query Language) SQL (Structured Query Language) Genel SQL SQL çok yüksek seviyeli bir dildir. Biraz ingilizce bilgisi gerektirir. Programlama dillerine göre öğrenilmesi çok daha kolaydır. Çünkü programlama dillerindeki

Detaylı

VERĐTABANI YÖNETĐM SĐSTEMLERĐ

VERĐTABANI YÖNETĐM SĐSTEMLERĐ VERĐTABANI YÖNETĐM SĐSTEMLERĐ Öğr.Gör.Sedat Telçeken ANADOLU ÜNĐVERSĐTESĐ FEN FAKÜLTESĐ MATEMATĐK BÖLÜMÜ 005 006 Bahar Dönemi BĐL78 - VERĐTABANI YÖNETĐM SĐSTEMLERĐ 4-Birleştirme Đşlemi Đki ilişkiden birinde

Detaylı

VERİTABANI Veritabanı Normalizasyonu

VERİTABANI Veritabanı Normalizasyonu VERİTABANI Veritabanı Normalizasyonu NORMALİZASYON NEDİR? Normalizasyon kısaca veritabanında bulunan verileri düzenleme süreci olarak ifade edilebilir. Normalizasyon sürecinde veritabanlarında çok fazla

Detaylı

1 Temel Kavramlar. Veritabanı 1

1 Temel Kavramlar. Veritabanı 1 1 Temel Kavramlar Veritabanı 1 Veri Saklama Gerekliliği Bilgisayarların ilk bulunduğu yıllardan itibaren veri saklama tüm kurum ve kuruluşlarda kullanılmaktadır. Veri saklamada kullanılan yöntemler; Geleneksel

Detaylı

Veri Tabanı Yönetim Sistemleri Bölüm - 5

Veri Tabanı Yönetim Sistemleri Bölüm - 5 Veri Tabanı Yönetim Sistemleri Bölüm - 5 İçerik SELECT deyimi (devam) Verinin Sınırlandırılması (WHERE) Karşılaştırma İşleçleri (=, >, =,

Detaylı

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı Öğr. Gör. Cansu AYVAZ GÜVEN VERITABANI-I SQL Tek Tablo İçinde Sorgulamalar Tekrarlı Satırların Engellenmesi Aynı değerlere sahip satırlar

Detaylı

SQL'e Giriş. SELECT Deyimi. SQL Komutları. 1. DDL (Data Definition Language - Veri Tanımlama Dili)

SQL'e Giriş. SELECT Deyimi. SQL Komutları. 1. DDL (Data Definition Language - Veri Tanımlama Dili) SQL'e Giriş SQL komutları kullanılarak aşağıdaki işlemler yapılabilir: Veritabanı nesnelerinin oluşturulması ve bu nesnelerle ilgili işlemlerin yapılması Bilgilerin istenilen koşullara göre görüntülenmesi

Detaylı

SQL'e Giriş. SELECT Deyimi. SQL Komutları. Yardımcı Deyimler

SQL'e Giriş. SELECT Deyimi. SQL Komutları. Yardımcı Deyimler SQL'e Giriş SQL komutları kullanılarak aşağıdaki işlemler yapılabilir: Veritabanı nesnelerinin oluşturulması ve bu nesnelerle ilgili işlemlerin yapılması Bilgilerin istenilen koşullara göre görüntülenmesi

Detaylı

1 Temel Kavramlar. Veritabanı 1

1 Temel Kavramlar. Veritabanı 1 1 Temel Kavramlar Veritabanı 1 Veri Saklama Gerekliliği Bilgisayarların ilk bulunduğu yıllardan itibaren veri saklama tüm kurum ve kuruluşlarda kullanılmaktadır. Veri saklamada kullanılan yöntemler; Geleneksel

Detaylı

Veri Tabanı Hafta Dersi

Veri Tabanı Hafta Dersi Veri Tabanı - 1 13. Hafta Dersi Dersin Hedefleri Tek Tablo İçinde Sorgulamalar Tekrarlı Satırları Önlemek Sorgu Sonucunu Sıralama Sütunlar İçin Takma İsim Kullanma Sütunlar Üzerinde Matematiksel İşlemler

Detaylı

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır.

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır. 18 SQL SORGU DİLİ SQL (Structured Query Language) yapısal sorgu dili, veritabanı yönetim sistemlerinin standart programlama dili olarak bilinmektedir. SQL dilinin Access içinde sorgu pencerelerinde veya

Detaylı

Veritabanı Tasarımı. NOT NULL ve UNIQUE Kısıtlamaları Tanımlama

Veritabanı Tasarımı. NOT NULL ve UNIQUE Kısıtlamaları Tanımlama Veritabanı Tasarımı NOT NULL ve UNIQUE Kısıtlamaları Tanımlama NOT NULL ve UNIQUE Kısıtlamaları Tanımlama Konular Kısıtlama terimini veri bütünlüğü ile ilişkilendirerek tanımlama Sütun seviyesinde ve tablo

Detaylı

SQL e Giriş. Uzm. Murat YAZICI

SQL e Giriş. Uzm. Murat YAZICI SQL e Giriş Uzm. Murat YAZICI SQL (Structured Query Language) - SQL Türkçe de Yapısal Sorgulama Dili anlamına gelmektedir ve ilişkisel veritabanlarında çok geniş bir kullanım alanına sahiptir. - SQL ile

Detaylı

SORGULAR. Öğr.Gör.Volkan Altıntaş

SORGULAR. Öğr.Gör.Volkan Altıntaş SORGULAR Öğr.Gör.Volkan Altıntaş SORGULAR VE ÇEŞİTLERİ Seçme Sorguları: En sık kullanılan sorgu türüdür. Seçme sorguları, bilgileri veri sayfası görünümü nde gösteren veri tabanı nesnesi türüdür. Sorgu,

Detaylı

KISITLAMALAR (CONSTRAINT)

KISITLAMALAR (CONSTRAINT) KISITLAMALAR (CONSTRAINT) Tablo alanlarına veri girişini kontrol etmeyi amaçlayan düzenlemelerdir. Bir alana girilen değerleri sınırlayan bu düzenlemeler kullanıcı hataları açısından önemlidir. Verilerin

Detaylı

Veritabanı Yönetim Sistemleri (Veritabanı Tasarımı) İlişkisel Veritabanı Modeli

Veritabanı Yönetim Sistemleri (Veritabanı Tasarımı) İlişkisel Veritabanı Modeli Veritabanı Yönetim Sistemleri (Veritabanı Tasarımı) İlişkisel Veritabanı Modeli Konular Temel Kavramlar Tablo Anahtar Süper Anahtar Birincil Anahtar Yabancı Anahtar İkincil Anahtar Bütünlük Kuralları Birincil

Detaylı

VERİ TABANI YÖNETİM SİSTEMLERİ I

VERİ TABANI YÖNETİM SİSTEMLERİ I BÖLÜM 8 8. TEMEL SQL KOMUTLARI-II 8.1. SELECT (Seç) Komutu Veri tabanındaki tablo veya tablolardan istenilen özellikteki verileri seçip listeleme için kullanılan komuttur. Genel kullanımı aşağıdaki gibidir.

Detaylı

Veritabanı Tasarımı. Kartezyen Çarpım ve Join İşlemleri

Veritabanı Tasarımı. Kartezyen Çarpım ve Join İşlemleri Veritabanı Tasarımı Kartezyen Çarpım ve Join İşlemleri Konular Oracle özel join işlemlerini isimlendirme ve onların ANSI/ISO SQL: 1999 karşıtları Join durumlarının amacını açıklama Kartezyen çarpımdan

Detaylı

SQL Kod ile Tablo Oluşturma

SQL Kod ile Tablo Oluşturma SQL Kod ile Tablo Oluşturma Aşağıdaki SQL kodları Veri tabanı hazırlama programında yazılıp çalıştırıldığı zaman PERSONEL adında bir tablo oluşturulur ve bu tablonun sütunları Personel_no, Adı, Soyadı

Detaylı

HASTANE OTOMASYONU VERİ TABANI YÖNETİM SİSTEMLERİ TEMEL VERİTABANI KAVRAMLARI

HASTANE OTOMASYONU VERİ TABANI YÖNETİM SİSTEMLERİ TEMEL VERİTABANI KAVRAMLARI VERİ TABANI YÖNETİM SİSTEMLERİ HASTANE OTOMASYONU Öğr. Gör. Handan ÇETİNKAYA İstanbul Gelişim Üniversitesi Günümüzde en basitinden en karmaşığına kadar pek çok veritabanı mevcuttur. En basiti Microsoft

Detaylı

İLİŞKİSEL VERİTABANLARI

İLİŞKİSEL VERİTABANLARI İLİŞKİSEL VERİTABANLARI Veritabanı Nedir? Veritabanı (database) en basit şekliyle verilerin belirli bir düzene göre tutulduğu, depolandığı bir sistemdir. İlişkisel Veritabanı Nedir? İlişkisel veritabanlarındaki

Detaylı

Bölüm 4: DDL Veri Tanımlama Dili

Bölüm 4: DDL Veri Tanımlama Dili Bölüm 4: DDL Veri Tanımlama Dili -43- Dr. Serkan DİŞLİTAŞ DDL (Data Definition Language Veri Tanımlama Dili : Bu kategorideki SQL komutları ile veritabanları, tablo, görünüm ve indekslerin yaratılması,

Detaylı

VERİTABANI ORGANİZASYONU

VERİTABANI ORGANİZASYONU VERİTABANI ORGANİZASYONU Veri nedir? Olgu, kavram ya da komutların, iletişim, yorum ve işlem için elverişli biçimsel gösterimidir. Veriler ölçüm, sayım, deney, gözlem ya da araştırma yolu ile elde edilmektedir.

Detaylı

Coğrafi Bilgi Sistemlerine Giriş. Ünite 5 - Veri Tabanı Yönetim Sistemleri

Coğrafi Bilgi Sistemlerine Giriş. Ünite 5 - Veri Tabanı Yönetim Sistemleri Coğrafi Bilgi Sistemlerine Giriş Ünite 5 - Veri Tabanı Yönetim Sistemleri İçerik Temel kavramlar Veri tabanı modelleri Normalizasyon Coğrafi Bilgi Sistemlerinde veri tabanı yönetimi Temel kavramlar Veri

Detaylı

2 İlişkisel Veritabanı Tasarımı ve Normalizasyon. Veritabanı 1

2 İlişkisel Veritabanı Tasarımı ve Normalizasyon. Veritabanı 1 2 İlişkisel Veritabanı Tasarımı ve Normalizasyon Veritabanı 1 Veritabanı Tasarımı Tasarım yapılırken izlenecek adımlar; Oluşturulacak sistemin nelerden oluşması gerektiği ve hangi işlemlerin hangi aşamalarda

Detaylı

Veri Tabanı Yönetim Sistemleri Bölüm - 7

Veri Tabanı Yönetim Sistemleri Bölüm - 7 Veri Tabanı Yönetim Sistemleri Bölüm - 7 İçerik Alt Sorgular Çoklu Tablolar (Tabloların Birleştirilmesi) Görünümler R. Orçun Madran 2 Alt Sorgular Uygulamada, bir sorgudan elde edilen sonuç, bir diğer

Detaylı

Veritabanı Tasarımı. SQL Deyimi Anatomisi

Veritabanı Tasarımı. SQL Deyimi Anatomisi Veritabanı Tasarımı SQL Deyimi Anatomisi Amaç Bu ders aşağıdaki hedefleri kapsamaktadır: Projeksiyon (projection), seçim (selection) ve birleştirme (join) ifadelerini doğru fonksiyonları/yetenekleri ile

Detaylı

Veritabanı Tasarımı. İlişkisel Veritabanı Kavramlarına Giriş

Veritabanı Tasarımı. İlişkisel Veritabanı Kavramlarına Giriş Veritabanı Tasarımı İlişkisel Veritabanı Kavramlarına Giriş Amaç Bu ders aşağıdaki hedefleri kapsamaktadır: Birincil anahtar tanımlama İkincil anahtar tanımlama Sütun bütünlüğü kuralı tanımlama Satır,

Detaylı

VERİ TABANI YÖNETİM SİSTEMLERİ I

VERİ TABANI YÖNETİM SİSTEMLERİ I BÖLÜM 11 11. SQL de JOIN (BİRLEŞTİRME) İŞLEMİ 11.1. JOIN (Birleştirme) İşlemi Veri tabanı kayıtları oluşturulurken bütün bilgiler bir tabloda değil de, birkaç tablo üzerinde tutulur. Bu dataların daha

Detaylı

2. NORMALİZASYON. Normalizasyon, taslak veri tabanı üzerinde birtakım işlemler yapılarak taslağı son haline yaklaştırma yöntemidir.

2. NORMALİZASYON. Normalizasyon, taslak veri tabanı üzerinde birtakım işlemler yapılarak taslağı son haline yaklaştırma yöntemidir. 2. NORMALİZASYON İlişkisel veri tabanları tasarlanırken verilerin gereksiz tekrarını, bilgilerin kaybını önlemek amacıyla normalizasyon işlemi uygulanması gerekir. Normalizasyon işlemi uygulanarak da ilişkilerin

Detaylı

Oracle Database 11g: Introduction to SQL

Oracle Database 11g: Introduction to SQL Oracle Database 11g: Introduction to SQL Mehmet Salih DEVECI GTECH-Kıdemli Veritabanı Yöneticisi Mehmetsalih.deveci@gtech.com.tr BÖLÜM- 1: SQL E GİRİŞ SELECT ifadesinin kabiliyetlerinin ortaya çıkarılması

Detaylı

İlişkisel Veri Tabanları I

İlişkisel Veri Tabanları I İlişkisel Veri Tabanları I Erdem Alparslan Bahçeşehir Üniversitesi 1 Veri Tabanı Modelleri Veri Tabanları tasarımında kullanılan modeller: Tablolar : Veriler tek bir tabloda veya tablo dizisinde tutulur

Detaylı

İLİŞKİSEL VERİ MODELİ

İLİŞKİSEL VERİ MODELİ İLİŞKİSEL VERİ MODELİ Tablolar ile Gösterim Her İlişki iki boyutlu bir tablo olarak gösterilir. Tablonun her sütununa bir nitelik atanır. Tablonun her satırı ise bir kaydı gösterir. Bilimsel kesimde daha

Detaylı

Birden Çok Tabloda Sorgulama (Join)

Birden Çok Tabloda Sorgulama (Join) Birden Çok Tabloda Sorgulama (Join) Join(Birleştirici), iki ya da daha fazla tabloyu aynı anda sorgulayarak bir sonuç tablosu (result table) oluşturmaya yarar. Örneğin: İki tabloyu birleştirici ile birleştirerek

Detaylı

Veri Tabanı Hafta Dersi

Veri Tabanı Hafta Dersi Veri Tabanı - 1 4. Hafta Dersi Dersin Hedefleri Fonksiyonel Bağımlılık Veri Tabanı Normalizasyonu Amaçları Kuralları Örnekleri Uygulanması Fonksiyonel Bağımlılık R nin ilişkiyi(relation) ; A ve B nin bir

Detaylı

Veritabanı ve Yönetim Sistemleri

Veritabanı ve Yönetim Sistemleri Veritabanı ve Yönetim Sistemleri Öğr. Gör. M. Mutlu YAPICI Ankara Üniversitesi Elmadağ Meslek Yüksekokulu Ders İzlencesi Hafta Modüller/İçerik/Konular 1. Hafta Temel Kavramlar 2. Hafta Veri Modelleri 3.

Detaylı

10-Veri Tabanları. www.cengizcetin.net

10-Veri Tabanları. www.cengizcetin.net 10-Veri Tabanları 1 VERİ TABANI VERİTABANI (DATABASE) Birbiri ile ilişkili bir veya daha fazla tablodan oluşan bilgi topluluğudur. Veri tabanındaki tablolara ulaşılarak sorgulama yapılır ve istenilen bilgiler

Detaylı

VeritabanıYönetimi Varlık İlişki Diyagramları. Yrd. Doç. Dr. Tuba KURBAN

VeritabanıYönetimi Varlık İlişki Diyagramları. Yrd. Doç. Dr. Tuba KURBAN VeritabanıYönetimi Varlık İlişki Diyagramları Yrd. Doç. Dr. Tuba KURBAN VeritabanıTasarımı - Projenin tasarım aşamasında veritabanı tasarımı çok iyi yapılmalıdır. Daha sonra yapılacak değişiklikler sorunlar

Detaylı

DAO İLE SQL KOMUTLARI. Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım.

DAO İLE SQL KOMUTLARI. Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım. DAO İLE SQL KOMUTLARI Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım. SQL-1 SELECT En basit SQL cümleciği oluşturmak için SELECT sözcüğü

Detaylı

Veritabanı Yönetim Sistemleri

Veritabanı Yönetim Sistemleri Veritabanı Yönetim Sistemleri (Veritabanı Tasarımı) İlişkisel Cebir Konular Biçimsel Sorgulama Dilleri İlişkisel Cebir İlişkisel Cebir İşlemleri Seçme (select) işlemi Projeksiyon (project) işlemi Birleşim

Detaylı

VERİTABANI ve YÖNETİMİ

VERİTABANI ve YÖNETİMİ VERİTABANI ve YÖNETİMİ Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü 2 BÖLÜM -7- VERİLERİ GRUPLAYARAK ANALİZ ETMEK 3 Genel Bakış Grup fonksiyonlarının tanımlanması, Gruplama işlemlerini, Gruplama

Detaylı

SQL Komutları (2) Uzm. Murat YAZICI

SQL Komutları (2) Uzm. Murat YAZICI SQL Komutları (2) Uzm. Murat YAZICI Sıralama Sıralama işlemi için SELECT ifadesinde ORDER BY kullanılır. Bu ifadede ASC kelimesi kullanılırsa sıralama küçükten büyüğe doğru (A-Z), DESC kullanılırsa büyükten

Detaylı

Varlık-İlişki Modeli (Entity-Relationship Model)

Varlık-İlişki Modeli (Entity-Relationship Model) Varlık-İlişki Modeli (Entity-Relationship Model) Varlık-ilişki modeli, ya da kısaca E-R modeli (Entity- Relationship model) 1976 yılında P.P. Chen tarafından geliştirilen bir modeldir. Bugüne kadar varlık-ilişki

Detaylı

Veritabanı sistemlerinde veri bütünlüğünü sağlayabilmek için CONSTRAINTS olarak adlandırılan bazı zorlayıcı ifadeler kullanılabilir.

Veritabanı sistemlerinde veri bütünlüğünü sağlayabilmek için CONSTRAINTS olarak adlandırılan bazı zorlayıcı ifadeler kullanılabilir. VERİ BÜTÜNLÜĞÜ VTYS lerde veri bütünlüğünü sağlamanın iki temel yolu vardır; Tanımlanabilir veri bütünlüğü ve prosedürel veri bütünlüğü. Tanımlanabilir veri bütünlüğü, tanımlanan nesnelerin kendi özellikleri

Detaylı

Veritabanı ve Yönetim Sistemleri

Veritabanı ve Yönetim Sistemleri Veritabanı ve Yönetim Sistemleri Öğr. Gör. M. Mutlu YAPICI Ankara Üniversitesi Elmadağ Meslek Yüksekokulu Ders İzlencesi Hafta Modüller/İçerik/Konular 1. Hafta Temel Kavramlar 2. Hafta Normalizasyon 3.

Detaylı

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız.

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız. Bu Derste Öğrenecekleriniz: 1- Birden Fazla Tablodan Sorgulama 2- Tablo Birleştirme işlemleri (JOIN) a. INNER JOIN b. OUTER JOIN i. LEFT OUTER JOIN ii. RIGHT OUTER JOIN iii. FULL OUTER JOIN 3- Tablo Ekleme

Detaylı

Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı

Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı Myadmin Üzerinden Anlatımı Bir Tablonun Farklı İsimlerdeki Eşdeğerleri İle Sorgulama Daha önceden tanımlanmış bir tablonun, farklı isimli, bir eşdeğerini oluşturarak sorgulamalarda kullanmak mümkün olabilir.

Detaylı

Veritabanı Yönetimi Bilgisayarların. Keşfi Hedefler. Veritabanı, Veri ve Bilgi. Veritabanı, Veri ve Bilgi. Veritabanı, Veri ve Bilgi

Veritabanı Yönetimi Bilgisayarların. Keşfi Hedefler. Veritabanı, Veri ve Bilgi. Veritabanı, Veri ve Bilgi. Veritabanı, Veri ve Bilgi Hedefler Veritabanı Yönetimi Bilgisayarların Discovering Keşfi 2010 Computers 2010 Living in a Digital World Dijital Dünyada Yaşamak Veritabanı terimini tanımlamak ve bir veritabanının veri ve bilgi ile

Detaylı

BIM 312 Database Management Systems. Veritabanı Kavramına Giriş

BIM 312 Database Management Systems. Veritabanı Kavramına Giriş BIM 312 Database Management Systems Veritabanı Kavramına Giriş Veritabanı Nedir? Veritabanı, birbirleriyle ilişkili verilerin hızlı ve verimli bir şekilde ulaşılmasına olanak verecek biçimde saklanmasıyla

Detaylı

Veritabanı Tasarımı Ve Yönetimi. Varlık-İlişki Modeli

Veritabanı Tasarımı Ve Yönetimi. Varlık-İlişki Modeli Veritabanı Tasarımı Ve Yönetimi Varlık-İlişki Modeli Veritabanı Tasarım Aşamaları Gereksinim Analizi Kavramsal Tasarım Mantıksal Tasarım İlişkilerin Normalizasyonu Veritabanı Uyarlaması Uygulama Programı

Detaylı

Çok tablolu sorgulamalar

Çok tablolu sorgulamalar Çok tablolu sorgulamalar Eğer birden fazla tabloda yer alan verilerin tek bir sorgu ile görüntülenmesi istenirse FROM kısmında ilgili tablolar araya virgül konularak yazılmalı, WHERE kısmında ise o tabloları

Detaylı

Veritabanı Yönetim Sistemleri (Veritabanı Tasarımı) Varlık İlişki Modeli

Veritabanı Yönetim Sistemleri (Veritabanı Tasarımı) Varlık İlişki Modeli Veritabanı Yönetim Sistemleri (Veritabanı Tasarımı) Varlık İlişki Modeli Konular Veritabanı Tasarım Aşamaları Kavramsal Tasarım Temel Kavramlar Varlıklar Arası İlişkiler Var Olma Bağımlılığı (Existence

Detaylı

Veri Tabanı II Alt Sorgular

Veri Tabanı II Alt Sorgular Veri Tabanı II Alt Sorgular Alt Sorgular Alt sorgular bir SQL sorgusunun içerisinde başka bir SQL sorgusu kullanılarak oluşturulan SQL ifadeleridir. Çoğunlukla SQL sorgusunun WHERE ve HAVING kısımlarında

Detaylı

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü Veri Tabanı ve Yönetimi (BİL 301)

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü Veri Tabanı ve Yönetimi (BİL 301) Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü Veri Tabanı ve Yönetimi (BİL 301) GENEL DERS BİLGİLERİ Öğretim Elemanı : Öğr. Gör. Erdal GÜVENOĞLU Ofis : MUH 313 Ofis Saatleri : Pazartesi: 10.00-12.00,

Detaylı

VERİTABANI Veritabanı Sorgulama

VERİTABANI Veritabanı Sorgulama VERİTABANI Veritabanı Sorgulama VERİ SORGULAMA DİLİ (DATA QUERY LANGUAGE) Veritabanı platformunda veri sorgulamak için geliştirilmiş en temel araç SQL (Structured Query Language)'dir. SQL'in veritabanı

Detaylı

Genel Programlama II

Genel Programlama II Genel Programlama II 18.04.2011 1 DİSK DOSYALARI İLE ÇALIŞMA DOSYALARIN AÇILMASI C programlama dilinde bir dosyayı kullanabilmek için, öncelikle o dosyanın açılması gerekmektedir. Hem okuma hem de yazma

Detaylı

SUNGURLU MESLEK YÜKSEKOKULU 5. T-SQL-2

SUNGURLU MESLEK YÜKSEKOKULU 5. T-SQL-2 SUNGURLU MESLEK YÜKSEKOKULU BİLGİSAYAR TEKNOLOJİLERİ/BİLGİSAYAR PROGRAMCILIĞI 2017-2018 GÜZ DÖNEMİ VERİ TABANI YÖNETİM SİSTEMLERİ-II 5. T-SQL-2 Öğr. Gör. Saliha Kevser KAVUNCU Sql Üç Alt Grupta İncelenir:

Detaylı

Veritabanı Yönetim Sistemleri (Veritabanı Kavramı) Veri Modelleri

Veritabanı Yönetim Sistemleri (Veritabanı Kavramı) Veri Modelleri Veritabanı Yönetim Sistemleri (Veritabanı Kavramı) Veri Modelleri Konular Veritabanı Tasarım Aşamaları Veri Modeli Nedir? Veri Modeli Temel Bileşenleri İş Kuralları (Business Rules) İş Kurallarını Veri

Detaylı

ICATT ÇEVİRİ UYGULAMASI SİSTEM MİMARİSİ VE VERİTABANI TASARIMI

ICATT ÇEVİRİ UYGULAMASI SİSTEM MİMARİSİ VE VERİTABANI TASARIMI ICATT ÇEVİRİ UYGULAMASI SİSTEM MİMARİSİ VE VERİTABANI TASARIMI İÇİNDEKİLER 1. GİRİŞ 1.1. KAPSAM 1.2. SİSTEM ÖZETİ 1.3. DOKÜMAN ÖZETİ 2. ÇALIŞMA KONSEPTİ 2.1. Yeni Kullanıcı Oluşturmak 2.2. Şirket Bilgilerini

Detaylı

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER VERİTABANI SORGULARI İÇİNDEKİLER Select İfadesi Insert İfadesi Update İfadesi Delete İfadesi Verileri Sıralamak Verileri Gruplandırmak Veriler Üzerinde Arama Yapmak NESNE TABANLI PROGRAMLAMA I Uzm. Orhan

Detaylı

SORGULAR VE ÇEŞİTLERİ II

SORGULAR VE ÇEŞİTLERİ II Ünite 8 SORGULAR VE ÇEŞİTLERİ II Öğr. Gör. Kemal ÖZCAN Bu ünitede, Sorgular ve Çeşitleri konusu ele alınacaktır. Yapılacaklar Burada yazılan SQL ifadeleri MS SQL SERVER, ORACLE ve MySQL veritabanı sistemlerinin

Detaylı

BTP 209 SİSTEM ANALİZİ VE TASARIMI

BTP 209 SİSTEM ANALİZİ VE TASARIMI BTP 209 SİSTEM ANALİZİ VE TASARIMI VERİ TABANLARI VE VERİ TABANI YÖNETİMİ Dr. Önder EYECİOĞLU 2012 VERİ TABANI VE VT YÖNETİMİ Veri Tabanı (DB), birbiriyle ilişkili verileri yönetmek ve sunmak için kullanılan

Detaylı

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim'

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim' Bu Derste Öğrenecekleriniz: 1- Veri Tabanı Adı Değiştirme 2- Nesnelerin Adını Değiştirme a. Tablo Adı Değiştirme b. Alan Adı Değiştirme c. Constraint (Kısıtlama) Adı Değiştirme 3- Tablo Düzenleme Komutları

Detaylı

VERİTABANI YÖNETİMİ. Veritabanı Normalizasyonu 5.HAFTA. Veritabanı Yönetimi Prof. Dr. İbrahim Çil

VERİTABANI YÖNETİMİ. Veritabanı Normalizasyonu 5.HAFTA. Veritabanı Yönetimi Prof. Dr. İbrahim Çil VERİTABANI YÖNETİMİ Veritabanı Normalizasyonu 5.HAFTA Normalizasyon Normalizasyon, bir veritabanındaki verileri düzene koyma işlemidir. Normalizasyon, veri tabanlarında çok fazla sütun ve satırdan oluşan

Detaylı

Tablolar Arası İlşikiler ve Alan Özellikleri Siparis.musteri_no musteri.musteri_no Siparis.urun_kodu musteri.urun_kodu

Tablolar Arası İlşikiler ve Alan Özellikleri Siparis.musteri_no musteri.musteri_no Siparis.urun_kodu musteri.urun_kodu SQL'DE VERİ İŞLEME KOMUTLARI SQL'de verileri işlemek için kullanılan komutlara DML (Data Manipulation Language Veri İşleme Dili) denilmektedir. Bu komutlar ile oluşturulan ifadeler tablolara kayıt eklemek,

Detaylı

Tablolar Arası İlşikiler ve Alan Özellikleri. Şekil 1. Magaza veritabanının tabloları ve tablolar arasındaki ilişkiler

Tablolar Arası İlşikiler ve Alan Özellikleri. Şekil 1. Magaza veritabanının tabloları ve tablolar arasındaki ilişkiler SQL'de Veri İşleme Komutları SQL'de verileri işlemek için kullanılan komutlara DML (Data Manipulation Language Veri İşleme Dili) denilmektedir. Bu komutlar ile oluşturulan ifadeler tablolara kayıt eklemek,

Detaylı

SQL (Structured Query Language)

SQL (Structured Query Language) SQL (Structured Query Language) Neden SQL? SQL çok yüksek seviyeli bir dildir. İngilizce bilen herkes bu dili kolayca öğrenebilir. Programlama dillerine göre öğrenilmesi çok daha kolaydır. Çünkü programlama

Detaylı

Basit SQL Sorguları Veritabanından verilerin SELECT cümleleri ile alınması işlemine sorgulama denir.

Basit SQL Sorguları Veritabanından verilerin SELECT cümleleri ile alınması işlemine sorgulama denir. SQL SELECT CÜMLELERİ Oracle birçok kullanışlı ve güçlü özellikleri olan bir veritabanıdır. Bu özelliklerinin birçoğu SQL ile ilgilidir. VTYS lerinin çoğunluğunda veriler ile çalışmak için SQL kullanılmaktadır.

Detaylı

Veritabanı Tasarımı. Sütun Değerlerini Güncelleme ve Satırları Silme

Veritabanı Tasarımı. Sütun Değerlerini Güncelleme ve Satırları Silme Veritabanı Tasarımı Sütun Değerlerini Güncelleme ve Satırları Silme Konular UPDATE komutunu oluşturmak ve çalıştırmak DELETE komutunu oluşturmak ve çalıştırmak Tabloda güncelleme yapmak ya da veri silmek

Detaylı

VERİTABANI Veritabanı Yönetimi

VERİTABANI Veritabanı Yönetimi VERİTABANI Veritabanı Yönetimi YAPILANDIRILMIŞ SORGULAMA DİLİ (SQL) Veritabanı yönetimi, veritabanının yapısal özelliklerini belirtmek ve değiştirmek, veritabanına kullanıcı erişimlerini ve yetkilerini

Detaylı

SQL veri tabalarına erişmek ve onları kullanmak için geliştirilmiş bir lisandır.

SQL veri tabalarına erişmek ve onları kullanmak için geliştirilmiş bir lisandır. SQL veri tabalarına erişmek ve onları kullanmak için geliştirilmiş bir lisandır. Bu dersimizde biz Microsoft SQL Server veritabanı sistemini kullanmayı öğreneceğiz. SQL Nedir? SQL Structured Query Language

Detaylı

Bölüm 1: Veritabanı Yönetim Sistemlerine Giriş

Bölüm 1: Veritabanı Yönetim Sistemlerine Giriş Bölüm 1: Veritabanı Yönetim Sistemlerine Giriş -1- Dr. Serkan DİŞLİTAŞ 1.1. Veri ve Bilgi (Data & Information) Hesaplama, saklama gibi çeşitli işlemler amacıyla bilgisayara verilen sayı, yazı, resim, ses,

Detaylı

Veri tabanı içinde bulunan tablolardakibazı sütunlarda bulunan bilgilerin, herkes tarafından görülmesi istenmeyebilir.

Veri tabanı içinde bulunan tablolardakibazı sütunlarda bulunan bilgilerin, herkes tarafından görülmesi istenmeyebilir. View Oluşturma Sql komutlarından view oluşturma ve faydaları, myadminde gösterimi VİEW OLUŞTURMANIN YARARLARI 1. Veri güvenliği Veri tabanı içinde bulunan tablolardakibazı sütunlarda bulunan bilgilerin,

Detaylı

Herhangi bir tablonun tekrarlı veriler içerdiği duruma birinci normal form denir. Birinci normal formu Aşağıdaki tablo ile ele alacağız.

Herhangi bir tablonun tekrarlı veriler içerdiği duruma birinci normal form denir. Birinci normal formu Aşağıdaki tablo ile ele alacağız. Normalleştirme ve Uygulaması Normalleştirme Neden Uygulanır: İlişkisel veritabanı oluşturmak için normalleştirmeyi bilmek çok önemlidir. Normalleştirme işlemini anlayabilmek için ise fonksiyonel bağımlılık

Detaylı

Aşağıdaki tabloyu inceleyin. Sorgulama işlemlerini bu tabloya göre yapacağız.

Aşağıdaki tabloyu inceleyin. Sorgulama işlemlerini bu tabloya göre yapacağız. Bu Derste Öğrenecekleriniz: Koşullu Sorgulamalar a. Karşılaştırma operatörleri b. Mantıksal operatörlerin kullanımı c. BETWEEN (Arasında) operatörü d. IS NULL Kullanımı e. Küme operatörü (IN) f. LIKE operatörü

Detaylı

Veritabanı ve Yönetim Sistemleri

Veritabanı ve Yönetim Sistemleri Veritabanı ve Yönetim Sistemleri Öğr. Gör. M. Mutlu YAPICI Ankara Üniversitesi Elmadağ Meslek Yüksekokulu Ders İzlencesi Hafta Modüller/İçerik/Konular 1. Hafta Temel Kavramlar 2. Hafta Veri Modelleri 3.

Detaylı

Fonksiyonel(İşlevsel) Bağımlılık

Fonksiyonel(İşlevsel) Bağımlılık 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

Detaylı

Tekrar. Veritabanı 2

Tekrar. Veritabanı 2 Tekrar Veritabanı 2 Veritabanı Nedir? Veritabanı ortaya çıkış hikayesi Saklanan ve işlenen veri miktarındaki artış Veri tabanı olmayan sistemin verilerinin kalıcı olmaması. Veritabanı; tanım olarak herhangi

Detaylı

08118 Veri Tabanı I. Database Management System. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı. Öğr.Gör. Murat KEÇECĠOĞLU

08118 Veri Tabanı I. Database Management System. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı. Öğr.Gör. Murat KEÇECĠOĞLU 08118 Veri Tabanı I Database Management System Elbistan Meslek Yüksek Okulu 2016 2017 Bahar Yarıyılı Öğr.Gör. Murat KEÇECĠOĞLU NORMALİZASYON KURALLARI Bir tablo içerisinde yer alacak kaydın nelerden oluştuğuna

Detaylı

3. Hafta Tablo İşlemleri BPR255 Veritabanı. Bu Derste Öğrenecekleriniz: 1. Tablo İşlemleri. 1.2. Kısıtlamalar (Constraints)

3. Hafta Tablo İşlemleri BPR255 Veritabanı. Bu Derste Öğrenecekleriniz: 1. Tablo İşlemleri. 1.2. Kısıtlamalar (Constraints) Bu Derste Öğrenecekleriniz: 1. Tablo İşlemleri 1.1. Tablo Oluşturma 1.2. Tablo Oluşturmada Kısıtlamalar Constraints 1.3. Tablo Silme a. NULL, NOT NULL b. PRIMARY KEY c. UNIQUE d. FOREIGN KEY e. CHECK f.

Detaylı

Veritabanı Tasarımı ve Yönetimi. Uzm. Murat YAZICI

Veritabanı Tasarımı ve Yönetimi. Uzm. Murat YAZICI Veritabanı Tasarımı ve Yönetimi Uzm. Murat YAZICI Veritabanı Tasarımı - Projenin tasarım aşamasında veritabanı tasarımı çok iyi yapılmalıdır. Daha sonra yapılacak değişiklikler sorunlar çıkartabilir veya

Detaylı

Veritabanı Tasarımı. Sütunlar, Karakterler ve Satırlar ile Çalışma

Veritabanı Tasarımı. Sütunlar, Karakterler ve Satırlar ile Çalışma Veritabanı Tasarımı Sütunlar, Karakterler ve Satırlar ile Çalışma Amaç Bu ders aşağıdaki hedefleri kapsamaktadır: Bir karakter ifadesi oluşturmak için diğer sütunları, aritmetik ifadeleri ya da sabit değerleri

Detaylı

BÖLÜM -7: TABLOLARI OLUŞTURMA VE YÖNETME

BÖLÜM -7: TABLOLARI OLUŞTURMA VE YÖNETME BÖLÜM -7: TABLOLARI OLUŞTURMA VE YÖNETME Ana veritabanı nesnelerini sınıflandırmak Tablo yapısını inceleme Tablo sütunlarının veri tiplerini listeleme Basit bir tablo oluşturma Constraint oluşturma Şema

Detaylı

Veritabanı Tasarımı. DML İşlemleri ve Görünümler

Veritabanı Tasarımı. DML İşlemleri ve Görünümler Veritabanı Tasarımı DML İşlemleri ve Görünümler Konular Basit bir görünümde DML işlemlerini gerçekleştiren bir sorgu yazma ve çalıştırma DML işlemleri kullanarak bir görünümü değiştirme yeteneğini kısıtlayan

Detaylı

Elbistan Meslek Yüksek Okulu GÜZ Yarıyılı Ara Öğr. Gör. Murat KEÇECĠOĞLU

Elbistan Meslek Yüksek Okulu GÜZ Yarıyılı Ara Öğr. Gör. Murat KEÇECĠOĞLU Elbistan Meslek Yüksek Okulu 2015 2016 GÜZ Yarıyılı 28-29 Ara. 2015 Öğr. Gör. Murat KEÇECĠOĞLU Indexler İndeks, tablolardan veri çekmek için gerekli sorgular çalıştırılırken gereken süreyi azaltmak amacıyla

Detaylı