Veritabanı Tasarımı Join Yantümceleri
Konular ANSI-99 USIN ve ON yantümceleri kullanarak Joinoluşturmak ve çalıştırmak Üç tabloyu birleştiren ANSI-99 sorgusu oluşturmak ve çalıştırmak 2
Amaç Veritabanı kelime hazinenize daha fazla komut ekledikçe, istenen sonucu döndüren sorgular tasarlamak daha kolay olacaktır. Join işleminin amacı her tablodaki tüm verileri tekrar etmeden, tablolar boyunca verileri bir araya getirmektir. Neden daha fazla veriye ihtiyacınız olduğunuz sorabilir miyim? 3
USING Yantümcesi Natural Join işleminde eğer tablolar aynı isme sahip sütunlara fakat farklı veri tiplerine sahipse join yantümcesi hata verecektir. Bu durumu önlemek için, join yantümcesi USING yantümcesi kullanılarak değiştirilir. USING yantümcesi equijoin için kullanılacak sütunları belirler. 4
USING Yantümcesi (devam ) Gösterilen sorgu USING yantümcesinin kullanımına bir örnektir. USING kullanılarak belirtilen sütunlar SQL ifadesinin herhangi bir yerinde bir niteleyiciye (tablo adı veya takma) sahip değildir. SELECT client_number, first_name, last_name, event_date FROM d_clients JOIN d_events USING (client_number); CLIENT_NUMBER FIRST_NAME LAST_NAME EVENT_DATE 5922 Hiram Peters 14-MAY-2004 6133 Lauren Vigil 28-APR-2004 5
USING Yantümcesi (devam ) USING yantümcesi bir yada her iki tablodan satırların kısıtlanması için kullanılan WHERE ifadesini kullanmamıza izin verir. SELECT client_number, first_name, last_name, event_date FROM d_clients JOIN d_events USING (client_number) WHERE last_name = Peters ; CLIENT_NUMBER FIRST_NAME LAST_NAME EVENT_DATE 5922 Hiram Peters 14-MAY-2004 6
ON Yantümcesi Join yapılacak sütunlar farklı isimlere sahipse ya da join ifadesinde <> veya BETWEEN gibi eşitlik olmayan karşılaştırma operatörleri kullanıyorsa ne olur? Hangi durumda USING kullanamayız ve bu yüzden ON yantümcesi kullanırız. Bu tanımlanacak join durumlarında çeşitlilik sağlar. ON yantümcesi bir yada her iki tablodan satırların kısıtlanması için kullanılan WHERE ifadesini kullanmamıza izin verir. 7
ON Yantümcesi (devam ) Bu örnekte, ON yantümcesi farklı iki referansın aynı tabloyu vermesi durumunda self-join olarak kullanılmıştır. employee tablosunda bazı çalışanlar aynı zamanda yöneticidir. Self-joinaynı zamanda yönetici olan çalışanların seçilmesini sağlar. SELECT e.last_name as "EMP", m.last_name as "MGR" FROM employees e JOIN employees m ON (e.manager_id = m.employee_id); 8 EMP Hartstein Zlotkey Mourgos De Haan Kochhar Higgins MGR Kochhar
ON Yantümcesi (devam ) Burada seçilen satırları kısıtlamak için bir WHERE yantümcesi ile aynı sorgu şu şekildedir: SELECT e.last_name as "EMP", m.last_name as "MGR" FROM employees e JOIN employees m ON (e.manager_id = m.employee_id) WHERE e.last_name like 'H%'; EMP Hartstein Higgins Hunold MGR Kochhar De Haan 9
Üç Tabloyu Birleştirme USING ve ON yantümceleri kullanılarak üç ya da daha fazla tablo birleştirilebilir. Müşterilerimiz için etkinlikler ve bu etkinlikleri için temalar içeren bir rapora ihtiyacımız olduğunu varsayalım. SELECT last_name, event_date, t.description FROM d_clients c JOIN d_events e USING (client_number) JOIN d_themes t ON (e.theme_code = t.code); LAST_NAME EVENT_DATE DESCRIPTION 10 Peters 14-MAY-2004 Tropical Vigil 28-APR-2004 Tropical
Join Karşılaştırmaları Oracle Özel Join ifadeleri ile ANSI/ISO SQL: 1999 Joinifadelerini karşılaştırma: Oracle Proprietary Join Kartezyen Çarpım Equijoin Non-equijoin ANSI/ISO SQL: 1999 Equivalent Cross Join Natural Join (Şayet joinyapılacak sütunlar aynı ada ve veri tipine sahip ise) USING yantümcesi (Şayet joinyapılacak sütunlar aynı ada fakat farklı veri tipine sahip ise) ON yantümcesi (Şayet sütunlar farklı ada sahip ise) ON yantümcesi 11