Kurs
İlişkisel veritabanlarında güvenilirlik ve bütünlük için tutarlı veriler önemlidir. İlişkili tablolar arasında mevcut verileri değiştirirken, veri tutarlılığını sağlamak için UPDATE ifadesini JOIN koşuluyla birlikte kullanırız. JOIN ile UPDATE işlemi SQL Server'da desteklenir ve tablolar arası doğru veri senkronizasyonunu sağlamada kullanışlıdır.
SQL'deki JOIN işlemi, farklı tablolar arasında paylaşılan yabancı anahtarlar üzerinden tek tablo işlemlerinin ötesinde daha karmaşık güncellemeler yapılmasına olanak tanır. JOIN ile UPDATE işlemi, verimliliği artırdığı ve veri tutarsızlığı risklerini azalttığı için geliştiriciler ve veritabanı yöneticileri için faydalıdır.
Başlamadan önce, SQL Server veritabanlarının nasıl çalıştığını öğrenmek için DataCamp’in Introduction to SQL Server kursunu almanızı öneririm. Bu eğitim özellikle SQL Server düşünülerek yazılmıştır. Ayrıca, birden çok tabloyla çalışırken JOIN kullanımını öğrenmek için Introduction to SQL Joins eğitimimize de göz atın.
JOIN ile SQL UPDATE Nasıl Kullanılır
SQL Server'da, JOIN ile UPDATE işlemi, bir tablodaki kayıtları başka bir tablodaki eşleşen verilere göre güncellemenize olanak tanır. Bu teknik özellikle birden çok tablo arasında verileri senkronize ederken faydalıdır.
SQL UPDATE'i INNER JOIN ile kullanma
SQL'de INNER JOIN, her iki tabloda da eşleşen verilere sahip satırları/kayıtları getirir. UPDATE ifadesiyle birlikte kullanıldığında, INNER JOIN yalnızca birleştirilen tabloda karşılık gelen eşleşmeleri olan hedef tablodaki kayıtların güncellenmesini sağlar.
INNER JOIN ile UPDATE'in tipik yapısı, güncellenmesi gereken hedef tabloyu ve güncellenecek sütunları belirtmeyi içerir. Yapı ayrıca yalnızca gerekli kayıtları güncellemek için ortak bir sütun üzerinden başka bir tabloyla bağlantı kurmak üzere INNER JOIN kullanımını içerir.
INNER JOIN örneği
Bir perakende veritabanını yönettiğinizi ve Sales tablosunu, Customer tablosundaki değişikliklerle senkronize olacak şekilde güncellemeniz gerektiğini varsayalım. Bir müşteri yakın zamanda tercih ettiği iletişim yöntemini değiştirdi ve bu değişikliklerin her iki tabloda da yansımasını istiyorsunuz. INNER JOIN ile UPDATE kullanarak yalnızca iletişim bilgilerini güncelleyen müşterilere ait satış kayıtlarının değiştirilmesini, verideki diğer satırların ise etkilenmemesini sağlarsınız.
-- Update the Sales table based on the new preferred contact methods in the Customers table
UPDATE s
SET s.ContactMethod = c.PreferredContactMethod
FROM Sales s
INNER JOIN Customers c ON s.CustomerID = c.CustomerID
WHERE c.CustomerID IN (3, 7, 9);
INNER JOIN ile UPDATE için en iyi uygulamalar
INNER JOIN ile UPDATE kullanırken, verimli sorgular için aşağıdaki en iyi uygulamaları göz önünde bulundurun.
-
Birleştirme Sütunlarında Dizin Kullanın:
JOINkoşulunda kullanılan sütunların performansı optimize etmek için dizinlendiğinden emin olun; bu, sorgu yürütmeyi hızlandırır. -
Güncellemenin Kapsamını Sınırlandırın: Yalnızca ilgili satırların güncellenmesini ve sorgu performansının iyileştirilmesini sağlamak için
WHEREkoşulunu kullanın.
SQL UPDATE'i LEFT JOIN ile kullanma
LEFT JOIN, sol (ilk) tablodaki tüm kayıtları ve sağ (ikinci) tablodaki eşleşen kayıtları getirmek için kullanılır. LEFT JOIN içeren bir sorgu, eşleşme yoksa sağ tablodan NULL sonuçlar döndürür. UPDATE ifadesiyle birlikte kullanıldığında, LEFT JOIN ikinci tabloda eşleşen veri olmasa bile kayıtları güncelleyebilir; bu, eksik verileri doldurmak için kullanışlıdır. SQL join'leri gözden geçirmek istiyorsanız SQL Joins Cheat Sheet sayfamıza göz atın.
LEFT JOIN örneği
Çevrimiçi bir perakende mağazasının veritabanını yönettiğiniz bir senaryoyu düşünün. Customers tablosu tüm müşterilerin bir listesini içerirken, Orders tablosu bu müşterilerden bazılarının verdiği siparişlerin ayrıntılarını içerir. LEFT JOIN kullanarak, henüz sipariş vermemiş olanlar da dahil olmak üzere tüm müşterilerin sipariş ayrıntılarını getirip güncelleyeceksiniz. Bu yöntem, siparişi olmayan müşteriler için eksik verileri NULL ya da belirtilen bir değerle dolduracaktır.
LEFT JOIN örneğimiz biraz farklı olacak çünkü sağ tabloda eşleşen kayıt bulunamazsa LEFT JOIN NULL değerler döndürür. Bu nedenle bu NULL değerlerin nasıl ele alınacağını bilmek önemlidir. Güncellenecek sütunlarda varsayılan bir değer belirleyerek NULL değerleri yönetebilirsiniz. COALESCE() fonksiyonunu kullanarak, LEFT JOIN eksik veriler için varsayılan bir değer koşulunu içerecektir. Aşağıdaki sorgu, NULL değerler için varsayılan bir değer nasıl ayarlanır gösterir.
-- Update all customers to set default values where OrderStatus and OrderDate are NULL
UPDATE c
SET
c.OrderStatus = COALESCE(o.OrderStatus, 'No Orders'),
c.OrderDate = COALESCE(o.OrderDate, '2023-01-01')
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;
-- Select from the updated Customers table
SELECT *
FROM Customers;
Sütunları güncellemeden önce hesaplamalara dahil olan NULL değerleri yönetmek için COALESCE() veya IFNULL() fonksiyonlarını da kullanabilirsiniz. COALESCE() SQL Function eğitimimize göz atarak daha fazlasını öğrenin.
LEFT JOIN ile UPDATE için en iyi uygulamalar
LEFT JOIN ile UPDATE kullanırken, verimli sorgular için aşağıdaki en iyi uygulamaları göz önünde bulundurun.
-
Açık Sütun Referansları Kullanın:
SELECT *kullanmak yerine, sorgunuzu daha anlaşılır kılmak ve istenmeyen güncellemeleri önlemek için güncellemek istediğiniz sütunları açıkça belirtin. -
Birleştirme Sütunlarında Dizin Kullanın:
JOINkoşulunda kullanılan sütunların dizinlendiğinden emin olun; bu,JOINişleminin ve genel sorgu yürütme süresinin performansını iyileştirir.
Join ile SQL Update Performans Hususları
JOIN ile UPDATE kullanırken performans etkilerini anlamak, sorgularınızın verimli çalışmasını sağlamak için önemlidir. Bu işlemlerin performansı; kullanılan tabloların boyutu, kullanılan join türü ve uygun dizinlerin mevcut olup olmadığı gibi çeşitli faktörlerden etkilenebilir.
Dizinler ve sorgu hızı
Birleştirme koşuluna dahil olan sütunların dizinlenmesi, güncelleme sürecini hızlandırmak için önemlidir. Sütunları uygun şekilde dizinlediğinizde, işlem birleştirme sırasında yalnızca eşleşen satırları bulur ve tablo taraması için gereken süreyi azaltır.
Büyük veri kümelerinin etkisi
Büyük veri kümeleriyle çalışırken, kaynak yoğun işlemler nedeniyle sorgu yürütmeleri daha yavaş olabilir. Büyük veri kümelerinde performans sorunlarını azaltmak için aşağıdaki en iyi uygulamaları değerlendirin. Ayrıca, düzenli olarak veritabanı tasarlayacak veya yönetecekseniz SQL Server for Database Administrators beceri yolunu da deneyin.
-
Toplu Güncellemeler: Veritabanı üzerindeki yükü azaltmak ve kayıtları verimli şekilde güncellemek için güncellemeleri daha küçük partilere bölün.
-
Güncellemenin Kapsamını Sınırlandırın:
WHEREkoşulunu kullandığınızda, güncellenecek satırları belirtirsiniz ve bu da sorguların işlem süresini azaltır.
Yaygın Hatalar ve Bunlardan Kaçınma Yolları
SQL Server'da JOIN ile UPDATE kullanırken karşılaşabileceğiniz bazı yaygın hatalar vardır. Bu hatalar performans sorunlarına veya istenmeyen verilerin güncellenmesine yol açabilir. Aşağıda bu hatalardan bazıları ve bunlardan nasıl kaçınılacağı yer almaktadır.
İstenmeyen güncellemeler
Birleştirme koşulunu doğru şekilde belirtmezseniz, JOIN ile UPDATE amaçlanandan daha fazla kaydı günceller. Bu hata, gerekli alt küme yerine tüm bir tablonun güncellenmesine neden olur. Bu hatadan kaçınmak için, gereken satırları güncellemek üzere her zaman kesin bir JOIN koşulu kullandığınızdan emin olun.
Kartezyen çarpımlar
Birleştirme koşulu hatalı ya da eksik olduğunda, soldaki tablodaki her satırın sağdaki tablodaki her satırla eşleşmesine neden olarak bir Kartezyen çarpım oluşur. Bu sorun sorgu işlemini yavaşlatabilir ve hatalı sonuçlar üretebilir. Bu hatayı önlemek için, JOIN koşulunun doğru tanımlandığından ve birleştirme koşulunu uygulayacağınız doğru sütunları belirttiğinizden emin olun.
JOIN ile SQL UPDATE'e Alternatifler
JOIN ile UPDATE, ilişkili tablolar arasında kayıtları güncellemek için güçlü bir yöntem olsa da, güncelleme yapmak için alternatif yöntemler de vardır. Aşağıda bazı seçenekler yer almaktadır.
Alt sorgular
Basit bir koşula dayalı güncellemeler yapmak istediğinizde alt sorgular, JOIN'e önemli bir alternatiftir. Alt sorgularla, koşulu alt sorguda belirterek birden çok karmaşık tabloyu kullanmaktan kaçınabilirsiniz.
Aşağıdaki örnek, Sales tablosunu Customers tablosundan en güncel CustomerStatus ile güncellemek için alt sorgunun nasıl kullanılacağını gösterir.
-- Update the CustomerStatus in the Sales table
UPDATE Sales
-- Set the CustomerStatus in Sales to corresponding value from the Customers table
SET CustomerStatus = (
-- Fetch CustomerStatus from the Customers table for the matching CustomerID
SELECT CustomerStatus
FROM Customers
WHERE Customers.CustomerID = Sales.CustomerID
)
-- Update rows in Sales where a matching CustomerID exists in the Customers table
WHERE EXISTS (
-- Subquery to check if a matching CustomerID exists in the Customers table
SELECT 1
FROM Customers
WHERE Customers.CustomerID = Sales.CustomerID
);
MERGE ifadesi
MERGE ifadesi, iki tabloyu karşılaştırmaya dayalı olarak tek bir sorguda UPDATE, INSERT veya DELETE işlemlerini gerçekleştirmenize olanak tanıyan çok yönlü bir SQL komutudur. MERGE ifadesi, eşleşen ve eşleşmeyen satırları ele alarak iki tablo arasında veri senkronizasyonu yapmanız gerektiğinde kullanışlıdır.
MERGE ifadesinin kullanılması, birden çok işlemi tek bir sorguda yürütmek için özlü bir yöntem sağladığından faydalıdır. MERGE ifadesinin sözdizimi aşağıdaki gibidir.
-- Merge data from the source table into the target table
MERGE INTO target_table AS target
USING source_table AS source
-- Define the common key between the source and target tables
ON target.common_column = source.common_column
-- When a match is found in both tables based on the common key
WHEN MATCHED THEN
-- Update the target table's column with the corresponding value from the source table
UPDATE SET target.column = source.column
-- When a row exists in the source table but not in the target table
WHEN NOT MATCHED THEN
-- Insert the new data into the target table
INSERT (column1, column2)
VALUES (source.column1, source.column2)
-- When a row exists in the target table but not in the source table
WHEN NOT MATCHED BY SOURCE THEN
-- Delete the row from the target table
DELETE;
Sonuç
SQL Server'da JOIN ile UPDATE kullanımını anlamak, ilişkisel veritabanlarında verimli çapraz tablo veri güncellemeleri için önemlidir. Bu teknik, ilişkili tablolar arasında veri tutarlılığı ve senkronizasyon sağlayarak, bir tablodaki kayıtları başka bir tablodaki eşleşen verilere göre güncellemenize olanak tanır. Bu teknik ve en iyi uygulamaları hayata geçirerek veritabanı işlemlerinizi geliştirebilir; doğru, verimli ve güvenilir veri yönetimi sağlayabilirsiniz.
SQL becerilerinizi ilerletmek istiyorsanız, veri analizi becerilerinizi geliştirmek için DataCamp’in SQL Server Fundamentals beceri yoluna göz atmanızı öneririm. Writing Functions and Stored Procedures in SQL Server kursu da SQL Server'da veriyi verimli biçimde işlemenize yardımcı olacaktır. SQL mülakatınıza hazırlanıyorsanız, hazırlık için 20 Top SQL Joins Interview Questions blog yazımızı okumanızı öneririm. Son olarak, SQL becerilerinizi veri mühendisi kariyerinde uygulamak istiyorsanız, sonunda sertifika da sunan Data Engineer in Python kariyer yolunu da değerlendirin.
Sık Sorulan SQL Soruları
SQL'de UPDATE ile JOIN kullanmanın amacı nedir?
JOIN ile UPDATE, bir tablodaki kayıtları başka bir tablodaki eşleşen verilere göre güncellemenize olanak tanır.
Bir UPDATE ifadesinde INNER JOIN ile LEFT JOIN arasındaki fark nedir?
INNER JOIN, yalnızca her iki tabloda da eşleşen satırlara sahip kayıtları güncellerken, LEFT JOIN eşleşen satırı olmayanlar da dahil olmak üzere hedef tablodaki tüm kayıtları günceller; eksik verileri doldurur veya NULL değerleri ele alır.
SQL'de UPDATE with JOIN'in performans sorunları nelerdir?
Büyük tablolar/veri kümeleri, daha fazla işlem gücü gerektirdiğinden JOIN ile UPDATE sorgu performansını etkileyebilir.
SQL'de UPDATE with JOIN'i hangi veritabanları destekler?
JOIN ile UPDATE kavramı SQL Server, MySQL ve PostgreSQL'de çalışır; ancak sözdizimi veritabanına göre farklılık gösterir. Oracle, JOIN ile UPDATE'i doğrudan desteklemez ve alt sorgular veya MERGE ifadesi kullanılarak farklı bir yaklaşım gerektirir.
SQL'de UPDATE with JOIN'e alternatifler nelerdir?
Alt sorgular veya MERGE ifadesini kullanmak, JOIN ile UPDATE'e uygun alternatiflerdir.
