INSERT: Yeni Veri Ekleme

PostgreSQL INSERT Deyimi: Tablolarınıza Veri Ekleme

PostgreSQL öğretici serimize hoş geldiniz! Bu derste, veritabanı tablolarınıza yeni veri eklemek için temel olan INSERT deyimine odaklanacağız. INSERT deyimini etkili bir şekilde kullanmayı anlamak, tablolarınızı anlamlı verilerle doldurmanızı sağlar.

INSERT Deyimine Giriş

PostgreSQL'deki INSERT deyimi bir tabloya yeni satırlar eklemek için kullanılır. Verileri tüm sütunlara veya belirli sütunlara ekleyebilir, birden fazla satırı tek seferde ekleyebilir ve hatta başka tablolardan veri ekleyebilirsiniz.

Temel Söz Dizimi

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
  • INSERT INTO: Verinin hangi tabloya ekleneceğini belirtir.
  • VALUES: Sütunlara eklenecek değerleri listeler.

PostgreSQL Tablolarına Veri Ekleme

Kütüphane ve film veritabanımızı kullanarak INSERT deyimini çeşitli yollarla kullanımını pratik örneklerle keşfedelim.

1. Tek Bir Satır Ekleme

Örnek: books tablosuna yeni bir kitap eklemek

INSERT INTO books (title, author, price, pages)
VALUES ('Brave New World', 'Aldous Huxley', 9.99, 268);

Şema Başlatmasını Görün

Açıklama:

  • 'Brave New World' başlıklı yeni bir kitap, belirtilen yazar, fiyat ve sayfa sayısıyla books tablosuna ekleniyor.

2. Birden Fazla Satır Ekleme

Birden fazla satırı tek bir ifade ile, değer setlerini virgüllerle ayırarak ekleyebilirsiniz.

Örnek: authors tablosuna birden fazla yazar ekleyin

INSERT INTO authors (name)
VALUES ('Aldous Huxley'),
       ('Ray Bradbury'),
       ('Kurt Vonnegut');

Açıklama:

  • Üç yeni yazar authors tablosuna eklenir.

3. Belirli Sütunlara Veri Ekleme

Tüm sütunlar için değerleriniz yoksa, belirli sütunlara veri ekleyebilirsiniz. Belirtilmeyen sütunlar varsayılan değerlerini veya varsayılan ayarlanmadıysa NULL alır.

Örnek: Ek ayrıntılar vermeden bir film ekleyin

movies tablomuzda sadece title sütunu olduğundan, yalnızca bu sütuna veri ekleyebiliriz.

INSERT INTO movies (title)
VALUES ('Blade Runner');

Açıklama:

  • 'Blade Runner' başlıklı yeni bir film movies tablosuna eklenir.

4. Varsayılan Değerleri Kullanma

Bir sütunun varsayılan değerini açıkça eklemek için DEFAULT anahtar kelimesini kullanabilirsiniz. Tablo varsayılan değerler tanımlamışsa bu mümkündür.

Örnek: Varsayılan fiyatla bir kitap eklemek

Öncelikle, books tablosunu varsayılan bir fiyata sahip olacak şekilde değiştirin (eğer zaten yoksa):

-- books tablosunu varsayılan fiyata sahip olacak şekilde değiştir
ALTER TABLE books ALTER COLUMN price SET DEFAULT 9.99;
 
-- Varsayılan fiyatı kullanarak bir kitap ekle
INSERT INTO books (title, author, pages)
VALUES ('Fahrenheit 451', 'Ray Bradbury', 194);

Açıklama:

  • 'Fahrenheit 451' kitabı varsayılan $9.99 fiyatla eklenir.

5. Başka Bir Tablodan Veri Ekleme

INSERT INTO ... SELECT deyimini kullanarak bir tabloya başka bir tablodan veri ekleyebilirsiniz.

Örnek: Yazarları yeni bir tabloya kopyalayın

-- Klasik yazarlar için yeni bir tablo oluştur
CREATE TABLE classic_authors (name VARCHAR(255));
 
-- authors tablosundan classic_authors'a yazarları ekle
INSERT INTO classic_authors (name)
SELECT name
FROM authors
WHERE name IN ('George Orwell', 'Jane Austen', 'Leo Tolstoy');

Açıklama:

  • Yeni bir classic_authors tablosu oluşturulur.
  • Belirtilen isimlerle eşleşen yazarlar classic_authors tablosuna kopyalanır.

6. Eklenen Verileri Döndürme

RETURNING ifadesi, eklenen satırlardan veri döndürmenize olanak tanır.

Örnek: Bir kitap ekleyin ve başlığını ve fiyatını döndürün

INSERT INTO books (title, author, price, pages)
VALUES ('Slaughterhouse-Five', 'Kurt Vonnegut', 8.99, 275)
RETURNING title, price;

Açıklama:

  • Kitap eklenir ve eklenen satırın title ve price değerleri döndürülür.

7. ON CONFLICT ile Çakışmaları Yönetme (Upsert)

ON CONFLICT ifadesi, bir ekleme işleminde benzersizlik kısıtlamasını ihlal edecekse alternatif bir eylem belirtmenize olanak tanır.

Öncelikle, ilgili sütunda benzersizlik (unique) kısıtlaması ayarlanmalıdır.

Örnek: Bir yazar ekleyin veya zaten varsa hiçbir şey yapmayın

Öncelikle, name sütununda bir benzersizlik kısıtlaması olduğundan emin olun:

ALTER TABLE authors ADD CONSTRAINT unique_name UNIQUE (name);

Şimdi ON CONFLICT kullanın:

INSERT INTO authors (name)
VALUES ('George Orwell')
ON CONFLICT (name) DO NOTHING;

Açıklama:

  • 'George Orwell' ismini authors tablosuna eklemeye çalışır.
  • Eğer 'George Orwell' zaten varsa, ekleme atlanır.

8. Alt Sorgularla INSERT Kullanma

Alt sorgular kullanarak ekleme için değerler üretebilirsiniz.

Örnek: authors tablosunda henüz olmayan kitaplardan yazar ekleyin

Diyelim ki bazı kitaplarımız var ve bu kitapların yazarları henüz authors tablosunda yok.

Öncelikle, books tablosundaki yazarlardan authors tablosunda olmayanları bulalım ve authors tablosuna ekleyelim:

INSERT INTO authors (name)
SELECT DISTINCT author
FROM books
WHERE author NOT IN (SELECT name FROM authors);

Açıklama:

  • books tablosundaki yazarlardan, authors tablosunda henüz olmayanlar authors tablosuna eklenir.
  • Şemamıza göre, tüm yazarlar zaten mevcuttur, bu nedenle yeni kitaplar yeni yazarlar içermedikçe books tablosuna yeni yazarlar eklenmeyecektir.

9. JSON Verilerini Ekleme

Şemamız JSON sütunları içeren herhangi bir tablo içermemektedir ancak bir tane oluşturabiliriz.

Örnek: Bir tabloya bir JSON nesnesi ekleyin

Önce bir JSON sütunlu bir tablo oluşturun:

CREATE TABLE book_info (
    id SERIAL PRIMARY KEY,
    info JSONB
);

JSON verilerini ekleyin:

INSERT INTO book_info (info)
VALUES ('{"title": "Dune", "author": "Frank Herbert", "price": 10.99, "pages": 412}');

Açıklama:

  • Kitap detaylarını içeren bir JSON nesnesi book_info tablosuna eklenir.

10. Tablolar Arasında Veri Kopyalama

Bir tablodan diğerine veri kopyalayabilir, hatta dönüşümler (transformations) uygulayabilirsiniz.

Örnek: Indirimli 10% ile kitapları discounted_books tablosuna kopyalayın

discounted_books tablosunu oluşturun:

CREATE TABLE discounted_books (
    title VARCHAR(255),
    author VARCHAR(255),
    discounted_price NUMERIC(10, 2)
);

Dönüştürülmüş değerlerle verileri ekleyin:

INSERT INTO discounted_books (title, author, discounted_price)
SELECT title, author, price * 0.9
FROM books;

Açıklama:

  • Tüm kitaplar %10 indirim uygulanmış fiyatlarla discounted_books tablosuna kopyalanır.

Sonuç

PostgreSQL'deki INSERT deyimi, tablolarınıza veri eklemek için çok yönlü bir araçtır. Tek bir satır, birden fazla satır veya başka tablolardan veri ekleme olsun, INSERT deyimini öğrenmek veritabanı yönetiminde ustalaşmak için kritik öneme sahiptir.

Önemli Noktalar:

  • Yeni veri eklemek için INSERT INTO ... VALUES kullanın.
  • Birden fazla satır eklemek için birden fazla değer seti sağlayın.
  • Özel sütunlara veri eklemek için sütunları belirtin.
  • Eklenen satırlar hakkında bilgi almak için RETURNING kullanın.
  • Hataları önlemek için benzersiz kısıtlamalarla ON CONFLICT kullanın.
  • INSERT INTO ... SELECT kullanarak başka tablolardan veri ekleyin.
  • PostgreSQL'in JSON veri tiplerine desteğini kullanın.

Schema Initialization

-- 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),
('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');

Veritabanınızı INSERT deyimini daha iyi anlamak için bu şema ile çalışmaya hazır hale getirin. Mutlu kodlamalar!