Bazı Veri tabanları sadece 1 tablodan oluşmaz. Bunun sebebi genellikle veri tekrarını önlemektir. Bu şekilde oluşturulmuş veri tabanlarında, tablolardaki değerleri birbirleriyle ilişkili bir şekilde kullanabilmek için “Tablo Birleştirme” işlemi yapılır.
Bu birleştirme işlemi 2 farklı tablo için de söz konusu olabilir, ikiden fazla sayıda tablo için de söz konusu olabilir. Dikkat edilmesi gereken nokta, tabloların Primary Key ve Foreign Key‘ler ile birbirlerine bağlanmış olması gerektiğidir.
Birkaç örnek yapmak üzere, 2 farklı tablo oluşturalım ve onları birbirine bağlayalım :
Filmler Tablosu ;
| Film_No | Ad | Tarih | IMDB_Puan | Tur_ID |
| 1 | The Shawshank Redemption | 1994 | 9,2 | 1 |
| 2 | The Dark Knight | 2008 | 8,8 | 7 |
| 3 | Fight Club | 1999 | 8,8 | 1 |
| 4 | Forrest Gump | 1994 | 8,6 | |
| 5 | Leon | 1994 | 8,6 | 1 |
| 6 | V For Vandetta | 2006 | 8,1 | 7 |
| 7 | A Beautiful Mind | 2006 | 8,0 | |
| 8 | Eternal Sunshine of the Spotless Mind | 2004 | 8,4 | 2 |
| 9 | Inception | 2010 | 8,8 | 3 |
| 10 | Good Will Hunting | 1997 | 8,1 | 1 |
Türler tablosu ;
| Tur_ID | Ad |
| 1 | Dram |
| 2 | Romantik |
| 1 | Dram |
| 3 | Bilim Kurgu |
| 4 | Macera |
| 1 | Dram |
| 5 | Gerilim |
| 6 | Korku |
| 7 | Suç |

Gördüğünüz gibi tablolar Tur_ID sütunları temel alınarak birbirlerine bağlandı. Bu arada her filmin sadece bir türe sahip olabileceğini varsayarak bu tabloları oluşturdum.
Not : Filmler tablosunda bazı filmlere tür belirlemedim, bunun sebebi yazının devamında yer alacak.
Tablo birleştirme işlemini 2 farklı yöntem ile yapabilirsiniz ;
- WHERE ile sorgu koşulu belirleyerek Tablo Birleştirme
- JOIN komutlarını kullanarak Tablo Birleştirme
WHERE ile Sorgu Koşulu Belirleyerek Tablo Birleştirme
Şimdi iki tabloyu birleştirerek, filmlerin türlerine ulaşalım. Bunun için WHERE komutu ile birleştirme işlemine bir “Birleştirme Koşulu” belirlememiz gerekiyor.
SELECT F.Ad AS Film_Adı, T.Ad AS Tur_Adı FROM Filmler F, Turler T WHERE F.Tur_ID = T.Tur_ID
Burada F ve T, tablolar için belirlenmiş kısa adlardır. İlk kez görüyorsanız buradaki dökümanı inceleyebilirsiniz.
Eğer birleştirme koşulu belirtilmeseydi, VTYS iki farklı tablodaki her değer için kartezyen çarpım yapacaktı ve 70 farklı sonuç elde edecektik. Dolayısıyla istediğimiz sonuca ulaşamayacaktık.
Tablo birleştirme 2 den fazla sayıda tablo için de uygulanabilir. Böyle bir durumda sorgu koşulu giderek büyüyecektir.
JOIN komutlarını kullanarak Tablo Birleştirme
Tablo birleştirirken, WHERE ile birleştirme koşulu kullanmak yerine JOIN ifadelerini kullanabilirsiniz. Bu ifadeler dörde ayrılı ve şu şekildedir ;
- INNER JOIN
- LEFT JOIN
- RIGHT JOIN
- FULL JOIN
Dikkat ettiyseniz yukarıda Türü olmayan filmler var. Sorgu koşulu ile tablo birleştiriyorsanız, türü olmayan filmler sorgu sonucunda bize gösterilmeyecektir. Çünkü Filmler tablosundaki Tur_ID sütununun, Türler tablosunda bir karşılığı olmayacaktır. Fakat Join ifadelerini kullanarak tablo birleştirme yapıyorsanız, türü olmayan filmleri de gösterebilirsiniz.
Yani JOIN ifadeleri 2 tablo için eşleşen verileri gösterip göstermeme durumlarına göre ayrılmışlardır.
INNER JOIN : 2 tablo için de boş verileri, yani bir tabloda Tur_ID’si olan fakat diğerinde olmayan verileri temizler ve göstermez. Aşğıdaki gibi kullanabilirsiniz ;
SELECT F.Ad AS Film_Adı, T.Ad AS Tur_Adı FROM Filmler F INNER JOIN Turler T ON F.Tur_ID = T.Tur_ID ORDER BY T.Ad
LEFT JOIN : İlk (Filmler) tablo için boş olan verileri de göstermenizi sağlar. Yani Filmler tablosunda Tur_ID değeri boş olarak gösterilecektir.
Aşağıdaki sorgu, türü olmayan filmler dahil tüm filmlerin adlarını, türlerini ve IMDB Puanlarını, IMDB Puanlarına göre sıralayarak listeleyecektir.
SELECT F.Ad, T.Ad, IMDB_Puan FROM Filmler F LEFT JOIN Turler T ON F.Tur_ID = T.Tur_ID ORDER BY IMDB_Puan
RIGHT JOIN : İkinci (Türler) tablo için boş olan verileri de göstermenizi sağlar. Aşağıdaki gibi kullanabilirsiniz ;
SELECT F.Ad, T.Ad, IMDB_Puan FROM Filmler F RIGHT JOIN Turler T ON F.Tur_ID = T.Tur_ID ORDER BY IMDB_Puan
FULL JOIN : İki tablo için de boş olan değerler gösterilir.
SELECT F.Ad, T.Ad, IMDB_Puan FROM Filmler F FULL JOIN Turler T ON F.Tur_ID = T.Tur_ID
Not : Full Join ifadesini Access’de çalıştıramadım.
Sonuç – Özet
Tablo birleştirme işlemini 2 farklı şekilde yapabilirsiniz ; WHERE ile sorgu koşulu kullanmak ve JOIN ifadelerini kullanmak.
WHERE ile sorgu koşulu oluşturmak için 2 tablonun Primary Key ve Foreign Key sütunları baz alınır ve onlar üzerinden birleştirme işlemi yapılır.
JOIN ifadeleri ile tablo birleştirilirken eşleşme durumları önemlidir. Eşleşme durumalarına göre dörde ayrılmaktadırlar : INNER, LEFT, RIGHT, FULL JOIN.







Henüz yorum yapılmamış