JOIN etiketine sahip kayıtlar gösteriliyor.
JOIN etiketine sahip kayıtlar gösteriliyor.

SQL'de SELF-JOINS Kullanımı


SELF-JOINS Bir tablonun kendisiyle birleştirilme  işlemidir.
(Bir tablodaki aynı değerleri içeren farklı satırları listelemek amacıyla kullanılır.)

Örnek Sorgu : Görevi (Job Title) aynı olan çalışanları listeleyelim. WHERE ifadesi ile belirtilen koşul kendisiyle eşleşen kayıtların görüntülenmesi engeller.

SELECT a.EmployeeID AS 'ÇALIŞAN ID',LEFT(a.lastname,10) 
AS 'İSİM',LEFT(a.title,10) AS 'GÖREVİ',b.EmployeeID AS 'ÇALIŞAN ID', LEFT(b.lastname,10) 
AS 'İSİM',LEFT(b.title,10) AS 'GÖREVİ'
FROM employees AS a INNER JOIN employees AS b ON a.title=b.title
WHERE a.EmployeeID < b.EmployeeID ORDER BY a.EmployeeID


SQL'de INNER JOIN ile 3 ve Daha Fazla Tabloyu Birleştirme


Bazen çok tablo üzerinde sorgu yapma ihtiyacı duyabiliriz. JOIN işlemiyle birleştirilen tablolar bir başka tabloya aradaki ortak sütunlar üzerinden bağlanabilir.

NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 
Örnek Sorgu : Sipariş Detayları(Order Details) tablosunu ara tablo şeklinde kullanarak, Siparişler (Orders) ve Ürünler(Products) tablosundan gerekli bilgiler görüntülenmiştir.

SELECT OrderDate,ProductName FROM Orders AS O
INNER JOIN [Order Details] AS OD ON O.OrderID=OD.OrderID
INNER JOIN Products AS P ON OD.ProductID=P.ProductID
WHERE OrderDate='7/8/96' ORDER BY ProductName
 

SQL'de OUTER LEFT/RIGHT/CROSS JOIN Kullanımları

OUTER JOIN-LEFT JOIN Kullanımı
  • INNER JOIN'den farklıdır. 
  • Soldaki tablo baz alınarak sorgu çalıştırılmasıdır. 
  • Soldaki tablodan tüm kayıtlar çekilir ve sağdaki tabloda eşleşen kayıtlar aynen yazılır. 
  • Eşleşmeyen kayıtlar için NULL değer verilir.
NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 
 
LEFT JOIN Kullanımı : SELECT <sütun_ad(lar)ı> FROM <ilk_tablo> LEFT JOIN <ikinci_tablo> ON <ilk_tablo>.<anahtar_alan> = <ikinci_tablo>.<anahtar_alan>  

Örnek Sorgu : Sorgumuz SELECT kısmında iki sütun tekbir sütun adı altında birleştirilmiştir. Çalıştırıldığında çalışanın tam adı ve müşterilerden aldığı siparişler ve tarihleri listelenecektir.

SELECT Employees.FirstName+' '+Employees.LastName AS Name,OrderID,OrderDate
FROM Employees LEFT JOIN Orders ON Employees.EmployeeID=Orders.EmployeeID
 
 
OUTER JOIN-RIGHT JOIN Kullanımı 
  • LEFT OUTER JOIN işleminin tersini yapar.
  • Sağdaki tablonun baz alınarak sorgu çalıştırılmasıdır. 
  • Sağdaki tablodan tüm kayıtlar çekilir ve soldaki tabloda eşleşen kayıtlar aynen yazılır.
  • Eşleşmeyen kayıtlar için NULL değer verilir.
RIGHT JOIN Kullanımı : SELECT <sütun ad(lar)ı> FROM <ilk_tablo> RIGHT JOIN <ikinci_tablo> ON <birinci_tablo>.<anahtar alan> = <ikinci_tablo>.<anahtar_alan>

Örnek Sorgu : Sorgumuzda tüm müşteriler ve verdikleri siparişlerin tarihleri listelenecektir.

SELECT companyname, customers.CustomerID, orderdate
FROM customers RIGHT OUTER JOIN orders ON customers.CustomerID = orders.CustomerID
 
 
 OUTER JOIN-CROSS JOIN Kullanımı
  • İlişkili tablolar arasındaki tüm eşleşmeleri listeler.
  • Ortak bir alan belirtilmesine gerek yoktur.
  • CROSS JOIN kullanılırken ON ifadesi kullanılmaz.

Örnek Sorgu : Üreticilerin çalışabilecekleri tüm olası gemi şirketleri listelenir.

SELECT suppliers.companyname, shippers.companyname
FROM suppliers CROSS JOIN shippers
 

SQL'de INNER JOIN Kullanımı

  • INNER JOIN SQL de  varsayılan olarak kullanılan tablolaları bağlama işlemidir.
  • INNER JOIN birleştirilen tablolarda ilişkinin sağlandığı tüm kayıtları getirir.
NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

Örnek Sorgu : 
SELECT productname AS 'Ürün Adı', companyname AS 'Şirket Adı' FROM products
INNER JOIN suppliers ON products.SupplierID = suppliers.SupplierID
(Hangi firmadan hangi ürünü aldığımızı iki farklı tablodan birleştirerek listeleyelim.) 


SQL'de Tablo Birleştirme ve JOIN


SQL'de bazı durumlarda birden fazla tablodan veri çekme ihtiyacı duyabiliriz. Bunun için tablolar arasında bir ilişki kurulması gerekmektedir. Bu ilişki JOIN ile sağlanır. JOIN ifadesi birden fazla tabloyu birbirine bağlayıp  bu tablolar üzerinde işlem yapmamıza olanak sağlar.

JOIN ifadesi ile hangi tabloları ve nasıl birleştireceğimizi ON ifadesi ile tabloların hangi alanlar üzerinden birleşeceğini belirtiriz.

Tablolar genelde Birincil Anahtar ve Yabancı Anahtar alanları üzerinden birleştirilselerde, gerektiğinde diğer herhangi bir alan da bunun için kullanılabilir. Fakat bu alanların aynı tür veri içerdiğinden emin olmalısınız.

Birincil Anahtar (Primary key), her kayıt için benzersiz bir değer taşıyan alandır. 

Örneğin, öğrenci kayıtlarının tutulduğu bir tabloda, öğrenci numarasının saklandığı alan birincil anahtar olarak seçilebilir. Zira öğrenciyle ilgili tüm bilgiler gerçekte onun numarası ile kodlanmıştır ve her öğrencinin numarası bir birinden farklıdır.

Tablolar birleştirilirken Primary Key - Foreign Key ikilisi kullanılır. Tablolar arası ilişkiler aynı zamanda Unique Index kullanılarakta yapılabilir. Fakat yaygın olarak PK - FK kullanılır.

Primary Key (Birincil Anahtar) : Her satırı tekil bir şekilde tanımlayan benzersiz anahtardır. Primary Key sayesinde tablolarda bulunan satırlar birbirlerinden farklı olur ve her satırın Primary Key değeri farklı atanır. Primary Key tek bir sütun olduğu gibi birden fazla sütundan da oluşabilir.

  • Primary Key olacak sütun asla boş değer almamalıdır.
  • Primary Key olacak sütun tekrarı olmayan kayıtlardan oluşmalıdır…
  • Primary Key sütunu olabildiğince küçük ve basit veri tipinde tanımlanmalıdır.

Foreign Key (Yabancı Anahtar) : Bir tablodaki sütunun başka tablodaki anahtara olan referansını belirler. Primary Key'den farklı olarak bir tabloda birden fazla Foreign Key olabilir.

Örnek Sorgularda kullandığım Northwind Veritabanı diyagramını inceleyerek PK - FK bağlantılarını görebilirsiniz (diyagram'ın ayrıntılı sürümünü indirmek için tıklayınız.)