Diğer dersleri http://selimkaratas.com.tr/oracle-11g-r2-egitimi-ders-notlari adresinden bulabilirsiniz.
6. Displaying Data from Multiple Tables ( Çoklu tablolar için veri gösterimi) JOIN Farklı tablolardan gerekli sütunları alıp yeni bir rapor oluşturmak amacıyla kullanılır. İlişkili tablolardan yararlanılarak farklı tablolardan yer alan veriler raporlanabilir.
*3 çeşit JOIN vardır:
- Natural JOIN Clause ( Genelde kullanılmaz)
- Using Clause ( Genelde kullanılmaz )
- On Clause ( En çok tercih edilen )
*3 çeşit Outer JOIN vardır:
- LEFT OUTER JOIN
- RIGHT OUTER JOIN
- FULL OUTER JOIN
*Cross JOIN NATURAL JOINS YARATMA
NATURAL JOİNS
SELECT department_id, department_name, location_id, city FROM departments NATURAL JOIN locations ; /* departments tablosu ve locations tablosundan eşleyeceği kolonları kendi seçer. eşleme yapması için kolon adları aynı olmalı. bundan dolayı çok tercih edilmez. */
SELECT department_id, department_name,
location_id, city
FROM departments
NATURAL JOIN locations
WHERE city IN ('London');
-- sonuçlar içinden city="London" olanları listeledik
USING Clause
SELECT employee_id, last_name, location_id, department_id FROM employees JOIN departments USING (department_id) ; /* USING ile istediğiniz kolonu seçebilirsiniz ama yine aynı kolon adlarına sahip olmalı */
SELECT l.city, d.department_name FROM locations l JOIN departments d USING (location_id) WHERE d.location_id = 1800; --d.location_id şeklinde kullanamayız
SELECT l.city, d.department_name FROM locations l JOIN departments d USING (location_id) WHERE location_id = 1700;
ON CLAUSE
SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e JOIN departments d ON (e.department_id = d.department_id); --department_id kontrolü sağladığından daha doğru sonuç verir -- diğer join'lere göre bu tercih edilir
ÜÇ VE DAHA FAZLA KOLONLU ON CLAUSE
SELECT employee_id, city, department_name FROM employees e JOIN departments d ON d.department_id = e.department_id JOIN locations l ON d.location_id = l.location_id; -- 3 tabloyu birbirine bağlayıp rapor aldık.
Nonequijoins
create table job_grades(grade_level char(3), min_value number(6),max_value number(6)); /* detayına daha sonraki derslerde girilecektir. bu şekilde tablo oluşturuyoruz.*/
insert into job_grades values ('D',0,4000);
insert into job_grades values ('C',4001,8000);
insert into job_grades values ('B',8001,12000);
insert into job_grades values ('A',12001,999999);
--belirli aralıklara sahip değişenlere belirli harfler verdik
SELECT * FROM job_grades ORDER BY 1;
SELECT E.LAST_NAME,E.SALARY,J.GRADE_LEVEL FROM EMPLOYEES E JOIN job_grades J ON E.SALARY BETWEEN J.min_value AND J.max_value ORDER BY 2 DESC; --maaşlarının bulunduğu aralıklara göre harflendirdik
SELF JOINS ON Clause
SELECT worker.last_name emp, manager.last_name mgr FROM employees worker JOIN employees manager ON (worker.manager_id = manager.employee_id); -- Aynı tablodan yaratılacak raporlar için yapılır.
LEFT OUTER JOIN
SELECT e.last_name, e.department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id) ; /* left outer kısmını yazmadığımızda null sonuçları göstermez. left outer yazdığımız zaman sol taraftaki değişkenin eşleşdiği kolonda null değerini getirdi */
RIGHT OUTER JOIN
SELECT e.last_name, e.department_id, d.department_name FROM employees e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id) ; /* sağ taraftaki kolonumuz yani department_name değişkenlerinin karşılığına gelen last_name= null ya da department_id = null olanları da listeledik. */
FULL OUTER JOIN
SELECT e.last_name, d.department_id, d.department_name FROM employees e FULL OUTER JOIN departments d ON (e.department_id = d.department_id) ; -- her iki tarafta yer alan null değerlerini getirir
CROSS JOINS
select last_name from employees; -- satır adedi: 107'dir
select department_name from departments; -- satır adedi 27'dir
cross işleminin doğrulunu test edebiliriz. 107*27 = 2889 olmalıdır.
SELECT last_name, department_name FROM employees CROSS JOIN departments ; /* farklı tablolardaki kolonlar için çaprazlama işlemi yapılmıştır. Sonuç 2889 çıkmıştır. */

















“Oracle Database 11g – SQL Temelleri I ||Multiple Tables” için bir yanıt
Hocam öncelikle oracle eğitimin için uğraşların için teşekkür ederim çok faydalı çok başarılı şekilde sunulmuş anlatım resimler açıklamalar gerçekten çok iyi ellerine sağlık çok teşekkür ederim kendi adıma. Ancak şöyle bir durum var bilmiyorum sende farkında mısın ama dersler de bulunan resimlere tıklandığında resim açılıyor incelemek filan güzel ancak resmi kapattığımızda sayfa en başa gidiyor. Üst kısımlarda sorun değil belki ama aşağılara inildikçe ve hep böyle oldukça biraz kullanılırlık düşüyor. Sitende bunu da halledersen gerçekten on numara beş yıldız bir durum olur. Bu benim kendi fikrim tabi nacizane kabul edersen. Saygılarımla iyi çalışmalar. Tekrardan Teşekkürler..