veritabanı yönetim sistemleri-i

30
Veritabanı Yönetim Sistemleri-I Ders 3 Birden fazla tabloyu birleştirmek Equi-join INNER JOIN OUTER JOIN

Upload: jadon

Post on 04-Jan-2016

58 views

Category:

Documents


3 download

DESCRIPTION

Veritabanı Yönetim Sistemleri-I. Ders 3 Birden fazla tabloyu birleştirmek Equi - join INNER JOIN OUTER JOIN. Tabloları birleştirmek. SELECT ile oluşturulmak istenen listede bulunan alanlar birbirinden farklı tablolarda bulunuyorsa, tabloları birleştirerek sorgulamak gerekiyor - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Veritabanı Yönetim Sistemleri-I

Veritabanı Yönetim Sistemleri-I

Ders 3 Birden fazla tabloyu birleştirmekEqui-joinINNER JOINOUTER JOIN

Page 2: Veritabanı Yönetim Sistemleri-I

Tabloları birleştirmekSELECT ile oluşturulmak istenen listede

bulunan alanlar birbirinden farklı tablolarda bulunuyorsa, tabloları birleştirerek sorgulamak gerekiyor

Birden fazla tabloyu birleştirerek sorgulamak için JOIN ifadesi kullanılır.

Tablo birleştirmenin pek çok türü vardır, önde gelen bazıları şunlardır◦ INNER JOIN◦EQUI-JOIN◦OUTER JOIN

Page 3: Veritabanı Yönetim Sistemleri-I

Tabloları birleştirmek Örneğin ürünlerin adlarını, fiyatları, satıcı adlarını ve satıcı şehirlerini

yanyana listelemek istersek göreceğiz ki istenen alanlar iki farklı tabloda bulunmaktadır

saticilar tablosu

urunler tablosu

Page 4: Veritabanı Yönetim Sistemleri-I

Tabloları birleştirmekOluşturulmak istenen liste aşağıdaki gibi olacaktır

saticilar tablosu

urunler tablosu

Page 5: Veritabanı Yönetim Sistemleri-I

Tabloları birleştirmek İki tablodan ilişkili alanları alırken, şu adımlar

dikkate alınır◦ Bahsi geçen tablolar mantıksal olarak ilişkili olmalıdır◦ İki tablodaki tüm satırlar değil, sadece mantıksal

olarak ilişkili satırlar yanyana getirilir◦ Daha iki tablodaki satırların yanyana getirilmesi

sonucu oluşan yeni tablodan istenen alanlar seçilebilir

Page 6: Veritabanı Yönetim Sistemleri-I

Tabloları birleştirmek İki tabloda mantıksal olarak ilişkili satırların birleştirilmesi

Urunler tablosundaki satici_id = ‘DLL01’ olan satırsaticilar tablosundaki satici_id = ‘DLL01’ olan satırla birleştiriliyor

Page 7: Veritabanı Yönetim Sistemleri-I

Tablo birleştirmeBenzer şekilde diğer satırlarda

ikinci tablodaki ilgili satırlarla birleştiriliyor

BİRLEŞTİRME KURALIurunler.satici_id = saticilar.satici_id

Page 8: Veritabanı Yönetim Sistemleri-I

Tablo birleştirmeTablo birleştirme sırasında en

kolay yol equi-join yazımını kullanmaktadır◦Birleştirilecek tablolar virgülle

ayrılarak FROM’dan sonra yazılır◦Birleştirme şartı (yani hangi satırların

yanyana geleceğine dair şart) WHERE ifadesinde yazılır

◦SELECT ile seçilecek sütunlardan (alanlardan) önce alanın hangi tablodan geleceği yazılır

◦İstenirse tablo isimleri için kısa adlar (alias) kullanılabilir

Page 9: Veritabanı Yönetim Sistemleri-I

Tablo birleştirmeÜrünlerin adlarını, fiyatları, satıcı adlarını ve

satıcı şehirlerini yanyana listeleyen SQL sorgusu

Tablolar virgülle ayrılmış olarak yazılır Satır birleştirme şartı (her iki

tabloda aynı olan değerler) verilir

Seçilen alanlar“tablo.alan”

formatında yazılır

Page 10: Veritabanı Yönetim Sistemleri-I

Tablo birleştirmeTablo isimlerine “alias – kısa ad” vererek sorgu biraz daha sadeleştirilebilir (Ör: saticilar için “s”, urunler için “u” kısa adı kullanılabilir)

Page 11: Veritabanı Yönetim Sistemleri-I

Tablo birleştirmeİkinci bir örnek:

◦Sipariş edilen ürünlerin (sip_edilen), urun_id, sip_num bilgilerini ile urun_ad bilgilerini listeleyiniz (urun ad bilgisi urunler tablosundadır)

Page 12: Veritabanı Yönetim Sistemleri-I

Tablo birleştirmeTablo isimler için yine kısa ad kullanılmıştır

Page 13: Veritabanı Yönetim Sistemleri-I

Tablo birleştirme Equi-join ile yapılan işi INNER JOIN ile de yapabiliriz. Bu JOIN türü yazım olarak biraz farklıdır ama aynı işi yapmaktadır. İki yazımı kıyaslayalım:

SELECT alanlarFROM tablo1, tablo2WHERE tablo1.alan1 = tablo2.alan2

Equi-join yazımı

SELECT alanlarFROM tablo1INNER JOIN tablo 2 ON tablo1.alan1 = tablo2.alan2

INNER JOIN yazımı

“ON” anahtar kelimesi şart belirtmek için kullanılmaktadır

Page 14: Veritabanı Yönetim Sistemleri-I

Tablo birleştirmeİlk sorgumuzu INNER JOIN ile yazmış

olsaydık, şöyle yazmamız gerekirdi

Page 15: Veritabanı Yönetim Sistemleri-I

Tablo birleştirmeBirden fazla tabloyu aynı anda

birleştirmek için yazılan ifadeleri her tablo için tekrar etmek gerekirSELECT alanlarFROM tablo1INNER JOIN tablo 2 ON tablo1.alan1 = tablo2.alan2INNER JOIN tablo3 ON tablo3.alan3 = tablo2.alan2INNER JOIN tablo4 ON tablo4.alan4 = tablo3.alan3…….

Page 16: Veritabanı Yönetim Sistemleri-I

Tablo birleştirmeÖrneğin şu aşağıdaki alanlari içeren liste

isteniyor olsun:◦ Her bir sipariş edilen ürünün sipariş numarasını ve

urun_id bilgisini (sip_edilen tablosundan)◦ Siparişin tarihini (siparisler tablosundan), ◦ Siparişi veren müşterinin adını (musteriler

tablosundan)

Page 17: Veritabanı Yönetim Sistemleri-I

Tablo birleştirme

Page 18: Veritabanı Yönetim Sistemleri-I

Tablo birleştimeAynı sorgu Equi-Join ile şöyle

yazılabilirdi

Tüm birleştirme şartları “AND” ile yanyana

yazılır

Tüm tablolar virgülle ayrılarak yanyana

yazılırlar

Page 19: Veritabanı Yönetim Sistemleri-I

Tablo birleştirmeOUTER JOIN

◦Bazen birleştirilecek iki tabloda birinci tabloda bulunan satırın, ikinci tabloda bir eşleşmesi olmayabilir.

◦Bu durumda INNER JOIN ve EQUI-JOIN sorgularında, ikinci tabloda eşleşmesi bulunmayan satırlar sorgu dışında bırakılırlar

◦Ör: Satici_id değeri, satıcılar tablosunda bir satıcıya işaret etmeyen ürün satırları gibi

Page 20: Veritabanı Yönetim Sistemleri-I

Tablo birleştirmeOUTER JOIN (devam)

◦Eğer birinci tablodaki tüm satırlar eşleşme olmamasına rağmen listeye eklensin ve eşleşme satırı boş bırakılsın isteniyorsa OUTER JOIN kullanılır Birinci tablodaki satır baz alınarak

eşleşme yapılacaksa LEFT OUTER JOIN İkinci tablodaki satır baz alınarak eşleşme

yapılacaksa RIGHT OUTER JOIN kullanılır

Page 21: Veritabanı Yönetim Sistemleri-I

Tablo birleştirmeÖrneğin siparişler ve müşteriler

tablolarını incelersek:◦Her siparişin bir müşteriye ait olduğunu,

yani siparişler tablosundaki her sip_id’nin musteriler tablosunda bir must_id’e denk geldiğini

◦Fakat her müşterinin bir sipariş vermemesinden dolayı, musteriler tablosundaki her must_id’nin , siparisler tablosundaki bir sip_id’e denk gelmediğini görürür

Page 22: Veritabanı Yönetim Sistemleri-I

Tablo birleştirmeTüm siparişler herhangi bir müşteri ile ilişkiliFakat tüm müşterilerin en az bir siparişi

bulunmamaktadır (Ör: 1000000002 nolu müşteri)

Page 23: Veritabanı Yönetim Sistemleri-I

Tablo birleştirmeDolayısıyla INNER JOIN veya EQUI-JOIN

ile yapılan tüm sorgularda 10000004 nolu müşteri her zaman liste dışında kalacaktır (sipariş kaydı olmadığı için)

Eğer bu müşteriyi de listeye dahil etmek istiyorsak LEFT OUTER JOIN kullanmamız gerekir

Bu durumda bu müşterinin sipariş kaydının karşısında NULL ifadeler olacaktır (siparişi olmadığını gösterir)

Page 24: Veritabanı Yönetim Sistemleri-I

Tablo birleştirme 100000001 kodlu müşteriye ait 2 satır olduğuna 100000004 kodlu müşterinin karşısındaki değerlerin NULL

olduğuna dikkat ediniz

Page 25: Veritabanı Yönetim Sistemleri-I

Tablo birleştirme Aynı sorgu INNER JOIN ile yazılsaydı (sadece INNER yerine

LEFT OUTER yazmak yeterli) satır sayısı bir tane azalacaktı.

Page 26: Veritabanı Yönetim Sistemleri-I

Tablo birleştirmeAlternatif olarak listeyi sadece bu müşteriyi

listeleyecek şekilde, yani hiç siparişi olmayan müşterileri gösterecek şekilde, tekrar da yazabiliriz

Page 27: Veritabanı Yönetim Sistemleri-I

Tablo birleştirmeJOIN ve GROUP BY kullanımı

◦Tablo birleştirme sonrasında ortaya çıkan geçici tablodan istenilen alan seçilebildiği gibi diğer SQL işlemleri de yapılabilir

◦Örneğin tablolar birleştikten sonra birleşen yeni tablo üzerinde gruplama (GROUP BY), sıralama (ORDER BY) veya filtreleme (WHERE) kullanılabilir

◦Normal bir tablodaki sorgulara göre tek fark, alanları WHERE, GROUP BY, ORDER BY içinde yazarken, tablo adı ile birlikte yazmak gerekir (tablo.alan formatında)

Page 28: Veritabanı Yönetim Sistemleri-I

Tablo birleştirmeÖrneğin aşağıdaki sorgu, tablo birleştirme

yapmadan normal bir gruplama işlemini içermektedir

Peki ya gruplamayı satici_id yerine satici_ad alanına göre yapmak istersek?

(Bu alan urunler tablosunda değil, saticilar tablosundadır)

Page 29: Veritabanı Yönetim Sistemleri-I

Tablo birleştirmeBu durumda önce iki tablo birleştirilir, daha

sonra iki tablodaki alanlara göre gruplama tekrar yazılır

Page 30: Veritabanı Yönetim Sistemleri-I