logo
Welcome Guest! To enable all features please Giriş or Kayıt.

Bildirim

Icon
Error

Ayarlar
Son mesaja git Go to first unread
mehmetzekikir  
#1 Gönderildi : 7 Mayıs 2014 Çarşamba 16:39:40(UTC)
mehmetzekikir

Sıralama: Administration

Gruplar: Administrators
Katılan: 6.05.2014(UTC)
Mesajlar: 670

19 Kere Teşekkür Etti.
152 Mesajına Toplam 253 Kere Teşekkür Edildi.
Belki Sql'in en önemli olup ama öğrenen öğrencilerin en çok anlamakta zorlandığı konudur Joinler. Veri tabanında join i tam olarak öğrendikten sonra yepyeni bir dünya açılacaktır yazılımcının önünde. Çünkü sürekli söylenen ilişkisel veri tabanının gücünü sonuna kadar hissedecektir yazılımcı.

Join adından anlaşılacağı gibi bağlamak birleştirmek anlamındadır.İlişkisel Veri tabanı dizaynı konusunda dikkat etmemiz gereken bir konu olarak şundan bahsetmiştik.İki tabloyu bir birine bağlayacaksak mutlaka birinin id sini ona vermemiz gerekir demiştik.

Yeniden örneklendirirsek. Bir adet ürün tablomuz olsun bu ürün tablosunda UrunId ve UrunAdi kolonları olsun. Bir de bu ürünün özelliklerinin tutulduğu UrunOzellik tablomuz olsun. Burada da kolon olarak UrunOzellikId , UrunFiyati , UrunAgirligi ve UrunId olsun. Şimdi kendimize sormamız gereken soru neden UrunOzellik tablosuna UrunId kolonunu koyduk. Çünkü bir şekilde Ürün ile Ürün Özelliği birbirine bağlamak zorundaydık. Mesala biz bir sorgu yazsak ve yazdığımız sorgu bize ürün adını ürün fiyatını gösterse,

Kod:

select u.UrunAdi, ou.UrunFiyati  from Urun u
inner join UrunOzellik uo on uo.UrunId = u.UrunId 



Yukarıdaki sorgudan da anlaşılacağı gibi iki ortak kolon iki tabloyu birbirine bağlamış olduk.

Peki buradaki Inner ne demek. Buradaki inner UrunId kolonundaki değerin 2 tabloda da karşılığı olması demektir. Örneğin 2 tabloda da urunId si 1 olan kaydın olduğunu bize gösterir. Eğer bir tabloda değer olup diğer tabloda olmasa idi ürün id bize bir değer döndürmeyecekti.

Şimdi bizim AdventureWorksDw2012 veri tabanımıza gidelim. Orada ki DimProductCategory ve DimProductSubCategory tablolarına bir göz atalım.

Kod:

SELECT * FROM DimProductCategory

SELECT * FROM DimProductSubcategory



Şekil 1 de görüldüğü gibi DimProductCategory tablosunda da DimProductSubCategory tablosunda da ProductCategoryKey isimli birer kolon mevcut. Demek ki biz bu iki tabloyu birbirine bu alan üzerinden bağlayabiliriz. Zatan mantık olarak her alt katagorinin ait olduğu bir kategori olmak zorundadır. İşte bu bize bir ilişki sağlar.

UserPostedImage

Şimdi sıra geldi bu iki tabloyu birbirine bağlamaya. Şimdi yapacağımız işlemde EnglishProductCategoryName ve EnglishProductSubCategoryName isimlerini alacağız.

Kod:
SELECT c.EnglishProductCategoryName,sc.EnglishProductSubcategoryName 
FROM DimProductCategory c
INNER JOIN DimProductSubcategory sc ON c.ProductCategoryKey = sc.ProductCategoryKey


UserPostedImage

Gördüğümüz gibi iki kolonumuzda geldi her kategoriye bağlı alt kategoriler bir bir sıralandı. Join cidden çok güçlüdür. İşin içine girdiğiniz zaman doğru ilişkilendirilmiş bir veri tabanında kod yazmanın nekadar zevkli olduğunu sizde göreceksiniz.

Şimdi yeni bir senaryoya geçelim bir bir ürünün kategori ve alt kategorilerini sıralayalım.

Kod:
SELECT p.EnglishProductName,c.EnglishProductCategoryName,sc.EnglishProductSubcategoryName 
FROM DimProductCategory c
INNER JOIN DimProductSubcategory sc ON c.ProductCategoryKey = sc.ProductCategoryKey
INNER JOIN DimProduct p ON p.ProductSubcategoryKey = sc.ProductSubcategoryKey


UserPostedImage

Görüldüğü gibi idlerden kurtularak direk olarak son kullanıcının anlayacağı bir çıktı üretmiş olduk.
Sql Server 2016 Eğitimiz 19 Mayıs tarihinde başlayacaktır. 32 Saat Olup Ücret 1450 TL + KDV'dir. Kayıt ve ayrıntılar için tıklayınız

twitter.com/dbakademi
Dua ve teşekkür en büyük servetlere bedel...


Bu konudaki kullanıcılar
Guest (3)
Forumu Atla  
Bu foruma yeni konular postalayamazsınız.
Bu forumda ki konulara yeni posta gönderemezsiniz.
Bu forumdaki postalarınızı silemezsiniz.
Bu forumdaki postalarınızı düzenleyemezsiniz.
Bu forumda anketler yaratamazsınız.
Bu forumdaki anketlere oy veremezsiniz.