İçeriğe geç
Educora
İleri16 dk10 / 22

INSERT, UPDATE, DELETE: verileri değiştirme

Tabloya yeni satırlar ekle, var olan satırları değiştir, gereksiz olanları sil ve bunu güvenle yapmayı öğren.

Kendini test et
Bu derste öğreneceklerin
  • INSERT ile bir ya da birkaç satır eklemek
  • UPDATE ile satırları bir koşula göre değiştirmek
  • DELETE ile satır silmek ve WHERE unutulması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.

SQL
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ı
Yeni öğrenci otomatik olarak 13 numarasını aldı.

Tek komutla birkaç satır eklemek için değer gruplarını virgülle ayır:

SQL
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.

SQL
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
SQL
-- 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.

SQL
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.

SQL
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
Örnek görev

Kulaklığın (Headphones) yeni fiyatı 99,90 ve depoya 10 adet daha geldi. Tabloyu güncelle.

Çözümü göster
Tek bir 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.
SQL
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
SQL
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.

SQL
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
SQL
-- no WHERE: every row is deleted
DELETE FROM enrollments;

SELECT COUNT(*) AS rows_left
FROM enrollments;
▸ Beklenen çıktı
rows_left
0
  1. 1
    Önce SELECT

    Aynı WHERE ile SELECT * yaz ve hangi satırların etkileneceğine bak.

  2. 2
    Satırları say

    COUNT(*) ile sayının beklediğin gibi olduğunu denetle.

  3. 3
    Sonra değiştir

    SELECT * yerine DELETE ya da UPDATE ... SET yaz, WHERE bölümüne dokunma.

  4. 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örevSQLiteMySQLPostgreSQLSQL Server
Tüm satırları hızla silmekDELETE FROM tTRUNCATE TABLE tTRUNCATE TABLE tTRUNCATE TABLE t
Yeni satırın id'siLAST_INSERT_ROWID()LAST_INSERT_ID()RETURNING idSCOPE_IDENTITY()
Varsa güncelle, yoksa ekleON CONFLICT … DO UPDATEON DUPLICATE KEY UPDATEON CONFLICT … DO UPDATEMERGE
Veri değiştirme komutlarında lehçe farkları.
Alıştırma

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.

Alıştırma · SQL
-- 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
Alıştırma

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.

Alıştırma · SQL
-- 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 NULL ya da DEFAULT değerini alır; NOT NULL sü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.
  • WHERE olmadan UPDATE ve DELETE tüm tabloyu etkiler; önce aynı koşulla bir SELECT çalıştır.

Kendini test et

10 soru. Her doğru cevap XP kazandırır.

1 / 10
Tabloya yeni satırı hangi komut ekler?