FOREIGN KEY etiketine sahip kayıtlar gösteriliyor.
FOREIGN KEY etiketine sahip kayıtlar gösteriliyor.

SQL'de Foreign Key Kullanımı

  • SQL'de bir başka tablo ile ilişkilendirilecek olan tablonun diğer tabloda bir nevi kısıtlanmasıdır. İlişkilendirilecek olan tablonun Primary key alanı ile diğer tablonun Foreign key alanı birbiri ile bağlanır.
  • Foreign Key kısıtlaması sütunlarından herhangi biri null değerler içeriyorsa, Foreign Key kısıtlamasını oluşturan tüm değerlerin doğrulaması atlanır.
  • Foreign Key kısıtlamasının yalnızca başka bir tablodaki Primary Key kısıtlamasına bağlı olmasına gerek yoktur. Ayrıca başka bir tablodaki UNIQUE kısıtlama sütununa başvuracak şekilde de tanımlanabilir.
Foreign Key tanımlamak için, tablomuzdaki Foreign Key olacak sütunu yazdıktan sonra REFERENCES yazıp bağlanacak tablounun adını ve parantez içindede ilgili sütunu yazarız.

CREATE TABLE SIPARISLER
(
Siparis_ID integer primary key,
Siparis_Tarihi datetime,
Musteri_SID integer REFERENCES MUSTERI(SID),
Tutar double
)

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