Anasayfa / Yazılım / SQL / Birleştirilmiş Tablolar Üzerinde Güncelleme Yapmak

Birleştirilmiş Tablolar Üzerinde Güncelleme Yapmak

SQL’de güncelleme işlemlerini yaparken sadece tek bir tablo üzerindeki verileri güncellemenin yanı sıra tabloları birleştirerek de veri güncelleme ihtiyacı duyabiliriz. Bunu yapabilmek için söz dizimi yani syntax aşağıdaki gibi olmalıdır:

UPDATE takmaBirİsim SET kolon1 = ifade FROM tablo1 AS takmaBirİsim
INNER JOIN tablo2 on takmaBirİsim.kolon2 = tablo2.kolon3

Konuya örnekleme yaparak devam edelim. Burada söz diziminde INNER JOIN yazdım ancak bu işlem OUTER JOIN ile de yapılabilir, yeri gelmişken buna da değinelim. AdventureWorks2012 veri tabanı üzerinde çalışıyorum. Çalışma yapmadan önce UPDATE işlemini demo tablolar üzerinde yapmak istediğim için eğer oluşturmadı iseniz aşağıdaki kodu çalıştırın ve demo tabloları oluşturun.

IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[demoProduct]')
AND type in (N'U'))
DROP TABLE [dbo].[demoProduct];
GO
SELECT * INTO dbo.demoProduct FROM Production.Product;
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[demoCustomer]')
AND type in (N'U'))
DROP TABLE [dbo].[demoCustomer];
GO
SELECT * INTO dbo.demoCustomer FROM Sales.Customer;
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[demoAddress]')
AND type in (N'U'))
DROP TABLE [dbo].[demoAddress];
GO
SELECT * INTO dbo.demoAddress FROM Person.Address;
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[demoSalesOrderHeader]')
AND type in (N'U'))
DROP TABLE [dbo].[demoSalesOrderHeader];
GO
SELECT * INTO dbo.demoSalesOrderHeader FROM Sales.SalesOrderHeader;
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[demoSalesOrderDetail]')
AND type in (N'U'))
DROP TABLE [dbo].[demoSalesOrderDetail];
GO
SELECT * INTO dbo.demoSalesOrderDetail FROM Sales.SalesOrderDetail;

Şimdi dbo.demoAddress tablosundan AddressLine1 ve AddressLine2 alanlarını listeleyelim.

SELECT AddressLine1, AddressLine2 FROM dbo.demoAddress;

2013050201

Şimdi iki tablo üzerinde güncelleme işlemi yapabilecek kodumuzu yazalım.

UPDATE TakmaIsim SET AddressLine1 = FirstName + ' ' + LastName,
AddressLine2 = AddressLine1 + ISNULL(' ' + AddressLine2,'')
FROM dbo.demoAddress AS TakmaIsim
INNER JOIN Person.BusinessEntityAddress Musteri ON TakmaIsim.AddressID = Musteri.AddressID
INNER JOIN Person.Person Kisi ON kisi.BusinessEntityID = Musteri.BusinessEntityID;

(18798 row(s) affected) mesajını alırız ve güncelleme işlemini yaparız.

Tekrar listeleyelim bakalım ne olmuş.

SELECT AddressLine1, AddressLine2 FROM dbo.demoAddress;

2013050202

Böylelikle ilk anda AddressLine1’de yer alan değeri UPDATE ile birlikte AddressLine2 kolonuna taşıdık yani oradaki NULL verileri güncelledik ve AddressLine1’deki verileri de Person.Person tablosundaki BusinessEntityID kolonu altındaki veriler ile değiştirerek UPDATE işlemini gerçekleştirdik.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir