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);Açıklama:
- 'Brave New World' başlıklı yeni bir kitap, belirtilen yazar, fiyat ve sayfa sayısıyla
bookstablosuna 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
authorstablosuna 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
moviestablosuna 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_authorstablosu oluşturulur. - Belirtilen isimlerle eşleşen yazarlar
classic_authorstablosuna 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
titlevepricedeğ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
authorstablosuna 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:
bookstablosundaki yazarlardan,authorstablosunda henüz olmayanlarauthorstablosuna eklenir.- Şemamıza göre, tüm yazarlar zaten mevcuttur, bu nedenle yeni kitaplar yeni yazarlar içermedikçe
bookstablosuna 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_infotablosuna 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_bookstablosuna 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 ... VALUESkullanı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
RETURNINGkullanın. - Hataları önlemek için benzersiz kısıtlamalarla
ON CONFLICTkullanın. INSERT INTO ... SELECTkullanarak 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!