Son Haberler
Anasayfa / Yazılım / SQL / UPDATE ile Güncelleme İşlemleri

UPDATE ile Güncelleme İşlemleri

AdventureWorks2012 veri tabanı üzerinde bir kaç örnekle güncelleme örneklerine yer verelim. Örnek yapabilmek için bir kaç demo tablo oluşturmamız gerekiyor, bunun için AdventureWorks2012 veri tabanı seçili iken bir Query penceresi açalım ve aşağıdaki kodu yazalım:

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;

1) Şimdi ilk örneğimde dbo.demoAddress tablosunda AddressLine2 kolonda yer alan tüm NULL yazan değerleri Veri Yok şeklinde değiştirelim.

Şimdi bir tablomuzda bakalım kaç satır veri var:

SELECT * FROM dbo.demoAddress;

2013051106

19614 satır veri var. Peki bizim güncellemek istediğimiz kaç veri var bunu görelim.

SELECT AddressLine2 FROM dbo.demoAddress WHERE AddressLine2 IS NULL;

2013051107

19252 satır veri var. Şimdi değişikliği yapalım.

UPDATE dbo.demoAddress SET AddressLine2 = 'Veri Yok' WHERE AddressLine2 IS NULL;
(19252 row(s) affected) bilgisi alırız. Bir bakalım cidden değişmiş mi?

SELECT * FROM dbo.demoAddress;

2013051108

2) Bu seferde dbo.demoProduct tablosundaki her ürün için ListPrice kolonunun değerini %20 arttıralım. ListPrice değeri 0.00 olanları dikkate almıyoruz.

Önce normal bi şekilde görelim bakalım, çünkü aradaki farkı güncelleme sonucu görmek istiyoruz.

SELECT ListPrice FROM dbo.demoProduct WHERE ListPrice > 0.00;

2013051109

304 satır veri mevcut. Şimdi bunları %20 arttırarak güncelleme yapalım.

UPDATE dbo.demoProduct SET ListPrice *= 1.2;

Bu sorgu sonucunda (504 row(s) affected) bilgisi alırız. Burada 304 satır veri listelemiştik bu aradaki 200 fark update ederken 0.00 değerlerini UPDATE etme gibi bir filtreleme yapmadım. Aslında yapabiliriz, ama zaten 0.00 değerlerinin çarpımı yine 0 olacağı için dikkate almadım. Aradaki 200 satır veri farkı bundan kaynaklanıyor.

Bir bakalım ne olmuşlar :

SELECT ListPrice FROM dbo.demoProduct WHERE ListPrice > 0.00;

2013051110

3) dbo.demoSalesOrderDemo tablosunun LineTotal kolonunun toplamı ile birlikte dbo.demoSalesOrderHeader tablosunun her satırı için SubTotal kolonunu güncelleyecek sorguyu yazalım.

Bunun için genel ortak tablo ifadelerinde sorgulama mantığını gerçekleştirmemiz gerekiyor.

WITH SOD AS(SELECT SUM(LineTotal) AS TotalSum, SalesOrderID 
FROM dbo.demoSalesOrderDetail GROUP BY SalesOrderID)
UPDATE SOH SET SubTotal = TotalSum FROM dbo.demoSalesOrderHeader
AS SOH INNER JOIN SOD ON SOH.SalesOrderID = SOD.SalesOrderID;

Bir yorum

  1. Merhaba ben sql deki 4 tane tabloyu c# daki datagridviewe getirmeye çalışıyorum ama başaramıyorum.Yardımcı olur musunuz?

Bir cevap yazın

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