UPDATE: Veriyi Değiştirme

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.
  • WHERE koş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 title ve pages değ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ı authors tablosunda bulunuyorsa, kitaplar indirim alır.
  • Şemamızda tüm yazarlar books tablosunda authors tablosunda 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 ... SET kullanın.
  • Hangi satırların güncelleneceğini belirtmek için her zaman bir WHERE ifadesi kullanın.
  • Karmaşık güncellemeler için alt sorgular ve CASE ifadelerinden yararlanın.
  • Güncellenen satırlar hakkında bilgi almak için RETURNING kullanı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!