INSERTile bir ya da birkaç satır eklemekUPDATEile satırları bir koşula göre değiştirmekDELETEile satır silmek veWHEREunutulmasının tehlikesini anlamak
Şimdiye kadar yalnızca veri okuduk. Ama gerçek uygulamalar verileri her gün değiştirir: okula yeni bir öğrenci gelir, mağazada fiyatlar artar, iptal edilen siparişler silinir. SQL'de bunun için üç komut vardır: INSERT, UPDATE ve DELETE. Merak etme: buradaki her örnek alıştırma veritabanının yeni bir kopyasında çalışır, yani hiçbir şey kalıcı olarak bozulmaz.
INSERT: satır ekleme
INSERT INTO tablo (sütunlar) VALUES (değerler) — değerler sütunlarla aynı sırada yazılır. id sütununu yazmayız: SQLite'ta INTEGER PRIMARY KEY sütunu otomatik olarak bir sonraki numarayı alır. Bir blokta birkaç komut yazılabilir; sonuçta son SELECT gösterilir.
INSERT INTO students (first_name, last_name, age, grade, city, email)
VALUES ('Nərmin', 'Səlimova', 15, 9, 'Bakı', 'narmin@example.com');
SELECT id, first_name, last_name, city
FROM students
WHERE id > 10
ORDER BY id;▸ Beklenen çıktı
id | first_name | last_name | city 11 | Fidan | Cəfərova | Naxçıvan 12 | Orxan | Babayev | Sumqayıt 13 | Nərmin | Səlimova | Bakı
Tek komutla birkaç satır eklemek için değer gruplarını virgülle ayır:
INSERT INTO products (name, category, price, stock)
VALUES ('Calculator', 'Stationery', 18.5, 70),
('Board game', 'Games', 29.9, 12);
SELECT id, name, category, price, stock
FROM products
WHERE category IN ('Stationery', 'Games')
ORDER BY id;▸ Beklenen çıktı
id | name | category | price | stock 4 | Notebook | Stationery | 3.2 | 500 5 | Pen set | Stationery | 7.9 | 300 10 | Chess set | Games | 42 | 18 11 | Calculator | Stationery | 18.5 | 70 12 | Board game | Games | 29.9 | 12
Listede olmayan sütunlar NULL (ya da tabloda tanımlanmış DEFAULT değerini) alır. Aşağıdaki müşterinin kayıt tarihi yazılmamış, bu yüzden joined_on NULL olur. Ama NOT NULL kısıtlaması olan bir sütun atlanamaz; VTYS komutu reddeder.
INSERT INTO customers (name, city, country)
VALUES ('Aygün Qasımova', 'Quba', 'Azerbaijan');
SELECT id, name, city, joined_on
FROM customers
WHERE id >= 6
ORDER BY id;▸ Beklenen çıktı
id | name | city | joined_on 6 | Zəhra Hüseynli | Bakı | 2025-02-14 7 | Mehmet Kaya | Ankara | 2025-04-01 8 | Aygün Qasımova | Quba | NULL
-- last_name is NOT NULL, so this fails
INSERT INTO students (first_name, age)
VALUES ('Test', 10);▸ Beklenen çıktı
Error: NOT NULL constraint failed: students.last_name
INSERT, SELECT ile de birleştirilebilir; o zaman eklenen satırlar başka bir sorgunun sonucundan alınır. Örneğin tüm 11. sınıf öğrencilerini 7 numaralı derse (English B1) kaydedelim. Henüz puan olmadığı için NULL yazıyoruz.
INSERT INTO enrollments (student_id, course_id, score, enrolled_on)
SELECT id, 7, NULL, '2025-10-01'
FROM students
WHERE grade = 11
ORDER BY id;
SELECT e.student_id, s.first_name, e.score, e.enrolled_on
FROM enrollments AS e
JOIN students AS s ON s.id = e.student_id
WHERE e.course_id = 7
ORDER BY e.id;▸ Beklenen çıktı
student_id | first_name | score | enrolled_on 3 | Leyla | 90 | 2025-09-17 7 | Günay | 64 | 2025-09-20 4 | Elvin | NULL | 2025-10-01 8 | Tural | NULL | 2025-10-01 11 | Fidan | NULL | 2025-10-01
UPDATE: satırları değiştirme
UPDATE tablo SET sütun = değer WHERE koşul, koşula uyan satırlarda sütunun değerini değiştirir. Yeni değer eskisinden hesaplanabilir. Aşağıda kırtasiye ürünlerinin fiyatlarını %10 artırıyoruz.
UPDATE products
SET price = ROUND(price * 1.10, 2)
WHERE category = 'Stationery';
SELECT name, price
FROM products
WHERE category = 'Stationery'
ORDER BY id;▸ Beklenen çıktı
name | price Notebook | 3.52 Pen set | 8.69
Kulaklığın (Headphones) yeni fiyatı 99,90 ve depoya 10 adet daha geldi. Tabloyu güncelle.
Çözümü gösterÇözümü gizle
SET içinde birkaç sütun virgülle değiştirilebilir.Fiyat sabit bir sayıdır:
price = 99.9; stok ise eskisinden hesaplanır: stock = stock + 10.WHERE name = 'Headphones' yalnızca bir satırı seçer. Sonuç: fiyat 99,9, stok 40 + 10 = 50.UPDATE products
SET price = 99.9,
stock = stock + 10
WHERE name = 'Headphones';
SELECT name, price, stock
FROM products
WHERE name = 'Headphones';▸ Beklenen çıktı
name | price | stock Headphones | 99.9 | 50
UPDATE students
SET grade = grade + 1;
SELECT first_name, grade
FROM students
ORDER BY id
LIMIT 3;▸ Beklenen çıktı
first_name | grade Aysel | 10 Murad | 11 Leyla | 9
DELETE: satırları silme
DELETE FROM tablo WHERE koşul, koşula uyan satırları siler. Aşağıda marttan önceki siparişleri siliyoruz: 12 siparişten 4'ü silinir, 8'i kalır.
DELETE FROM orders
WHERE order_date < '2025-03-01';
SELECT COUNT(*) AS orders_left,
MIN(order_date) AS first_order
FROM orders;▸ Beklenen çıktı
orders_left | first_order 8 | 2025-03-05
-- no WHERE: every row is deleted
DELETE FROM enrollments;
SELECT COUNT(*) AS rows_left
FROM enrollments;▸ Beklenen çıktı
rows_left 0
- 1Önce SELECT
Aynı
WHEREileSELECT *yaz ve hangi satırların etkileneceğine bak. - 2Satırları say
COUNT(*)ile sayının beklediğin gibi olduğunu denetle. - 3Sonra değiştir
SELECT *yerineDELETEya daUPDATE ... SETyaz,WHEREbölümüne dokunma. - 4Önemli değişiklikler bir işlem içinde
Gerçek bir veritabanında büyük değişiklikleri bir işlem (transaction) içinde yap ki bir hata olursa geri alabilesin. Bunu son derste öğreneceksin.
| Görev | SQLite | MySQL | PostgreSQL | SQL Server |
|---|---|---|---|---|
| Tüm satırları hızla silmek | DELETE FROM t | TRUNCATE TABLE t | TRUNCATE TABLE t | TRUNCATE TABLE t |
| Yeni satırın id'si | LAST_INSERT_ROWID() | LAST_INSERT_ID() | RETURNING id | SCOPE_IDENTITY() |
| Varsa güncelle, yoksa ekle | ON CONFLICT … DO UPDATE | ON DUPLICATE KEY UPDATE | ON CONFLICT … DO UPDATE | MERGE |
Mağazaya yeni bir ürün geldi: Tablet, kategori Electronics, fiyat 520, stokta 10 adet. Onu products tablosuna ekle, sonra tüm Electronics ürünlerinin adını, fiyatını ve stoğunu fiyata göre azalan sırada göster.
-- 1) INSERT the new product
-- 2) check the result
SELECT name, price, stock
FROM products
WHERE category = 'Electronics'
ORDER BY price DESC;▸ Beklenen çıktı
name | price | stock Laptop | 1450 | 8 Smartphone | 899.99 | 15 Tablet | 520 | 10 Monitor | 310 | 0 Headphones | 120.5 | 40
Kırtasiye ürünlerinde %20 indirim var: Stationery kategorisindeki ürünlerin fiyatını %20 düşür ve virgülden sonra 2 basamağa yuvarla. Sonra bu ürünlerin adını ve yeni fiyatını ada göre sıralayarak göster.
-- 1) UPDATE the prices (don't forget WHERE!)
-- 2) check the result
SELECT name, price
FROM products
WHERE category = 'Stationery'
ORDER BY name;▸ Beklenen çıktı
name | price Notebook | 2.56 Pen set | 6.32
Önemli noktalar
INSERT INTO t (sütunlar) VALUES (...)yeni satır ekler; sütunları her zaman yaz.- Yazılmayan sütunlar
NULLya daDEFAULTdeğerini alır;NOT NULLsütunu atlanamaz. UPDATE t SET sütun = değer WHERE ...satırları değiştirir; yeni değer eskisinden hesaplanabilir.DELETE FROM t WHERE ...satırları siler.WHEREolmadanUPDATEveDELETEtüm tabloyu etkiler; önce aynı koşulla birSELECTçalıştır.
Kendini test et
10 soru. Her doğru cevap XP kazandırır.