Mssql Server INNER JOIN - Tablo Birleştirme İşlemi / Ders 6
 

Mssql Server INNER JOIN - Tablo Birleştirme İşlemi  / Ders  6(VİDEO)

Bu video çekimim de ve makalemde 2 veya daha fazla tablo birleştirmede kullanılan komut olan INNER JOIN komutunu uygulama örnek ile anlatacağım. Ve Join işlemlerinde karşılaşılan bir hata olan Ambiguous column name ' ' hatasının sebebi ve çözümüne de değineceğim .

Sql Server tablo birleştirme çok sıklıkla kullanılan bir işlemdir.Tablolar JOIN işlemi ile yada JOIN işlemi olmadan da birleşebilir.Join işlemi olmadan yapılan birleştirm kartezyen çarpım tekniği ile olur ve bu şekilde bir birleştirme ihtiyaç duyulmadıkça kullanılmaz.JOIN ile yapılan birleştirmelerde ON komutundan sonra bir koşul belirtilmek zorunluluğu vardır.Bu koşulda iki tablo birleştirirken ortak bir sütun olması gerekir ve o sütun üzerinde birleştirme işlemi yapılmalıdır bundan dolayı kaynaklanmaktadır.

Örneğin : Kategori ve Urun şeklinde 2 tablom bulunsun.Kategori tablosunda Id ve KategoriAd sütunları bulunsun. Urun tablosunda da Id , KategoriId veUrunAd sütunları bulunsun.Yani her ürün eklenirken Kategorisi olmalıdır , KategoriId değeri ile bu belirtilmelidir.Tablolarımızda da içerikleri aşağıdaki gibi olsun.


İstenilen şu  Urun tablosundaki tüm ürünler KategoriAd'lari ile birlikte listelensin.Fakat sorun şu ki Urun tablosunda KategoriAd sütunu bulunmamakta , KategoriId sütunu bulunmakta , KategoriId sütununa karşılık gelen KategoriAd değerleri Kategori tablosunda bulunmakta.

Böyle bir durumda iki tablo birleştirilir.Normal bir birleştirme işlemi yapıldığında Kartezten çarpım şeklinde Urun tablosundaki her satır için 3 satır listelenecektir .
SELECT * FROM Urun , Kategori  bu şekilde sorgu çalıştırıldığında 18 satır listelenecektir.

Örneğin pantolon ürünü için  yukarıdaki şekilde görüldüğü gibi 3 satır var her satırda 3 Kategori içinde listelenmiş durumda.Her ürün  için 3 kategori adı ile listeleme yapılmıştır.Fakat biz yalnızca her ürün için yalnızca bulunduğu kategori listelensin istiyorsak  yeşile alınan alanlar içine iyi bakalım KategoriId ile Id değeri eşit olanlar yalnızca listelensin deseydik pantolon için 1 satır olacaktı ve giyim olacaktı.

Yani bu şekilde bir şarta bağlı birleştirme yapmak istiyorsa JOIN komut yapısı kullanılır.Bu dersimizde de INNER JOIN yapısını inceleyeceğiz.

INNER JOIN Yapısına göre tekrar birleştirme işlemini yapalım
SELECT * FROM Urun INNER JOIN Kategori ON Urun.Kategori.Id=Kategori.Id   bu şekilde yazıldığında sonuç aşağıdaki gibi olacaktır.


Urun tablosundaki KategoriId ile Kategori tablosundaki Id değeri eşit olan ürünleirin kategori adı ile getirilmesini isteminde bulunduğumuzdan bu şekilde başarmış oluruz.

Join işlemleri yaparken karşılaşacağımız bir hata olan ,

Ambiguous column name ' ' Hatası ve Çözümü

Bu hata 2 veya daha fazla tablo birleştirilirken bu tablolarda aynı sütun isminde sütunlar varsa ve ben select işleminde bi sütun ismi yazdığımda bu sütun ismi iki veya daha fazla tabloda ortak olan bir sütun ismi ise bu hata çıkar ve derki hangi tablodakini istiyorsun birden çok talboda bu sütun ismi var sen hangi tablodakini istiyorsun anlamında hata göstergesi çıkar.

Örneğin üst örnekte resimde belirttiğimiz tablolarda örnek yapalım
SELECT UrunAd , KategoriAd , Id from Urun INNER JOIN Kategori ON Urun.Kategori.Id =Kategori.Id  yazıp çalıştırdığımda Ambiguous column name 'Id' hatasını verecektir.Çünkü Id hem Kategori hem de Urun tablosunda sütun ismi olarak kullanılıyor sen hangi tablodakini kullanmak istiyorsun bunu belirtmelisin diyor.Hangi tablonunkini görmek istiyorsak Tabloİsmi.Sütunİsmi  yazılır. Örneğin Kategori tablosundaki Id değerini getirmesini istiyorsak

SELECT UrunAd , KategoriAd , Kategori.Id from Urun INNER JOIN Kategori ON Urun.Kategori.Id =Kategori.Id  , şeklinde yazılır.

Anlattığım kavramların uygulama videosu



İyi Çalışmalar Dilerim
 

 

Author: Engin ATALAY
Date: 23.02.2013 20:24:04
View Count: 5394
 
 

COMMENTS
 
Resim Yüklenemedi
orhan
23 Ağustos 2015 14:47
teşekkür. Çok net açıklama olmuş. hocam left right join ve triger lerden de bahseder misiniz.
 
 
 
 
 
 
 
 
 
 
 
 
WRITE COMMENT
 
 
Your Name :
 
 
 
E-mail :
 
 
 
Your Message :
 
 
 
 
 
 
 
This project : ASP.NET MVC , RAZOR, Entity Framework , CSS , HTML , JQUERY(2.0.2) , AJAX the C# side-tier architecture was developed with logic.
 
Yukarı Çık