Ara
9
2008

SQL ‘de Joinler

    SQL Sorgulama dilinde birden fazla tabloyu birleştirme yada ilgili başka tablodan veri çekmek için Inner, Outer, Left, Right, Cross Join’lar kullanılır.

            iNNER JoiN :
 Her iki tabloda da, birleştirdiğimiz alana göre, mevcut olan kayıtları getirir.inner join ile hangi tablo ile hangi tabloyu birbirine bağlamak istiyorsak o tabloların bağlantıları varsa ki onlarıda Idlerden anlıyoruz varsa inner join ile bağlantıyı gerçekleştirebiliriz.inner joinde eşit olan kayıtlar döner.inner join ile 7 tabloya kadar birlestirme yapilabilir.sonuc kümesinde eşleşen kayıtarı bize getirir. İlişkisel veritabanının en temelinde birden fazla tablo üstünde birlikte işlem yapabilmek yatar. Bu sayede verilerin tekrarlaması önlenmiş olur ve sonuçta veri yönetimi kolaylaşır.
Örnek: –speedy expeeres ile taşınmış siparisleri gösterin
select * from orders
inner join shippers on Shippers.shipperID=orders.ShipVia
where shippers.CompanyName=‘Speedy Express’
 
         OUTER JoiN :
Sık kullanılmazlar.iç içe select ifadeleriyle oluşturulan sorgulardan performans bakımından daha hızlı çalışır.Left outer join ve right outer joinlerdir.Left ve right outer join ifadeleri ilişkili alanda birbiriyle eşleşenlerin yanında eşleşmeyen kayıtlarıda listeler.Join koşuluna uymayan satırlar NULL(boş) değer olarakgörüntülenirler…
Left [ outer ] join :
ilk tablodaki tüm verileri görüntüler ve diğer tablo ile eşleşmeyen alanlar NULL(boş) değer gösterilir.iki tablo arasında ilişkili sorgu yapılırken ,Left outer join kullanıldığında,birinci tablodaki tüm kayıtlar getirilir ve ikinci tabloda ise sadece ilişkiye göre uygun kayıtlar sağ tarafına eklenir
Söz dizimi:
select <sutün_ad(lar)ı>from <ilk_ tablo>
Left join<ikinci _tablo> on <ilk_tablo>.<anahtar_alan>=<ikinci_tablo>.<anahtar_alan>
Örnek: Çalışanın tam adı ve müşterilerden aldığı siparişler ve tarihleri gösterelim :
select Employees.FirstName +‘ ‘+ Employees.LastName as Name,
OrderID,Orderdate
from employees
left join orders on Employees.EmployeeID=Orders.EmployeeID
sonuc : sorgu sonucu 830 kayıt geldi
Steven Buchanan            10248    1996-07-04 00:00:00.000
Michael Suyama              10249    1996-07-05 00:00:00.000
Margaret Peacock          10250    1996-07-08 00:00:00.000
Janet Leverling 10251    1996-07-08 00:00:00.000
Margaret Peacock          10252    1996-07-09 00:00:00.000
Janet Leverling 10253    1996-07-10 00:00:00.000
     RiGHT [ OUTER ] JOiN :
İki tablo arasındaki ilişkili sorgu yapılırken ,right outer join kullanıldığınfa,ikinci tablodaki tüm kayıtlar getirilir.Birinci tabloda ise sadece ilişkiye göre uygun kayıtlar sağ tarafına tarafına eklenir .ikinci tablodaki tüm kayıtları listemek istendiğinde right join kullanılır.Bu durumda ise birinci tablodaki eşleşmeyen kayıtlar NULL(boş) olarak görüntülenir.
Söz dizimi:
Select<sutün_ad(lar)ı>from <ilk_tablo>right join <ikinci_tablo>
On <birinci_tablo>.<anahtar_alan>=<ikinci_tablo>.<anahtar_alan>
Örnek: Tüm müşteriler ve verdikleri siparişlerin tarihlerini ve hiç siparişi olmayan müşterilerin tarih alanı null(boş) olarak görüntülenecektir
Select companyname,customers.customerID,orderdate
From customers
Right join orders
On customers.customerID=orders.custemerID
Sorgu sonucu :
Vins et alcools Chevalier    VINET             1996-07-04 00:00:00.000
Toms Spezialitäten         TOMSP                1996-07-05 00:00:00.000
Hanari Carnes                   HANAR                1996-07-08 00:00:00.000
Victuailles en stock         VICTE                 1996-07-08 00:00:00.000
Suprêmes délices           SUPRD              1996-07-09 00:00:00.000
Hanari Carnes                  HANAR             1996-07-10 00:00:00.000
Chop-suey Chinese        CHOPS              1996-07-11 00:00:00.000
    
                                               CROSS JoiN : (Kartezyen Çarpım)
İlişkili tablolar arasında olası tüm eşleşmeleri listeler.Belirli ortak bir alan belirtilmesine gerek yoktur.Her iki tabloyu çapraz olarak birleştirir.Yani,ilk tablodaki her bir kayıt için ikinci tablodaki her satır sonuç olarak döner.Tabloların birbiri ile arasında bir ilişki tanımlamadan ilişkisel sorgu yapılırsa,kartezyen çarpımı bulunur.Bu birinci tablodaki her bir kayıt ile ikinci tablodaki her bir kayıt ilişkilidir demektir ve ilişkisel veritabanın doğasına terstir.Birinci tablodaki kayıtların herbirisini ikinci tablodaki kayıtlara eşleştirilir.Kartezyen çarpımını alır.A tablosunda 3 kayıt olsun B tablosunda 5 kayıt olsun ,herbir kayıt diğer tablonun herbir kaydı ile eşleşeceğinden 3X5=15 kayıt döndürür.
Örnek : aşağıdaki örnekte üreticilerin çalışabilecekleri tüm olası gemi şirketlerini görmemizi sağlar.shippers tablosu 3 kayıt ve suppliers (üreticiler) tablosu 29 kayıt olduğundan ,sonuç kümesinde 87 satır görünecektir( 3X29=87)
select suppliers.companyname,shippers.companyname
from suppliers
cross join shippers
sonuç kümesi :
companyname                        companyname
Exotic Liquids                                                                    Speedy Express
New Orleans Cajun Delights                                    Speedy Express
Grandma Kelly’s Homestead                                     Speedy Express
Tokyo Traders                                                                 Speedy Express
Cooperativa de Quesos ‘Las Cabras’                       Speedy Express
Mayumi’s                                                                          Speedy Express
Pavlova, Ltd.                                                                    Speedy Express
87 tane sorgu kümesi için satır oluşmuştur.

                       Bilgi Paylaştıkça Büyür . . .

                Başka Makalelerde Görüşmek dileğiyle…



Yorumunu Bırak !