
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.
- 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.)
Ö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.
Ö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.
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
Ö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
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.
Ö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
RIGTH JOIN
LEFT JOIN deki solda yazılan tablo için olanlar sağdaki tablo iççin geçerli olur.
Bir yanıt yazın