Kurs
SQL join'leri genellikle iki tablodan verileri birleştirmek için kullanılır, ancak bununla sınırlı değilsiniz. Verilerinizdeki daha karmaşık ilişkileri ve içgörüleri ortaya çıkarmak için aslında üç hatta daha fazla tablodan verileri birleştirebilirsiniz.
Bu yazıda, SQL'de üç tabloyu birleştirme örneklerini adım adım göstereceğim; ayrıca veritabanına özgü uygulamaları ve en iyi uygulamaları ele alacağız. Ayrıca tüm temel bilgiler için Introduction to SQL ve Learn SQL kurslarımızı almanızı önemle tavsiye ederim.
SQL'de 3 Tabloyu Birleştirmenin Adımları
SQL'de üç tabloyu birleştirmek, birden çok tabloya yayılan verileri almak için karmaşık sorgular yürütmenizi sağlar. Üç tabloyu birleştirirken, bu tablolardaki verileri birleştirmek için JOIN ifadesini kullanırız.
Aşağıdaki üç tabloya sahip olduğunuzu varsayalım: Customers, Products ve Orders.

SQL'de Customers tablosu örneği. Görsel: Yazar.

SQL'de Products tablosu örneği. Görsel: Yazar.

SQL'de Orders tablosu örneği. Görsel: Yazar.
Önce, hangi müşterilerin sipariş verdiğini ve order_id, order_date ve sipariş edilen quantity gibi sipariş ayrıntılarını göstermek için Customers ve Orders tablolarını birleştirebilirsiniz.
-- Select data from Customers
SELECT
Customers.customer_id,
Customers.first_name,
Customers.last_name,
Orders.order_id,
Orders.order_date,
Orders.quantity
FROM Customers
-- Join Orders table
INNER JOIN Orders
ON Customers.customer_id = Orders.customer_id;

SQL JOIN ile Customers ve Orders tablolarının birleştirilmesi örneği. Görsel: Yazar.
Son olarak, her sipariş için müşterileri, siparişlerini, satın aldıkları ürünleri ve toplam maliyeti içeren kapsamlı bir görünüm almak için Customers, Orders ve Products olmak üzere üç tabloyu birleştirebilirsiniz.
-- Select data starting with Customers
SELECT
Customers.customer_id,
Customers.first_name,
Customers.last_name,
Orders.order_id,
Orders.order_date,
Products.product_name,
Orders.quantity,
Products.price,
(Orders.quantity * Products.price) AS total_cost -- Total cost calculation
FROM Customers
-- Join the Orders table based on customer_id
INNER JOIN Orders
ON Customers.customer_id = Orders.customer_id
-- Join the Products table based on product_id
INNER JOIN Products
ON Orders.product_id = Products.product_id;

SQL'de üç tablonun JOIN ile birleştirilmesi örneği. Görsel: Yazar.
Şimdi üç tabloyu birleştirmek için INNER JOIN, LEFT JOIN ve RIGHT JOIN kullanımına dair pratik örneklere bakalım. Daha fazla bilgi için Introduction to SQL Joins eğitimimize göz atın.
SQL'de 3 Tablo Nasıl Birleştirilir: Örnekler
Şimdi üç tabloyu birleştirmek için INNER JOIN, LEFT JOIN ve RIGHT JOIN kullanarak bazı pratik örneklere bakalım.
Bu join'lerin anlamında takılırsanız ve doğru teknikleri gerçekten ustalaşmak için daha fazla pratik yapmak isterseniz, yalnızca SQL join'lerinde değil, aynı zamanda ilişkisel küme teorisi ve alt sorgular konusunda da yardımcı olacak Joining Data in SQL kursumuza kaydolun.
INNER JOIN Kullanımı
INNER JOIN, üç tablonun tümünde eşleşen değerlere sahip kayıtları getirir ve eşleşmeyen kayıtları filtreler. INNER JOIN, yalnızca ilgili tüm tablolarda doğrudan ilişkisi olan sonuçlara ihtiyaç duyduğunuzda idealdir.
Diyelim ki üç tablonuz var: Customers, Orders ve Products. Aşağıdaki sorgu, yalnızca sipariş veren müşterileri getirir ve her siparişle ilişkili ürünler için ayrıntıları içerir.
-- Select customer details, order information, and associated product names
SELECT
Customers.customer_id,
Customers.customer_name,
Orders.order_id,
Products.product_name
-- Select from Customers table
FROM Customers
-- Join Orders table
INNER JOIN Orders
ON Customers.customer_id = Orders.customer_id
-- Join Products table
INNER JOIN Products
ON Orders.product_id = Products.product_id;
LEFT JOIN Kullanımı
LEFT JOIN, ilk (sol) tablodaki tüm kayıtları ve diğer iki tablodaki eşleşen kayıtları döndürür. Eşleşme yoksa, sağ tablodan gelen sütunlar için NULL değerleri döndürülür. LEFT JOIN, ana tablodaki tüm kayıtları, diğer tablolarda ilişkili veri olmasa bile almak istediğinizde kullanışlıdır.
Aşağıdaki örnekte, sipariş vermemiş olsalar bile tüm müşteriler sonuçta görünecektir. Eşleşen sipariş veya ürün verisi yoksa veri alanları NULL döndürecektir.
-- Select customer details, order information, and product names
SELECT
Customers.customer_id,
Customers.customer_name,
Orders.order_id,
Products.product_name
FROM Customers
-- Join Orders table
LEFT JOIN Orders
ON Customers.customer_id = Orders.customer_id
-- Join Products table
LEFT JOIN Products
ON Orders.product_id = Products.product_id;
Not olarak, SQL'de LEFT JOIN, LEFT OUTER JOIN ile aynıdır. Ayrıntılar için bir eğitimimiz var: SQL LEFT JOIN vs. LEFT OUTER JOIN.
RIGHT JOIN Kullanımı
RIGHT JOIN, üçüncü (en sağdaki) tablodan tüm kayıtları ve sol tablolardan eşleşen kayıtları getirir. RIGHT JOIN daha az yaygın olsa da, en sağdaki tablodaki kayıtları önceliklendirmek istediğinizde yine de faydalıdır.
Örneğin, bir stok analizi yaparken hangi ürünlerin siparişleri veya müşteri etkileşimleri olduğunu bilmek isteyebilirsiniz. Aşağıdaki sorguda tüm ürünler, ilişkili sipariş veya müşteri verileri ile birlikte listelenecektir. Sipariş edilmemiş ürünler varsa, order_id ve customer_name alanları NULL gösterecektir.
-- Select customer details, order information, and product names
SELECT
Customers.customer_id,
Customers.customer_name,
Orders.order_id,
Products.product_name
-- Select from Customers table
FROM Customers
-- Join Orders table
RIGHT JOIN Orders
ON Customers.customer_id = Orders.customer_id
-- Join Products table
RIGHT JOIN Products
ON Orders.product_id = Products.product_id;
Yukarıdaki örnekler tek bir join türünün (INNER JOIN, LEFT JOIN veya RIGHT JOIN) kullanımını gösterse de, aynı sorguda daha karmaşık veri ilişkilerini ele almak için farklı join türlerini birleştirmek tamamen mümkündür ve çoğu zaman gereklidir. Örneğin, bir tabloda tüm kayıtları dahil etmek için LEFT JOIN kullanırken, aynı sorguda başka bir ilişki için INNER JOIN kullanabilirsiniz.
Bu noktada şunu da söylemeliyiz: SQL join'leri soldan sağa sıralı olarak işler, bu nedenle sıra, tabloların nasıl birleştirileceğini ve NULL değerlerin nasıl ele alınacağını belirler. Bu yüzden bu makaleye süreci iki adımda göstererek başladım. Sorgunuzu adım adım kurmak ve sonuçları kademeli olarak doğrulamak en doğru yaklaşımdır. LEFT JOIN ardından INNER JOIN ile INNER JOIN ardından LEFT JOIN sıklıkla farklı sonuç verir.
SQL'de Neden 3 Tabloyu Birleştirmeliyiz
Bir an için veritabanı tasarımından bahsedelim. İki tablodan fazlasını birleştirmenin artık yaygın olmasının nedeni, veritabanı normalleştirmenin yaygınlaşmış olmasıdır. Veritabanları (ve aslında veritabanlarını tasarlayan kişiler) bunu, bilgileri ayrı ve ilişkili tablolarda düzenleyerek yapar. Bu, yinelenmeyi ortadan kaldırmak (ve başka nedenlerle de) için tasarlanmıştır. Bu veritabanı ayrıştırması, yukarıda baktığımız Customers, Orders ve Products tabloları gibi farklı varlıklara ait verilerin ayrı ayrı saklandığı anlamına gelir.
Başka bir deyişle, veriler çoğu zaman normalleştirilmiş bir veritabanı şemasında tutulduğundan, bilgi almak genellikle birden çok tablodan veri birleştirmeyi gerektirir. Bu nedenle, pek çok join içeren sorgular yazmayı bilmeliyiz; çünkü basitçe söylemek gerekirse veriler büyük olasılıkla böyle yapılandırılmıştır. Bu konular için Database Design kursumuz iyi bir kaynaktır.
Veritabanına Özgü Join Özellikleri
SQL join'leri çoğu ilişkisel veritabanında tutarlı olsa da, üç veya daha fazla tabloyu içeren çoklu join'lerin ele alınmasında bazı farklılıklar vardır. Tuzaklardan ve optimizasyon sorunlarından kaçınmak için veritabanına özgü uygulamalara ve dikkat edilmesi gerekenlere bakalım.
MySQL
MySQL genellikle temel join'lerde iyi performans gösterir ancak birden çok tablo içeren karmaşık sorgularda zorlanabilir. MySQL’in EXPLAIN komutu, join performansını anlamak ve indeksleme veya sorguyu yeniden yazma ile sorguları optimize etmenin yollarını belirlemek için faydalıdır. MySQL ayrıca, join sırasını zorlayan ve varsayılan join optimizasyonunun ideal olmadığı durumlarda sorgu performansını potansiyel olarak artıran STRAIGHT_JOIN anahtar sözcüğünü de destekler.
PostgreSQL
PostgreSQL’in güçlü optimize edicisi, onu büyük veri kümelerinde bile karmaşık join'ler için son derece verimli kılar. WITH RECURSIVE ifadesini kullanan özyinelemeli sorguları desteklemesi, çoklu tablolara yayılan hiyerarşik verilerin birleştirilmesini mümkün kılar. PostgreSQL'in window function desteği gelişmiştir ve birleştirilmiş bir veri kümesi içinde satır satır analiz yapmanıza olanak tanıyarak join'leri tamamlayabilir.
SQL Server
SQL Server, varsayılan davranışı geçersiz kılmak ve çoklu tablo join'lerinde performansı artırmak için belirli join ipuçlarına (MERGE JOIN, LOOP JOIN ve HASH JOIN) izin verir. SQL Server'daki CROSS APPLY ve OUTER APPLY işleçleri, tablo değerli fonksiyonlarla tabloları birleştirmek için güçlü araçlardır ve çoklu tablo sorgularında daha fazla esneklik sağlar.
SQL Server’da veri sorgulamanın farklı işlevlerini anlamak için DataCamp’in Introduction to SQL Server kursunu almanızı öneririm. Ayrıca, join becerilerinizi ve veri analizi yeteneklerinizi geliştirmek için SQL Server Fundamentals beceri yolumuzu deneyin. SQL Server Developer kariyer yolu, SQL Server kullanarak sorgularınızı yazma, hata ayıklama ve optimize etme becerileri kazandıracaktır.
Oracle SQL
Oracle, tüm standart join'leri destekler ve eşleşen sütun adlarına göre tabloları otomatik olarak birleştiren NATURAL JOIN gibi benzersiz seçenekler sunar. Oracle’ın CONNECT BY ile hiyerarşik sorguları desteklemesi, iç içe verileri daha verimli işleyerek ek join gereksinimini bazen azaltabilir.
SQL'de 3 Tabloyu Birleştirirken En İyi Uygulamalar
SQL'de üç tabloyu birleştirmek, özellikle veri boyutu büyüdükçe sorgu karmaşıklığını ve performans etkisini artırabilir. Aşağıdakiler, sorgu performansını iyileştirmek için en iyi uygulamalar ve optimizasyon teknikleridir.
-
Uygun İndeksleme Kullanın: Join koşullarında sıkça kullanılan sütunları indekslemek, taranan veri miktarını azaltarak veri getirmeyi hızlandırır.
-
WHERE ve JOIN Koşullarıyla Erken Filtreleyin: Filtreleme koşullarını doğrudan
JOINveyaWHEREifadesine yerleştirerek, sonraki join'lerde işlenmesi gereken veriyi azaltın ve performansı artırın. -
Join Sırasını ve Türünü Düşünün: Birden çok tabloyu birleştirirken, veri kümesini mümkün olan en hızlı şekilde küçültmek için önce daha küçük tabloları birleştirin. Analiziniz eşleşmeyen kayıtları gerektirmiyorsa
LEFTveyaRIGHTjoin kullanmaktan kaçının. -
SELECT ile Seçilen Sütunları En Aza İndirin: Veriye gereksiz sütunları dahil etmemek için
SELECT *kullanmaktan kaçının. Her tablodan döndürülen veriyi azaltmak, belleği daha az kullanmak ve sorgu performansını artırmak için gereken sütunları açıkça seçin. -
Karmaşık Join'ler İçin Alt Sorgular veya Geçici Tablolar Kullanın: Çok karmaşık join'ler için sorguyu alt sorgular kullanarak daha küçük parçalara bölmeyi düşünün. Tekrarlanan karmaşık sorguları içeren join'lerde, özellikle yoğun hesaplama gerektiren sorgular için ara sonuçları geçici tablolarda saklayarak işlem süresinden tasarruf etmeyi değerlendirin.
Sonuç ve İleri Düzey Öğrenme
SQL'de üç tabloyu birleştirmek, kapsamlı veri analizi ve veritabanı yönetimi için birden çok tabloya yayılmış verileri bir araya getirmenizi sağlar. Doğru tekniklerde ustalaşmak, kodunuzun verimli, ölçeklenebilir ve yüksek performanslı olmasını sağlar.
Yetkin bir veri analisti olmak istiyorsanız, gerekli becerileri öğrenmek için Associate Data Analyst in SQL kariyer yolumuza göz atın. Profesyonel kontrol panellerini SQL ile nasıl oluşturacağınızı öğrenmek isterseniz Reporting in SQL kursu da uygundur. Son olarak, SQL'i veri analizi için kullanmadaki yetkinliğinizi göstermek ve özgeçmişinizi öne çıkarmak için SQL Associate Certification almanızı öneririm.
SSS
Üç tabloyu birleştirmek için hangi join türleri kullanılabilir?
Üç tabloyu birleştirmek için INNER JOIN, LEFT JOIN, RIGHT JOIN ve bazen FULL JOIN kullanabilirsiniz.
Üç tabloyu birleştirirken join sırası önemli midir?
Join sırası, özellikle daha büyük tablolarda, performansı etkileyebilir. Daha küçük veya yoğun şekilde filtrelenmiş tablolarla başlamak genellikle verimliliği artırır.
SQL'de üç tabloyu birleştirirken performansı nasıl optimize ederim?
Performansı optimize etmek için join'lerde kullanılan sütunlarda uygun indeksleme yapın, WHERE ifadeleriyle döndürülen satır sayısını sınırlayın ve yalnızca gerekli sütunları seçin.
Üçten fazla tabloyu birleştirebilir miyim?
SQL'de üçten fazla tabloyu birleştirebilirsiniz, ancak sorgu daha karmaşık hale gelebilir ve performans optimizasyonları gerektirebilir.
