people

SQL Join

Şimdiye kadar aynı anda sadece tek bir tablodan veriler ile çalıştık. Bazı durumlarda sonuç kümemizin daha anlamlı olabilmesi için iki farklı tablodan verilere ihtiyacımız olabilir. Bunun için sorgumuzda iki anahtar kelime daha kullanırız;

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.

INNER JOIN

SQL de varsayılan bağlantı türüdür. İlişkili tablolarda sadece JOIN koşulunu sağlayan kayıtlar listelenir.

Örnek:

Sorgu:

USE northwind

SELECT productname, companyname

FROM products

INNER JOIN suppliers

ON products.supplierid = suppliers.supplierid

GO


OUTER JOIN

LEFT veya RIGHT OUTER JOIN ifadeleri ilişkili alanda birbiriyle eşleşenlerin yanında eşleşmeyen kayıtları da listeler. JOIN koşuluna uymayan satılar NULL(boş) değer olarak görüntülenirler.

LEFT JOIN

LEFT OUTER JOIN ile yazımdaki ilk tablonun tüm satırları listelenir ve diğer tablo ile eşleşmeyen alanlar NULL(boş) değer ile gösterilir. Eğer tabloların sorgudaki sırası değişirse aynı sonucu elde edebilmek için RIGHT OUTER JOIN kullanılır.

Söz dizimi: SELECT FROM

LEFT JOIN

ON . = .

Örnek: Aşağıdaki sorgunun 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.

Sorgu:

USE northwind

SELECT Employees.FirstName+' '+Employees.LastName AS Name,

OrderID, OrderDate

FROM Employees

LEFT JOIN Orders

ON Employees.EmployeeID=Orders.EmployeeID


RIGHT JOIN

İkinci tablodaki tüm kayıtları listelemek istendiğinde RIGHT JOIN kullanılır. Bu durumda ise birinci tablodaki eşleşmeyen kayıtlar NULL(boş) olarak görüntülenir. Eğer tabloların yazım önceliğini değiştirirseniz, sorgu LEFT OUTER JOIN ile aynı sonucu verecektir.

Söz dizimi:

SELECT

FROM

RIGHT JOIN

ON . = .

Örnek: Aşağıdaki örnekte tüm müşteriler ve verdikleri siparişlerin tarihleri listelenmiştir. Hiç siparişi olmayan müşterilerin tarih alanı NULL(boş) olarak görüntülendiğine dikkat edin.

Sorgu:

USE northwind

SELECT companyname, customers.customerid, orderdate

FROM customers

LEFT OUTER JOIN orders

ON customers.customerid = orders.customerid

GO


CROSS JOIN

İlişkili tablolar arasında olası tüm eşleşmeleri listeler. Belirli ortak bir alan belirtilmesine gerek yoktur.

Örnek: Aşağıdaki örnek üreticilerin çalışabilecekleri tüm olası gemi şirketlerini görmemizi sağlar. Shippers tablosu 3 kayıt ve Suppliers(Üreticiler) tablosunda 29 kayıt olduğundan, sonuç kümesinde 87 satır görüntülenecektir.

Sorgu:

USE northwind

SELECT suppliers.companyname, shippers.companyname

FROM suppliers

CROSS JOIN shippers

GO


SELF-JOINS

Bir tablodaki aynı değerleri içeren farklı satırları listelemek istediğimizde o tabloyu kendisi ile birleştiririz.


0 yorum:

Yorum Gönder