4.1 UPDATE SET bildirimi
Tablodaki mevcut kayıtları değiştirmeniz gerekirse, bunun için operatörü kullanırız UPDATE
.
Bir yandan operatör, UPDATE
operatöre benzer INSERT
, çünkü sütunlar için yeni değerler belirlememiz gerekir. Öte yandan, operatör SELECT
, çünkü veri gruplarıyla anında çalışmanıza izin verir.
Önemli! Operatörün amacı, UPDATE
tablonun bir satırındaki verileri değil, belirli bir koşulu sağlayan tüm satırlardaki verileri değiştirmektir. Ve küçük bir hata yaparsanız, tablodaki tüm verileri kolayca kaybedebilirsiniz.
İsteğin genel görünümü:
UPDATE table SET
column 1 = expression 1,
column 2 = expression 2,
column 3 = expression 3
WHERE condition;
Tüm çalışanlarımızın maaşını 100 artıracak bir sorgu yazalım. Sorgumuz şöyle görünecek:
UPDATE employee SET
salary = salary+100;
Ve şimdi maaşı 50 binin altında olan herkes için de %20 zam yapacağız. Örnek talep:
UPDATE employee SET
salary = salary*1.2
WHERE salary<50000;
Ve tabii ki yönetmenin maaşını 2 kat artıracağız, onsuz nasıl olabilir:
UPDATE employee SET
salary = salary*2
WHERE id=4;
4.2 Karmaşık veri değişikliği senaryoları
Aynı anda birkaç tablodaki verileri değiştirmeye karar verirseniz veya bir tablodaki verileri değiştirdiğinizde, onu başka bir tablodaki verilerle doldurmanız veya bir şekilde ilkini değiştirme sürecinde başka bir tablodaki verileri kullanmanız gerekir. sonra sürprizler bizi bekliyor.
Çalışan tablosunda bulunan kullanıcı tablosundaki tüm kullanıcıların seviyesini değiştirmeye çalışalım. Basitlik için, kullanıcıların tesadüflerini isme göre kontrol edeceğiz.
Bu sorguyu nasıl yazmak isteriz:
UPDATE user SET
level = 80,
WHERE user . name IN ( list of names from employee table );
Peki, bu sorguya çalışan tablosundan bir isim listesi ekleyelim:
UPDATE user SET
level = 80,
WHERE user.name IN (select name from employee);
İlginç! İsimleri almak için SQL sorgusunun kendisinin görev açıklamasından bile daha kısa olduğu ortaya çıktı. SQL'in yaratıcıları ekmeklerini boşuna yemediler.
Seni üzmek zorunda kaldım -bu yaklaşım işe yaramayacak. Öncelikle bu tablolara katılmanız gerekiyor, şöyle görünecek:
UPDATE table 1, table 2 SET
column 1 = expression 1,
column 2 = expression 2,
column 3 = expression 3
WHERE table 1.id = table 2.ref_id;
Hadi biraz daha zorlaştıralım. Sadece maaşı 50 binden fazla olacak iyi çalışanlar için seviyeyi 80 olarak ayarlamanız gerekir. Tam çözüm şöyle görünecektir:
UPDATE user, good_employees SET
user.level = 80
WHERE user.name = good_employees.name;
Tabloların böyle bir birleştirilmesi aslında INNER JOIN
, yani sonunda yalnızca ikinci tabloda ada göre eşleşmesi olan kullanıcılar kalacak.
Ama yine de bir şekilde iyi çalışanları seçmemiz gerekiyor, bu yüzden biraz daha kod ekleyelim:
SELECT * FROM employee WHERE salary >= 50000
Ve şimdi bu tabloyu son sorgumuzda değiştiriyoruz:
UPDATE user,
(SELECT * FROM employee WHERE salary >= 50000) good_emps
SET
user.level = 80
WHERE user.name = good_emps.name;
Şimdi onunla yaşa.