Press ESC to close

JOIN

 BİRDEN FAZLA TABLODAN VERİ GETİRME

(JOIN İŞLEMLERİ)

    SQL Sorgusu sonucu ulaşmak istediğimiz veri birden fazla tablodan getirilmesi gerekiyorsa, tablolar belli koşullar altında birleştirilir.

    JOIN: İki ya da daha fazla tabloyu aynı anda sorgulayarak bir sonuç tablosu oluşturmaya yarar.

İki tablo birleştirilmek istenirse her iki tabloda da aynı olan alanlardan yola çıkılır. Bu alanlar kullanılarak istenilen sonuç tablosu oluşturulur.

 

join-in-sql

  • Birden fazla tablo birleştirilirken ALIAS kullanılmasına dikkat edilmelidir. Eğer ALIAS kullanılmaz ise yanlış sonuçlar üretilebilir.
  • Sütun belirsizlikleri yine ALIAS kullanımı ile giderilmelidir.
  • Tablolar arasındaki ilişki iyi belirlenmelidir.
  • Gereksiz sütunların gelmesi engellenmeli, gerekmediği sürece                                         SELECT ifadesinde * kullanılmamalıdır.

 İNNER JOİN

  • İki ya da daha fazla tabloda ortak alanlardaki değerleri kontrol ederek tabloları birleştirir.
  • INNER JOIN yerine JOIN yazabliriz.
  • ON ifadesi tablodaki hangi kolonların eşleşeceğini anlatır. (Ortak alanlar aynı veri tipine sahip olmalıdır.)

inner join

ÖRNEK :  Müdürlüklerin bulunduğu şehirleri listeleyelim

select department_id,  department_name, city
from hr.departments d, hr.locations l
where d.LOCATION_ID=l.LOCATION_ID;

veya

select department_id,department_name,l.city
from hr.departments d inner join hr.locations l
on d.LOCATION_ID=l.LOCATION_ID;

veya

SELECT department_id, department_name, city
FROM hr.departments d join hr.locations l
using(location_id);

yukarıdaki üç sql de aynı çıktıyı verir.

inner join

ÖRNEK

select department_id,department_name,l.city,c.COUNTRY_NAME
from hr.departments d inner join hr.locations l
on d.LOCATION_ID=l.LOCATION_ID
inner join HR.COUNTRIES c on c.COUNTRY_ID=l.COUNTRY_ID;

CROSS JOIN

   Tablolar arasında yapılan birleştirme işleminde seçilen alanlar arasındaki tüm kombinasyonlar sonuç tablosu olarak vermeyi sağlar(Kartezyen Çarpım). Örneğin ilk alanda 3, ikince alanda 3 satır varsa 3*3=9 tane satır oluşur.

cross-join

 

EQUI JOIN (EŞİT OLANI BİRLEŞTİRME)

  • Tablolar arasında yapılan birleştirmede seçilen alanlar arasındaki tüm kombinasyonları sonuç tablosunda görmemizi sağlar (CROSS JOIN ile paralel özelliklere sahiptir).
  • Oluşturduğu sonuç tablosu seçilen alanların kartezyen çarpımı kadardır.

ÖRNEK : Çalışanların Job title (İş Başlıklarını) ad soyad ve job_idleri ile birlikte gösterin

select e.FIRST_NAME, e.LAST_NAME, j.JOB_TITLE, j.job_id
from HR.EMPLOYEES e,HR.JOBS j
where e.JOB_ID=j.JOB_ID

equal join

ÖRNEK : çalışanların aldıkları maaşları o alanda çalışanların aldıkları minimum, maximum ve o alandaki çalışanların oratalama maaşları nı bir tabloda gösteriniz

select
emp.FIRST_NAME “Adı”,
emp.LAST_NAME “Soyadı”,
emp.salary “maaşı” ,
jbs.MAX_SALARY “max maaş”,
jbs.MIN_SALARY “min maaş”,
jbs.JOB_TITLE “is başlığı”,
EMP.JOB_ID “JOBID”,
(SELECT AVG(SALARY) FROM HR.EMPLOYEES GROUP BY JOB_ID HAVING JOB_ID=jbs.JOB_ID) “ORTALAMA MAAŞ”
from HR.EMPLOYEES emp, HR.JOBS jbs
WHERE emp.JOB_ID=jbs.JOB_ID

2018-07-03_145453

 

NONEQUI JOIN (EŞİT OLMAYANI BİRLEŞTİRME)

Birleştirme işlemi eşitlik üzerinden değil eşitsizlik üzerinden yapılır.

LEFT VE RIGHT JOIN

LEFT OUTER JOIN

  • Sadece iki tablo arasında kullanılır.
  • Left Outer Join kullanılırsa ifadenin sonunda ismi yazan tabloda istenilen alanda tüm satırlkar sonuç tablosunda gösterilir.
  • Kısace Left Join kullanılır
  • Left Outer Join ortak alanlar vasıtası ile birleştirme yaparken birleştirme şartına uymayan satırlar null değerlerin oluşmasını sağlar.
  • Soldaki tablonun tamamını sağdaki tablonun ise soldaki tablodaki karşılığını getirir, soldaki tablonun değerinin sağdaki tabloda karşılığı yoksa null değeri getirir.

LEFTJOIN

ÖRNEK:

select emp.FIRST_NAME , emp.LAST_NAME , dp.DEPARTMENT_NAME
from HR.EMPLOYEES emp left join HR.DEPARTMENTS dp
on emp.DEPARTMENT_ID=dp.DEPARTMENT_ID order by 3 desc

left join

RIGTH JOIN

LEFT JOIN deki solda yazılan tablo için olanlar sağdaki tablo iççin geçerli olur.

RIGHT-JOIN

 

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir