Kategoriler
ORACLE

Oracle Database 11g – SQL Temelleri I ||Multiple Tables

Diğer dersleri https://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. */

natural joins

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

natural join where clause

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ı */

using clause

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

using clause

SELECT l.city, d.department_name
FROM locations l JOIN departments d USING (location_id)
WHERE location_id = 1700;

using where clause

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

on clause

ÜÇ 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.

Three-Way Joins with the ON Clause

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 * FROM job_grades

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

SELECT * FROM job_grades

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.

Self-Joins Using the ON Clause

 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 */

left outer

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. */

right outer

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

full outer

CROSS JOINS

Creating Cross Joins

select last_name
from employees;

-- satır adedi: 107'dir

last_name rows

select department_name
from departments;

-- satır adedi 27'dir

department_name rows

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. */

cross join