SQL’de UPDATE Komutu
SQL dilinde UPDATE deyimi, veritabanında bulunan verileri değiştirmek-güncellemek amacıyla kullanılan bir deyimdir. Bu derste UPDATE deyiminin kullanımıyla ilgili bazı örnekler yapacağız.
Önceki derslerde de olduğu gibi, bu derste de aşağıdaki örnek tablomuzu kullanacağız.
tablo: personel
ID | isim | bolum | dtarihi | dyeri | maas |
---|---|---|---|---|---|
24 | Aylin Demiray | Muhasebe | 1982 | Niğde | 1100 |
42 | Mehmet Eroğlu | Bilgi İşlem | 1977 | Ankara | 1450 |
54 | Selim Kaya | Bilgi İşlem | 1965 | Konya | 1400 |
61 | Sevda Gökalp | Arşiv | 1980 | İstanbul | 1300 |
Not: Tablodaki ID alanı birincil anahtar, ID, dtarihi ve maas alanları sayısal, diğerleri metin tiptedir. Ayrıca normal şartlarda bolum ve dyeri alanlarında ilişki kurulması gerekir. Fakat burada konuyu basit tutmak amacıyla bilgiler bu şekilde kaydedilmiştir.
UPDATE deyiminin formatı şu şekildedir:
UPDATE [tablo adı] SET [yeni bilgiler] WHERE [şartlar]
Bu formata göre UPDATE deyiminden sonra hangi veritabanı tablosunda güncelleme yapmak istiyorsak o tablonun adını yazıyoruz. SET deyiminden sonra değiştirmek istediğimiz bilgileri giriyoruz. Son olarak WHERE ifadesinden sonra değiştirme işlemi yapacağımız kayıtlarla ilgili şartı veya şartları yazıyoruz. WHERE ifadesinin kullanımı zorunlu değildir, fakat WHERE kullanılmazsa bütün kayıtlar değiştirme işleminden etkilenecektir. Basit bir örnekle başlayalım:
UPDATE personel SET bolum='İdari'
Bu SQL komutu herhangi bir şart aramaksızın (WHERE deyimini kullanmadık), personel tablosunda bulunan kayıtların bölümünü İdari olarak değiştirir.
Başka bir örnekle devam edelim. Bu örnekte bölümü Bilgi İşlem olan kayıtlardaki Bilgi İşlem kısmını Veri Güvenliği olarak değiştirmek istiyoruz. Dolayısıyla komutumuz şu şekilde olacak:
UPDATE personel SET bolum='Veri Güvenliği' WHERE bolum='Bilgi İşlem'
Bu komuttan sonra tabloda, şartı sağlayan iki kayıt güncellenecek ve tablomuzun son hali şu şekilde olacaktır:
ID | isim | bolum | dtarihi | dyeri | maas |
---|---|---|---|---|---|
24 | Aylin Demiray | Muhasebe | 1982 | Niğde | 1100 |
42 | Mehmet Eroğlu | Veri Güvenliği | 1977 | Ankara | 1450 |
54 | Selim Kaya | Veri Güvenliği | 1965 | Konya | 1400 |
61 | Sevda Gökalp | Arşiv | 1980 | İstanbul | 1300 |
Tablonun son halini kullanarak, başka bir örnekle devam ediyoruz:
UPDATE personel SET dtarihi=1978 AND dyeri='Kırıkkale' WHERE ID=42
Bu SQL komutunda AND kullanarak iki alanı güncelledik, sonuç olarak, ID’si 42 olan kayıtta dtarihi alanı 1978 ve dyeri alanı Kırıkkale olarak değişecektir:
ID | isim | bolum | dtarihi | dyeri | maas |
---|---|---|---|---|---|
24 | Aylin Demiray | Muhasebe | 1982 | Niğde | 1100 |
42 | Mehmet Eroğlu | Veri Güvenliği | 1978 | Kırıkkale | 1450 |
54 | Selim Kaya | Veri Güvenliği | 1965 | Konya | 1400 |
61 | Sevda Gökalp | Arşiv | 1980 | İstanbul | 1300 |
Bu örnekte ise UPDATE deyiminin matematiksel olarak kullanımıyla ilgili bir örnek yapıyoruz:
UPDATE personel SET maas=maas+100 WHERE ID=61
ID numarası 61 olan personelin maaşını 100 arttırdık. Tablonun en son haline bakacak olursak:
ID | isim | bolum | dtarihi | dyeri | maas |
---|---|---|---|---|---|
24 | Aylin Demiray | Muhasebe | 1982 | Niğde | 1100 |
42 | Mehmet Eroğlu | Veri Güvenliği | 1978 | Kırıkkale | 1450 |
54 | Selim Kaya | Veri Güvenliği | 1965 | Konya | 1400 |
61 | Sevda Gökalp | Arşiv | 1980 | İstanbul | 1400 |
Buradaki toplama işlemi gibi çıkarma, çarpma, bölme gibi işlemler de UPDATE deyimi ile birlikte yapılabilir. Bu kadar örnek yeterli olmuştur umarım. Faydalı olması dileğiyle.
Sayende resim galerimde yer alan bir kategorideki tüm resimleri diğerine taşıyabildim. Teşekkür ederim. Peki bir sorum olacak. Eğer bolum kısmında veri güvenliği ve arşiv olanları bulup hepsini işletme yapmak için ne yazmam gerekir? Ayrı ayrı mı çalıştıracağız sorguları?
bolum=’Veri Güvenliği’ OR bolum=’Arşiv’ yazabilirsiniz. Ayrı ayrı yapmaya gerek yok.
Teşekkürler özgür bir sorum daha olacak. Ben kategori hiti 3000’den büyük olan categorilerin idsini değiştirmek istiyorum. Onu tahminen aşağıdaki gibi yazmam gerektiğini düşünüyorum ama doğru mudur?
UPDATE 4images_categories SET cat_parent_id= 0 WHERE cat_hits>=3000;
Özgür Tekrar merhaba,
Öncelikle 3000 ve büyük olanlar değişti. Başardım sayende azıcık öğrendim 🙂
YEni bir soruyla karşındayım umarım vaktin vardır.
Şöyle bir isteğim var. Sistemde resim isimleri aynı olan resimlerin adlaırnı değiştirmek istiyorum. Örneğin sqlde ki tablomuz image_name
Örneğin cat_id ‘si 5 olan tablodakileri bulup image_name’lerini ilk tablonun kopek, ikinci tablonun image_name’ini kopekcik, ücüncü tablonun image name’ini kopekler yap. gibi.
programlamama göre atmasyon yaparsam 🙂
UPDATE 4images_images SET image_name= “kopek” WHERE cat_id=5;
bunu yazdığım zaman şöyle olacaktır. cat_id’si 5 olan tüm resimleri kopek olarak değiştirir. Benim amacım hepsini farklı farklı değiştirmesi. Bu mümkün mü?
Eğer doğru anladıysam, bunu tek komutla yapmanın bir yolu yok bildiğim kadarıyla. Yazdığınız komutu herbir kategori için ayrı ayrı çalıştırmalısınız.
Hocam benim başka bir sorum var
“Yaşı en küçük olan personelin bölümünü değiştiren sorgu ”
kafam çok karıştı bir türlü doğru cevabı bulamıyorum (Veritabanını öğrenmeye yeni başladım)
Yaşın en küçük olması için doğum tarihinin en büyük olması gerekir.
Çok teşekkür ederiz güzel bir çalışma olmuş
Anlatım Süper Teşekkürleer 🙂
temiz bir çalışma olmuş teşekürler.
hocam benimde bi sorum alacak bende sql e yeni başladım
sizin tabloya göre anlatayım dogum tarihi 1965’e eşit olacak ama Id si 42 den büyük olan bütün elemanların maaslarını değiştirmek istiyorum
update personel set maas=2000 where dtarih=1965 and where Id>42
böyle bir kod uydurdum ama olmadı hata verdi
Tam hata mesajını yazarsan bakalım.
update personel set maas=2000 where dtarih=1965 and where Id>42
iki tane where kullanmana gerek yok, ikinciyi sil, çalışması lazım.
update personel set maas=2000 where dtarih=1965 and Id>42
update personel set maas=2000 where dtarih=1965 and where Id>42 bunu yazarsan hata verecektir normal olarak. Doğrusu ;
Update Personel set maas=2000 where d.tarih=1965 and Id>42 🙂
arkadaşlar izah etmiş genede hata veriyorsa d.tarih=’1965′ olarak deneyin .