SQL Dilinde INNER JOIN Kullanımı: Detaylı Rehber
İlişkisel veritabanı yönetim sistemlerinde (RDBMS) veriler genellikle normalize edilmiş birden fazla tabloda saklanır. Bu tablolar arasındaki ilişkileri kullanarak anlamlı bir veri kümesi elde etmek için birleştirme (JOIN) işlemleri kritik öneme sahiptir. Bu makale, SQL'deki en yaygın ve temel birleştirme türlerinden biri olan INNER JOIN operatörünün kullanımını, sözdizimini ve pratik örneklerini teknik bir bakış açısıyla detaylandırmaktadır.
Sözdizimi
INNER JOIN, iki veya daha fazla tablodan ortak bir kolondaki eşleşen değerlere dayanarak satırları birleştirir. Yalnızca her iki tabloda da bir eşleşme bulunduğunda satırları sonuç kümesine dahil eder.
SELECT
    kolon1,
    kolon2,
    ...
FROM
    tablo1
INNER JOIN
    tablo2 ON tablo1.ortak_kolon = tablo2.ortak_kolon;
Detaylı Açıklama
SELECT kolon1, kolon2, ...: Sonuç kümesinde görüntülemek istediğiniz kolonları belirtir. Bu kolonlar birleştirilen tablolardan herhangi birine ait olabilir. Kolon adları çakışıyorsa,tablo_adı.kolon_adıformatında belirtilmelidir.FROM tablo1: Birleştirme işlemine başlayacağınız ilk tabloyu belirtir. Bu genellikle "sol" tablo olarak adlandırılır.INNER JOIN tablo2:tablo1ile birleştirmek istediğiniz ikinci tabloyu (sağ tablo) belirtir.ON tablo1.ortak_kolon = tablo2.ortak_kolon: Bu kısım, birleştirme koşulunu tanımlar. Her iki tablodaki hangi kolonların eşleşmesi gerektiğini belirtir.INNER JOINyalnızca bu koşulun doğru olduğu satırları döndürür. Kolonlar genellikle tablolar arasındaki birincil ve yabancı anahtar ilişkilerini temsil eder.
Pratik Kullanım Örnekleri
Aşağıdaki örneklerde, bir eğitim veritabanı senaryosu üzerinden INNER JOIN kullanımını inceleyeceğiz. Veritabanımızda Ogrenciler ve Kayitlar adında iki tablo olduğunu varsayalım.
Ogrenciler Tablosu:
CREATE TABLE Ogrenciler (
    OgrenciID INT PRIMARY KEY,
    Ad VARCHAR(50),
    Soyad VARCHAR(50)
);
INSERT INTO Ogrenciler (OgrenciID, Ad, Soyad) VALUES
(1, 'Ayşe', 'Yılmaz'),
(2, 'Mehmet', 'Demir'),
(3, 'Zeynep', 'Kaya'),
(4, 'Ali', 'Can');
Kayitlar Tablosu:
CREATE TABLE Kayitlar (
    KayitID INT PRIMARY KEY,
    OgrenciID INT,
    KursAdi VARCHAR(100),
    FOREIGN KEY (OgrenciID) REFERENCES Ogrenciler(OgrenciID)
);
INSERT INTO Kayitlar (KayitID, OgrenciID, KursAdi) VALUES
(101, 1, 'Veritabanı Yönetimi'),
(102, 2, 'Programlamaya Giriş'),
(103, 1, 'Web Geliştirme'),
(104, 3, 'Veri Analizi');
Örnek 1: İki Tabloyu Birleştirme
Hangi öğrencinin hangi kursa kayıtlı olduğunu görmek için Ogrenciler ve Kayitlar tablolarını OgrenciID kolonu üzerinden birleştirelim.
SELECT
    O.Ad,
    O.Soyad,
    K.KursAdi
FROM
    Ogrenciler AS O
INNER JOIN
    Kayitlar AS K ON O.OgrenciID = K.OgrenciID;
Açıklama: Bu sorgu, Ogrenciler tablosundaki her OgrenciID ile Kayitlar tablosundaki eşleşen OgrenciID değerlerini bulur. Sonuç olarak, kayıtlı her öğrencinin adı, soyadı ve aldığı kursun adını listeler. AS O ve AS K takma adlar (aliases) kullanarak sorguyu daha okunabilir hale getirdik.
Örnek 2: Birden Fazla Tabloyu Birleştirme
Şimdi üçüncü bir tablo, KursDetaylari ekleyelim ve bir öğrencinin aldığı kursun detaylarını (örneğin, ders saati) görmek isteyelim.
KursDetaylari Tablosu:
CREATE TABLE KursDetaylari (
    KursAdi VARCHAR(100) PRIMARY KEY,
    DersSaati INT,
    KrediSayisi INT
);
INSERT INTO KursDetaylari (KursAdi, DersSaati, KrediSayisi) VALUES
('Veritabanı Yönetimi', 45, 3),
('Programlamaya Giriş', 60, 4),
('Web Geliştirme', 50, 3),
('Veri Analizi', 75, 5);
Öğrencilerin hangi kurslara kayıtlı olduğunu ve bu kursların ders saatlerini listeleyen bir sorgu oluşturalım:
SELECT
    O.Ad,
    O.Soyad,
    K.KursAdi,
    KD.DersSaati
FROM
    Ogrenciler AS O
INNER JOIN
    Kayitlar AS K ON O.OgrenciID = K.OgrenciID
INNER JOIN
    KursDetaylari AS KD ON K.KursAdi = KD.KursAdi;
Açıklama: Bu sorgu, Ogrenciler, Kayitlar ve KursDetaylari tablolarını zincirleme bir şekilde birleştirir. İlk olarak öğrencilerle kayıtları, ardından kayıtlarla kurs detaylarını eşleştirerek her öğrencinin aldığı kursun adını ve ders saatini getirir.
Örnek 3: Belirli Koşullara Göre Birleştirme ve Filtreleme
Sadece 50 ders saatinden fazla olan kurslara kayıtlı öğrencileri görmek isteyelim:
SELECT
    O.Ad,
    O.Soyad,
    K.KursAdi,
    KD.DersSaati
FROM
    Ogrenciler AS O
INNER JOIN
    Kayitlar AS K ON O.OgrenciID = K.OgrenciID
INNER JOIN
    KursDetaylari AS KD ON K.KursAdi = KD.KursAdi
WHERE
    KD.DersSaati > 50;
Açıklama: Önceki sorguya bir WHERE koşulu eklenerek, sadece DersSaati 50'den büyük olan kurslara kayıtlı öğrenciler filtrelenmiştir. INNER JOIN işlemi tamamlandıktan sonra filtreleme uygulanır.
Önemli Notlar
ONveWHEREKoşulları:ONkoşulu, tabloların nasıl birleştirileceğini tanımlarken,WHEREkoşulu birleştirilmiş sonuç kümesini daha da filtrelemek için kullanılır.ONkoşulundaki eşleşmeyen satırlar hiçbir zaman sonuç kümesine dahil edilmezken,WHEREkoşulu birleştirme sonrası sonuçları etkiler.Kolon Adı Çakışmaları ve Takma Adlar: Farklı tablolarda aynı ada sahip kolonlar varsa (örneğin, her iki tabloda da bir
IDkolonu), sorguda bu kolonları belirtirken tablo adı ön eki (tablo_adı.kolon_adı) veya takma adlar (alias.kolon_adı) kullanmak zorunludur. Bu, "ambiguous column name" (belirsiz kolon adı) hatasını önler ve sorgunun okunabilirliğini artırır.Performans İpuçları: Büyük tablolarda
INNER JOINperformansı için birleştirme koşulunda kullanılan kolonlarda indekslerin bulunması kritik öneme sahiptir. İndeksler, veritabanı motorunun eşleşen satırları çok daha hızlı bulmasına yardımcı olur.NULLDeğerler:INNER JOIN,ONkoşulundaNULLdeğerlerle eşleşme yapmaz. Eğer bir tabloda eşleşme kolonuNULLise, bu satırINNER JOINsonucunda yer almaz.NULLdeğerleri de dahil etmek isterseniz,LEFT JOINveyaRIGHT JOINgibi farklıJOINtürlerini değerlendirmeniz gerekebilir.Veri Bütünlüğü:
INNER JOINkullanırken, birleştirme koşulunda kullanılan kolonlardaki veri bütünlüğünün doğru olduğundan emin olun. Tutarsız veriler veya yanlış eşleşme koşulları hatalı veya eksik sonuçlara yol açabilir.
        
                
            
            
Yorum yap
Yorumlar