Kurs
SQL Server, ilişkisel bir veritabanı yönetim sistemidir. İlişkisel veritabanının temel ilkelerinden biri, verilerin birden fazla tabloya dağıtılarak saklanmasıdır.

İhtiyacımız olan verileri çıkarmak için tabloları birleştirebilmemiz gerekir. Tabloları birleştirmek için primary ve foreign anahtarları kullanırız.
Birincil Anahtar
Birincil anahtar, bir tablodaki her bir satırı benzersiz şekilde tanımlamak için kullanılan bir sütundur. Bu benzersizlik, kimlik sütunu olarak artan bir tamsayı kullanılarak sağlanabilir. Ya da bazen mevcut sütunlar doğal olarak benzersiz değerler içerir ve bunlar da kullanılabilir.
Aşağıdaki örnekte, artist tablosunun ilk birkaç satırını görebiliriz. İki sütunu vardır: artist_id ve name. artist_id sütunu bu tablo için birincil anahtar görevi görür; bir tamsayı sütunudur ve her değer farklıdır.
+-----------+-------------------+
| artist_id | name |
|-----------+-------------------|
| 1 | AC/DC |
| 2 | Accept |
| 3 | Aerosmith |
| 4 | Alanis Morissette |
| 5 | Alice In Chains |
+-----------+-------------------+
Şimdi de album tablosuna bakalım. Birincil anahtarı görebiliyor musunuz? Evet, album_id sütunu. Birincil anahtarın "tablo-adı alt çizgi id" şeklinde adlandırılması yaygındır. Ancak fark edeceğiniz üzere bir de artist_id sütunu var. Bu da tamsayılardan oluşur ve artist tablosundaki artist_id sütunuyla aynı ada sahiptir. Bu ne anlama geliyor?
+----------+-------------------------+-----------+
| album_id | title | artist_id |
|----------+-------------------------+-----------|
| 1 | For Those About To Rock | 1 |
| 2 | Balls to the Wall | 2 |
| 3 | Restless and Wild | 2 |
| 4 | Let There Be Rock | 1 |
| 5 | Big Ones | 3 |
+----------+-------------------------+-----------+
Yabancı Anahtarlar
Önceki çıktıya bakarak, artist tablosundaki artist_id sütununun album tablosu için bir Foreign_key (yabancı anahtar) görevi gördüğü açıktır. FOREIGN KEY kısıtı, tablolar arasındaki bağlantıları bozacak işlemleri engellemek için kullanılır.
artisttablosu
+-----------+-------------------+
| artist_id | name |
|-----------+-------------------|
| 1 | AC/DC |
| 2 | Accept |
| 3 | Aerosmith |
| 4 | Alanis Morissette |
| 5 | Alice In Chains |
+-----------+-------------------+
albumtablosu
+----------+-------------------------+-----------+
| album_id | title | artist_id |
|----------+-------------------------+-----------|
| 1 | For Those About To Rock | 1 |
| 2 | Balls to the Wall | 2 |
| 3 | Restless and Wild | 2 |
| 4 | Let There Be Rock | 1 |
| 5 | Big Ones | 3 |
+----------+-------------------------+-----------+
Bu, album tablosundaki artist_id değeri, artist tablosundaki artist_id ile eşleştiğinde, bu satırların bir JOIN ile birbirine bağlanabileceği anlamına gelir.
Album ve Artist Tablolarını Birleştirme
Artist tablosunun 1 ve 4. satırlarında artist_id değeri 1'dir. Artist tablosundaki artist_id 1, AC/DC'ye aittir. Dolayısıyla iki tabloyu birleştirdiğimizde, album tablosundan albüm ayrıntılarını ve artist tablosundan karşılık gelen sanatçı ayrıntılarını döndürürüz — her iki tabloda da ortak olan artist_id alanı kullanılarak birleştirilir.
Bu, bir inner join olarak bilinir.
SELECT
album_id,
title,
album.artist_id,
name AS artist_name
FROM album
INNER JOIN artist ON artist.artist_id = album.artist_id
WHERE album.artist_id = 1;
+----------+-------------------------+-----------+-------------+
| album_id | title | artist_id | artist_name |
|----------+---------------------------------------+-----------|
| 1 | For Those About To Rock | 1 | AC/DC |
| 4 | Let There Be Rock | 1 | AC/DC |
+----------+-------------------------+-----------+-------------|
Album ve artist tablolarını, artist tablosundaki artist_id ile album tablosundaki artist_id değerlerini eşleştirerek birleştirdik.
Farklı tablolardan aynı adlı sütunları seçerken, sütun adını tam olarak belirtmeniz gerekir. Aksi takdirde SQL Server, sütunun hangi tablodan SELECT edileceğini bilemez.
Bir sütunu tam olarak belirtmek için, ilgili tablo adını bir nokta ile takip ederek başına eklemeniz gerekir.
Inner Join Söz Dizimi
İşte söz dizimini hatırlatmak için genel bir örnek. Bu durumda ana tablodan, yani table_A'dan ilgili sütunları seçiyor, ardından bu örnekte table_B olan birleştirmek istediğimiz ek sütunları seçiyoruz. Daha sonra INNER JOIN ve ON anahtar kelimelerini kullanarak her iki tablodan gerekli anahtar sütunları sağlayıp birleştirmeyi belirtiriz.
SELECT
table_A.columnX,
table_A.columnY,
table_B.columnZ,
FROM table_A
INNER JOIN table_B ON table_B.foreign_key = table_A.primary_key;
WHERE Koşulu Kullanmamak
Bu örnekte bir WHERE koşulu belirtmiyoruz; bu nedenle, her iki tabloda da ortak olan artist_id sütununa göre, artist ve album tabloları arasındaki TÜM eşleşmelerin TÜM kombinasyonlarını döndürüyoruz.
SELECT
album_id,
title,
album.artist_id,
name AS artist_name
FROM album
INNER JOIN artist on artist.artist_id = album.artist_id;
+----------+---------------------------------------+-----------+
| album_id | title | artist_id | artist_name |
|----------+---------------------------------------+-----------|
| 1 | For Those About To Rock | 1 | AC/DC |
| 4 | Let There Be Rock | 1 | AC/DC |
| 2 | Balls To The Wall | 2 | Accept |
| 3 | Restless and Wild | 2 | Accept |
+----------+---------------------------------------+-----------+
Birden Fazla Inner Join
INNER JOINS kullanarak ikiden fazla tabloyu da birleştirebilirsiniz. Her tablo kombinasyonu için ek bir INNER JOIN sağlamanız yeterlidir. Aşağıdaki kodumuzda A ve B tablolarını, ayrıca B ve C tablolarını birleştiriyoruz.
SELECT
table_A.columnX,
table_A.columnY,
table_B.columnZ table_C columnW
FROM table_A
INNER JOIN table_B ON table_B.foreign_key = table_A.primary_key
INNER JOIN table_C ON table_C.foreign_key = table_B.primary_key;
Tabloları birleştirme hakkında daha fazla bilgi edinmek için, kursumuz Introduction to SQL Server içindeki bu videoya bakın.
Bu içerik, John MacKintosh'un hazırladığı DataCamp’in Introduction to SQL Server kursundan alınmıştır.
