SQL 5 : Tablo Birleştirme ve Join Komutları

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.

Benzer Yazılar

Yorumlar

Yorum Yazın

Su elementleri kullanabilirsiniz : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Arama
RSS
Beni yukari isinla