PostgreSQL UPDATE İfadesi: Veri Güncelleme
PostgreSQL eğitim serimize tekrar hoş geldiniz! Bu derste, PostgreSQL'deki mevcut verileri değiştirmek için kullanılan UPDATE ifadesine odaklanacağız. UPDATE ifadesini etkili bir şekilde kullanmayı öğrenmek, verilerinizi hassasiyetle yönetmenize ve korumanıza olanak tanır.
UPDATE İfadesine Giriş
PostgreSQL'deki UPDATE ifadesi, bir tabloda mevcut verileri değiştirmek için kullanılır. Tek satırları, birden fazla satırı veya tüm satırları güncelleyebilirsiniz ve bir defada bir veya birden fazla sütunu modifiye edebilirsiniz.
Temel Söz Dizimi
UPDATE tablo_adı
SET sütun1 = değer1, sütun2 = değer2, ...
WHERE koşul;UPDATE: Verilerin güncelleneceği tabloyu belirler.SET: Sütunları ve bunların yeni değerlerini listeler.WHERE: Hangi satırların güncelleneceğini tanımlayan koşulu belirler.
PostgreSQL Tablolarındaki Verilerin Güncellenmesi
Kütüphane ve film veritabanımızı kullanarak, UPDATE ifadesiyle ilgili çeşitli kullanım senaryolarını inceleyelim.
1. Tek Satırı Güncelleme
Örnek: Belirli bir kitabın fiyatını güncelleyin
UPDATE books
SET price = 8.99
WHERE title = '1984';Schema Initialization Dosyasını Görüntüle
Açıklama:
- '1984' adlı kitabın fiyatı $8.99 olarak güncellenmiştir.
WHEREkoşulu ile sadece '1984' başlıklı satırın etkilenmesi sağlanır.
2. Birden Fazla Satırı Güncelleme
Belirli bir koşulu karşılayan birden fazla satırı güncelleyebilirsiniz.
Örnek: 'Jane Austen' tarafından yazılan tüm kitapların fiyatını 1 dolar artırın
UPDATE books
SET price = price + 1
WHERE author = 'Jane Austen';Açıklama:
- 'Jane Austen' tarafından yazılan tüm kitapların fiyatı $1 artırılmıştır.
3. Birden Fazla Sütunu Güncelleme
Tek bir ifadede birden fazla sütun güncelleyebilirsiniz.
Örnek: Bir kitabın fiyatını ve sayfa sayısını güncelleyin
UPDATE books
SET price = 12.99, pages = 200
WHERE title = 'The Great Gatsby';Açıklama:
- 'The Great Gatsby' adlı kitabın fiyatı şimdi $12.99 ve sayfa sayısı 200 olarak güncellenmiştir.
4. Tüm Satırları Güncellemek
WHERE koşulunu atlamak tablo içindeki tüm satırları günceller.
Örnek: Tüm kitaplara %10 indirim uygulayın
UPDATE books
SET price = price * 0.9;Açıklama:
- Tüm kitapların fiyatı %10 oranında düşürülmüştür.
- Tüm satırları güncellerken dikkatli olmalısınız.
5. UPDATE İçinde Alt Sorgu Kullanma
Alt sorgular kullanarak değerleri diğer tablolardan gelen verilere göre atayabilirsiniz.
Örnek: Tüm kitapların fiyatını, kitapların ortalama fiyatına ayarlayın
UPDATE books
SET price = sub.avg_price
FROM (
SELECT AVG(price) AS avg_price
FROM books
) AS sub;Açıklama:
- Her kitabın fiyatı, tüm kitapların ortalama fiyatına güncellenmiştir.
6. CASE İfadesini Kullanma
CASE ifadesi, UPDATE ifadesi içinde koşullu mantık uygulamanıza olanak tanır.
Örnek: Fiyata bağlı olarak farklı indirimler uygulayın
UPDATE books
SET price = CASE
WHEN price > 10 THEN price * 0.85
ELSE price * 0.95
END;Açıklama:
- Fiyatı $10'dan büyük olan kitaplara %15 indirim uygulanır.
- Fiyatı $10 veya daha düşük olan kitaplara %5 indirim yapılır.
7. Alt Sorgularla Güncelleme
Şemamız ek tabloları içermediğinden, karmaşık güncellemeler yapmak için alt sorguları kullanabiliriz.
Örnek: Birden fazla kitabı olan yazarların kitaplarının fiyatını artırın
UPDATE books
SET price = price + 2
WHERE author IN (
SELECT author
FROM books
GROUP BY author
HAVING COUNT(*) > 1
);Açıklama:
- Birden fazla kitap yazmış olan yazarlar tespit edilir.
- Bu yazarların yazdığı kitapların fiyatı $2 artırılır.
8. UPDATE ile LIMIT Kullanma
PostgreSQL, LIMIT parametresini UPDATE ile kullanarak etkilenen satır sayısını sınırlamanıza olanak tanır.
Örnek: Fiyatta alfabetik sırayla ilk 2 kitabın fiyatını güncelleyin
UPDATE books
SET price = price - 1
WHERE ctid IN (
SELECT ctid
FROM books
ORDER BY title
LIMIT 2
);Açıklama:
- Alfabetik olarak ilk iki kitabın fiyatı $1 düşürülmüştür.
ctid, tablo içindeki bir satırı benzersiz şekilde tanımlayan bir sistem sütunudur.
9. Güncellenen Veriyi Geri Getirme
RETURNING ifadesi, güncellenen satırların verilerini geri getirmenize olanak tanır.
Örnek: Sayfa sayısını güncelleyin ve güncellenen kitapları geri getirin
UPDATE books
SET pages = pages + 10
RETURNING title, pages;Açıklama:
- Tüm kitapların sayfa sayısı 10 artırılmıştır.
- Güncellenen
titlevepagesdeğeri geri döndürülür.
10. EXISTS ile Koşullu Güncellemeler
İlişkili verilerin varlığına dayalı olarak satırları koşullu olarak güncellemek için EXISTS kullanın.
Örnek: Yazarların yazarlar tablosunda bulunması durumunda kitapların fiyatını güncelleyin
UPDATE books
SET price = price * 0.95
WHERE EXISTS (
SELECT 1
FROM authors
WHERE authors.name = books.author
);Açıklama:
- Kitapların yazarı
authorstablosunda bulunuyorsa, kitaplar indirim alır. - Şemamızda tüm yazarlar
bookstablosundaauthorstablosunda mevcut olduğundan, bu tüm kitapları günceller.
Sonuç
PostgreSQL'deki UPDATE ifadesi, mevcut verileri değiştirmek için güçlü bir araçtır. Çeşitli özelliklerini öğrenerek, verilerinizin verimli bir şekilde yönetimini ve bakımını sağlayabilirsiniz.
Anahtar Notlar:
- Verileri değiştirmek için
UPDATE ... SETkullanın. - Hangi satırların güncelleneceğini belirtmek için her zaman bir
WHEREifadesi kullanın. - Karmaşık güncellemeler için alt sorgular ve
CASEifadelerinden yararlanın. - Güncellenen satırlar hakkında bilgi almak için
RETURNINGkullanın. - Tüm satırları güncellerken veya çoklu satırları etkileyen işlemler yaparken dikkatli olun.
Schema Initialization
Bu örnekleri çalıştırmak için PostgreSQL veritabanınızın şu şema ile kurulu olduğundan emin olun:
-- Create the books table
CREATE TABLE books (
title VARCHAR(255),
author VARCHAR(255),
price NUMERIC(10, 2),
pages INTEGER
);
-- Insert sample data into the books table
INSERT INTO books (title, author, price, pages) VALUES
('The Great Gatsby', 'F. Scott Fitzgerald', 10.99, 180),
('To Kill a Mockingbird', 'Harper Lee', 7.99, 281),
('1984', 'George Orwell', 8.99, 328),
('Pride and Prejudice', 'Jane Austen', 6.99, 279),
('Sense and Sensibility', 'Jane Austen', 5.99, 226),
('The Catcher in the Rye', 'J.D. Salinger', 9.99, 214),
('Moby-Dick', 'Herman Melville', 11.99, 635),
('War and Peace', 'Leo Tolstoy', 12.99, 1225);
-- Create the authors table
CREATE TABLE authors (
name VARCHAR(255)
);
-- Insert sample data into the authors table
INSERT INTO authors (name) VALUES
('F. Scott Fitzgerald'),
('Harper Lee'),
('George Orwell'),
('Jane Austen'),
('J.D. Salinger'),
('Herman Melville'),
('Leo Tolstoy');
-- Create the movies table
CREATE TABLE movies (
title VARCHAR(255)
);
-- Insert sample data into the movies table
INSERT INTO movies (title) VALUES
('The Shawshank Redemption'),
('The Godfather'),
('The Dark Knight'),
('Pulp Fiction'),
('The Lord of the Rings');UPDATE ifadesini bu şemayla denemekten çekinmeyin ve verilerinizi PostgreSQL'de nasıl modifiye edeceğinizi daha iyi anlayın. Kodlamanızda başarılar!