SQL ‘de Joinler | Püf Nokta | Pratik Bilgiler |Püf Noktası | Püf Noktalar | Püf Noktaları | İlginç Bilgiler
Saturday, July 31, 2010

Püf Noktalar

SQL ‘de Joinler

Posted by Ahmetozger On Aralık - 9 - 2008

    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…

Popularity: 7% [?]

Add A Comment