VERİTABANI YÖNETİM SİSTEMLERİ 1 Öğr.Gör.Emre KAÇMAZ ANADOLU ÜNİVERSİTESİ
ÇOKLU TABLOLAR ile İŞLEMLER Bazı durumlarda veriler birden fazla tablo üzerinde yer alabilir, bu durumda tablolar birleştirilmek zorundadır. PERSONEL BÖLÜM PERSONEL_NO ADI BÖLÜM_NO BÖLÜM_NO ADI KONUM PERSONEL_NO BÖLÜM_NO KONUM
Tabloların Birleştirilmesi Birden fazla tablonun birleştirilmesi işlemine birleştirme (join) denilir. Bu işlem tabloların aynı değerler içeren sütunları yardımıyla yapılır. SELECT tablo1.sütun1, tablo2.sütun2 FROM tablo1,tablo2 WHERE tablo1.sütun1=tablo2.sütun2
Kartezyen Çarpım İki tablo içerisinde bir birleştirme koşulu yoksa, o zaman kartezyen çarpım sözkonusudur. Bunun dışında birleştirme koşulu geçersiz ise ve birinci tablodaki tüm satırlar ikinci tablodaki tüm satırlar ile birleştirilemiyorsa, yine kartezyen çarpımdan söz edilebilir. Örnek: SQL>SELECT Personel_No,Adı,Bölüm_Adı FROM PERSONEL, BÖLÜM; Burada “personel tablosundaki varlık adedi x Bölüm tablosundaki varlık adedi” nce varlık elde edilir. Çünkü bir koşul tanımlanmadı.
Tablolarda Birleştirme Türleri EŞİT OLANI BİRLEŞTİRME Basit birleştirme, iç birleştirme de adı verilir. SELECT tablo1.sütun1, tablo2.sütun2 FROM tablo1,tablo2 WHERE tablo1.sütun1=tablo2.sütun2 PERSONEL BÖLÜM PERSONEL_NO ADI BÖLÜM_NO BÖLÜM_NO ADI KONUM Dış Anahtar Birincil Anahtar
Farklı tablolardan alınan sütun isimlerinde benzerlik olduğunda SQL bunu ayırd edemeyeceğinden, muhakkak başında tablo ismiyle çağrılmalıdır. Bazen sorgu cümlelerinin kısaltılması maksadıyla tablo isimleri daha kısa isimlerle yeniden adlandırılır. SELECT P.Personel_No, P.Adı, P.Bölüm_No, B.Bölüm_Adı, B.Konum FROM Personel P, Bölüm B WHERE P.Bölüm_No=B.Bölüm_No;
Birleştirme koşulunda birden fazla koşul yer alabilir. ÖRNEK: AYŞE isimli öğrencinin öğrenci numarası, adı, bölüm adı ve bölümünün konumu listelemek için; SQL> SELECT Ö.Öğrenci_No, Ö.Adı, B.Bölüm_Adı, B.Konum FROM Öğrenci Ö, Bölüm B WHERE Ö.Bölüm_No=B.Bölüm_No AND Ö.Adı= ‘AYŞE’;
EŞİTİ OLMAYAN BİRLEŞTİRME İki tablonun sütunları arasında doğrudan uyum yoksa buna eşiti olmayan birleştirme denir. PERSONEL(Personel_No, Adı, Yöneticisi, Ücret, Bölüm_No) ÜCRET_DÜZEY(Derece, EnAz, EnÇok) Yukarıdaki iki tabloyu birleştirebilecek bir ortak sütun yoktur. Ancak; SELECT Adı, Ücret, Derece FROM PERSONEL,ÜCRET_DÜZEY WHERE Ücret BETWEEN EnAz AND EnÇok;
DIŞ BİRLEŞTİRME Eşiti olan birleştirmede eşleşen sütunlarda eşleşemeyen varlıklar yazılmıyordu, bunları da yazdırmak için Dış Birleştirme kullanılır. Personel Bölüm Adı Bölüm_No Sedat 01 Özgür Muzaffer 02 Ali Yavuz 03 Bölüm_No Bölüm_Adı Konum 01 Bilgisayar MMF 02 Çevre 03 Elektronik 04 Matematik FenF
SQL> SELECT P.Adı, P.Bölüm_No, B.Bölüm_No, B.Bölüm_Adı FROM PERSONEL P, BÖLÜM B WHERE P.Bölüm_No(+)=B.Bölüm_No; Adı Bölüm_No Bölüm_Adı Sedat 01 Bilgisayar Özgür 01 Bilgisayar Muzaffer 02 Çevre Ali Yavuz 03 Elektronik Matematik Bu deyimi MS Access de tanımlamak için LEFT JOIN...ON kullanırız. SELECT P.Adı, B.Bölüm_Adı FROM BÖLÜM B LEFT JOIN PERSONEL P ON B.Bölüm_No = P.Bölüm_No;
KENDİNE BİRLEŞTİRME Bazı uygulamalarda birleştirme işlemi tek bir tablonun kendi sütunları içerisinde yapılmaktadır. Personel_No Adı Yöneticisi 101 BURAK 250 ERSİN 120 SELİN 105 140 DİLARA BEGÜM Personel_No Adı 101 BURAK 250 ERSİN 120 SELİN 105 BEGÜM 140 DİLARA
SQL> SELECT P.Personel_No AS No, P.Adı AS Personel, Y.Adı AS Yöneticisi FROM PERSONEL P, PERSONEL Y WHERE Y.Personel_No=P.Yöneticisi; No Personel Yöneticisi Begüm Burak 120 Selin Begüm 140 Dilara Begüm .
Küme Operatörleri ile Birleştirme UNION ve UNION ALL Union, verilen koşul ifadesine uygun olarak, çift kayıtların gözardı edilerek her iki kümedeki tüm kayıtları seçer. Union All, çift kayıtları da dahil eden birleştirme işlemidir. SQL> SELECT Adı,Görevi FROM PERSONEL WHERE Adı LIKE ‘A*’ UNION SELECT Adı, Görevi FROM PERSONEL WHERE Görevi LIKE ‘M*’;
INTERSECT Her iki koşula da uygun varlıkları elde etmede kullanılır. Küme kesişimi olarak da algılanabilir. SQL> SELECT Adı,Görevi FROM PERSONEL WHERE Adı LIKE ‘A*’ SELECT Adı, Görevi FROM PERSONEL WHERE Görevi LIKE ‘M*’;
MINUS Birinci tabloda olan ikinci tabloda olmayan kayıtları ayıklamada kullanılmaktadır. Kümesel fark işlemi olarak düşünülebilir (A/B) SQL> SELECT Adı,Görevi FROM PERSONEL WHERE Adı LIKE ‘A*’ SELECT Adı, Görevi FROM PERSONEL WHERE Görevi LIKE ‘M*’;