İlişkisel veritabanı sistemler de veriler birbirleriyle ilişkili birçok tabloda saklanır.

Bazı durumlar da ihtiyaç duyulan bilgileri almak için birden fazla tablodan yararlanmak gerekir.Bu gibi durumlar da ilgili tablolara ulaşmak için SQL’in JOIN(birleştirme) özelliğini kullanırız.

Oracle’da birçok JOIN çeşidi vardır ;

  • Inner Join
  • Natural Join
  • Join ….. Using
  • Join ….. On
  • Cross Join
  • Outer Join


NOT : JOIN kullanırken tablolar için takma ad kullanabiliriz.Tablo takma ad belirtmek için tablo isminden sonra bir boşluk bırakılarak kısa ad yazılır.Tablo takma adları SQL cümlelerinin okunabilirliğini artırdığı gibi,uzun tablo isimlerinin kısaltılarak yazılması nedeniyle SQL yazımını da kolaylıştırır.

  • Aşagıda ki örnekte employees tablosuna e takma adını,departments tablosuna d takma adını veririz.
SELECT e.first_name,e.department_id,d.department_name FROM
employees e,departments d WHERE e.department_id=d.department_id;

Inner Join

Inner Join işlemi ile birleştirilecek olan tabloların sütunlarının içerdiği veriler kontrol edilerek kesişim leri alınır. Aynı işlem WHERE komutu kullanılarak da gerçekleştirilebilir.

  • Aşagıda ki örnekler de employees tablosunda ki department_id ile departments tablosunda ki department_id sütunun da birbirinin aynı olan kayıtları verir.
SELECT * FROM employees INNER JOIN departments
ON employees.department_id = departments.department_id;
SELECT * FROM employees e JOIN departments d
ON e.department_id = d.department_id;
SELECT * FROM employees e,departments d
WHERE e.department_id = d.department_id;

Inner join yerine join yazmak da yeterlidir.

SELECT * FROM employees JOIN departments
ON employees.department_id = departments.department_id;

Natural Join

NATURAL kelimesi kullanılan joinlere Natural Join denilir.Natural join yapabilmek için join yapılacak iki tabloda da aynı sütun ismine ve aynı veri tipine sahip ve aynı veriyi barındıran en az bir sütun olması gerekiyor. Natural join kullanırken hangi sütuna göre birleştirme yapması gerektiğini söylememize gerek yok kendisi sütun isimleri aynı olan sütuna göre yapar.

Natural Join kullanırken tablo kısa adı kullanmaya gerek yoktur istesek de kullanamayız hata verir.

  • Aşagıda ki örnekler de NATURAL JOIN employees tablosunda ki ve department tablosunda ki isimleri ve veri tipleri aynı olan sütunu bulur ve bu sütuna göre JOIN yapar.
SELECT first_name,department_id,department_name FROM
employees NATURAL JOIN departments;

Eger SELECT * şeklinde bir sorgu yazarsak her iki tabloda yer alan sütunları verir.

SELECT * FROM employees NATURAL JOIN departments;

Natural Join kullanırken WHERE ile şartda koyabiliriz.

SELECT * FROM employees NATURAL JOIN departments WHERE salary > 7500;

Join ….. Using

Birleştirme yapılacak 2 tablo arasında hangi sütuna göre birleştirme yapmak istediğimiz belirtmek istersek kullanmamız gereken birleştirme türüdür.Birleştirme için gerekli olan sütun 2 tablodada aynı isimde ve veri tipinde olmalıdır.Bu birleştirme türü daha çok 2 tablo arasında birden fazla ilişkili sütun olduğu zamanlar da kullanılıyor.

  • Aşagıda ki örnekler de employees tablosunda ki department_id ile departments tablosunda ki department_id sütununa göre birleştirme yapar.
SELECT first_name,department_name FROM
employees JOIN departments USING (department_id);
SELECT * FROM employees JOIN departments
USING (department_id) ORDER BY first_name;
SELECT first_name,department_name FROM employees JOIN departments
USING (department_id) where department_id < 100;

Cross Join

İlişki kurulacak tablolar arasında hiçbir ilişki ifadesi belirtilmezse CROSS Join denilir.Bunun anlamı şudur her bir tabloda ki her kayıt diğer tabloda ki bütün kayıtlar ile eşleştirilir. Sorgu sonucu iki tablonun satır sayısı çarpımları kadardır.

  • Aşagıda ki örnekler de employees tablosunda ki her veri ile departments tablosunda ki bütün verileri eşleştirerek sonucu verir.
SELECT * FROM employees CROSS JOIN departments ;
SELECT first_name,last_name,department_name FROM employees , departments ;
SELECT e.first_name,e.last_name,d.department_name
FROM employees e, departments d;

Outer Join

Tablolar arasında INNER JOIN birleştirilmesi yapıldığı zaman ilişki kurmak için belirtilen sütunların verrileri birebir aynı olduğu zaöam bu kayıtlar birleştirilerek getirilmekte idi.Ancak bir tabloda yer alan kayıta karşılık diğer tablo da eşlenecek bir kayıt bulunmaz ise bu kayıt da sorgu sonucunda getirilmez.Diger bir deyişle INNER JOIN kullanıldığı zaman sadece diğer tabloda eşleniği olan kayıtlar karşımıza gelmektedir.Bazı durumlar da karşı tabloda kayıtların eşleniği olmasa da getirilmesi istenir.Bu gibi durumlar da OUTER JOIN’i kullanırız.Eksik kayıtların bulunduğu tablo tarafına ilişki ifadelerin de + işareti konulur.

  • Aşagıda ki örnekte departments tablosunda ki tüm verileri verir employees tablosunda ise eşlenigi olanları verir,eşlenigi olmayan verileri ise NULL verir.
SELECT * FROM employees e,departments d
WHERE e.department_id (+)= d.department_id;

Aşagıda ki örnekte employeestablosunda ki tüm verileri verir departments tablosunda ise eşlenigi olanları verir,eşlenigi olmayan verileri ise NULL verir.

SELECT * FROM employees e,departments d
WHERE e.department_id = d.department_id(+);

NOT  : Örneklerimde Oracleda ki DUAL table ’ ı ve HR user ’ ı kullanıyorum.
Yararlı olması Dilegiyle…
Yazar : Mustafa Bektaş Tepe
Java && Oracle

Loading