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

 

 

“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..

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir