INSERTilə bir və ya bir neçə sətir əlavə etməkUPDATEilə sətirləri şərtə görə dəyişməkDELETEilə sətirləri silmək vəWHERE-siz əmrlərin təhlükəsini başa düşmək
İndiyə qədər yalnız məlumat oxuduq. Amma real tətbiqlər hər gün məlumatı dəyişir: məktəbə yeni şagird gəlir, mağazada qiymətlər qalxır, ləğv olunan sifarişlər silinir. Bunun üçün SQL-də üç əmr var: INSERT, UPDATE və DELETE. Narahat olma: burada hər nümunə məşq bazasının təzə nüsxəsində işləyir, ona görə heç nə birdəfəlik xarab olmur.
INSERT: sətir əlavə etmək
INSERT INTO cədvəl (sütunlar) VALUES (qiymətlər) — qiymətlər sütunlarla eyni ardıcıllıqda yazılır. id sütununu yazmırıq: SQLite-da INTEGER PRIMARY KEY olan sütun avtomatik növbəti nömrəni alır. Bir blokda bir neçə əmr yazmaq olar — nəticədə sonuncu SELECT göstərilir.
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;▸ Gözlənilən nəticə
id | first_name | last_name | city 11 | Fidan | Cəfərova | Naxçıvan 12 | Orxan | Babayev | Sumqayıt 13 | Nərmin | Səlimova | Bakı
Bir əmrlə bir neçə sətir əlavə etmək üçün qiymət qruplarını vergüllə 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;▸ Gözlənilən nəticə
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
Siyahıda olmayan sütunlar NULL alır (və ya cədvəldə təyin olunmuş DEFAULT qiyməti). Aşağıdakı müştərinin qeydiyyat tarixi yazılmayıb, ona görə joined_on NULL-dur. Amma NOT NULL məhdudiyyəti olan sütunu buraxmaq olmaz — VBİS əmri rədd edir.
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;▸ Gözlənilən nəticə
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);▸ Gözlənilən nəticə
Error: NOT NULL constraint failed: students.last_name
INSERT-i SELECT ilə də birləşdirmək olar: onda əlavə olunan sətirlər başqa sorğunun nəticəsindən götürülür. Məsələn, bütün 11-ci sinif şagirdlərini 7 nömrəli kursa (English B1) yazaq. Bal hələ yoxdur, ona görə NULL yazırıq.
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;▸ Gözlənilən nəticə
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: sətirləri dəyişmək
UPDATE cədvəl SET sütun = qiymət WHERE şərt şərtə uyğun sətirlərdə sütunun qiymətini dəyişir. Yeni qiymət köhnəsindən hesablana bilər. Aşağıda dəftərxana mallarının qiymətini 10% qaldırırıq.
UPDATE products
SET price = ROUND(price * 1.10, 2)
WHERE category = 'Stationery';
SELECT name, price
FROM products
WHERE category = 'Stationery'
ORDER BY id;▸ Gözlənilən nəticə
name | price Notebook | 3.52 Pen set | 8.69
Qulaqlıqların (Headphones) yeni qiyməti 99,90-dır və anbara daha 10 ədəd gəlib. Cədvəli yenilə.
Həllini göstərHəllini gizlət
SET-də bir neçə sütunu vergüllə dəyişmək olar.Qiymət sabit ədəddir:
price = 99.9; miqdar isə köhnəsindən hesablanır: stock = stock + 10.WHERE name = 'Headphones' yalnız bir sətri seçir. Nəticə: qiymət 99,9, qalıq 40 + 10 = 50.UPDATE products
SET price = 99.9,
stock = stock + 10
WHERE name = 'Headphones';
SELECT name, price, stock
FROM products
WHERE name = 'Headphones';▸ Gözlənilən nəticə
name | price | stock Headphones | 99.9 | 50
UPDATE students
SET grade = grade + 1;
SELECT first_name, grade
FROM students
ORDER BY id
LIMIT 3;▸ Gözlənilən nəticə
first_name | grade Aysel | 10 Murad | 11 Leyla | 9
DELETE: sətirləri silmək
DELETE FROM cədvəl WHERE şərt şərtə uyğun sətirləri silir. Aşağıda martdan əvvəlki sifarişləri silirik: 12 sifarişdən 4-ü silinir, 8-i qalır.
DELETE FROM orders
WHERE order_date < '2025-03-01';
SELECT COUNT(*) AS orders_left,
MIN(order_date) AS first_order
FROM orders;▸ Gözlənilən nəticə
orders_left | first_order 8 | 2025-03-05
-- no WHERE: every row is deleted
DELETE FROM enrollments;
SELECT COUNT(*) AS rows_left
FROM enrollments;▸ Gözlənilən nəticə
rows_left 0
- 1Əvvəlcə SELECT
Eyni
WHEREiləSELECT *yaz və hansı sətirlərin dəyişəcəyinə bax. - 2Sətirləri say
COUNT(*)ilə sayın gözlədiyin kimi olduğunu yoxla. - 3Sonra dəyiş
SELECT *-iDELETEvə yaUPDATE ... SETilə əvəz et,WHERE-ə toxunma. - 4Vacib dəyişikliklər tranzaksiyada
Real bazada böyük dəyişiklikləri tranzaksiyanın içində et ki, səhv olsa, geri qaytara biləsən. Bunu son dərsdə öyrənəcəksən.
| Tapşırıq | SQLite | MySQL | PostgreSQL | SQL Server |
|---|---|---|---|---|
| Bütün sətirləri tez silmək | DELETE FROM t | TRUNCATE TABLE t | TRUNCATE TABLE t | TRUNCATE TABLE t |
| Yeni sətrin id-si | LAST_INSERT_ROWID() | LAST_INSERT_ID() | RETURNING id | SCOPE_IDENTITY() |
| Varsa yenilə, yoxdursa əlavə et | ON CONFLICT … DO UPDATE | ON DUPLICATE KEY UPDATE | ON CONFLICT … DO UPDATE | MERGE |
Mağazaya yeni məhsul gəldi: Tablet, kateqoriyası Electronics, qiyməti 520, anbarda 10 ədəd. Onu products cədvəlinə əlavə et, sonra bütün Electronics məhsullarının adını, qiymətini və qalığını qiymətə görə azalan sırada göstər.
-- 1) INSERT the new product
-- 2) check the result
SELECT name, price, stock
FROM products
WHERE category = 'Electronics'
ORDER BY price DESC;▸ Gözlənilən nəticə
name | price | stock Laptop | 1450 | 8 Smartphone | 899.99 | 15 Tablet | 520 | 10 Monitor | 310 | 0 Headphones | 120.5 | 40
Dəftərxana malları 20% ucuzlaşdı: Stationery kateqoriyasındakı məhsulların qiymətini 20% azalt və 2 onluq rəqəmə qədər yuvarlaqlaşdır. Sonra həmin məhsulların adını və yeni qiymətini ada görə sıralanmış halda göstər.
-- 1) UPDATE the prices (don't forget WHERE!)
-- 2) check the result
SELECT name, price
FROM products
WHERE category = 'Stationery'
ORDER BY name;▸ Gözlənilən nəticə
name | price Notebook | 2.56 Pen set | 6.32
Əsas fikirlər
INSERT INTO t (sütunlar) VALUES (...)yeni sətir əlavə edir; sütunları həmişə adbaad yaz.- Yazılmayan sütunlar
NULLvə yaDEFAULTqiyməti alır;NOT NULLsütunu buraxmaq olmaz. UPDATE t SET sütun = qiymət WHERE ...sətirləri dəyişir; yeni qiymət köhnədən hesablana bilər.DELETE FROM t WHERE ...sətirləri silir.WHERE-sizUPDATEvəDELETEbütün cədvələ təsir edir — əvvəlcə eyni şərtləSELECTet.
Özünü yoxla
10 sual. Hər düzgün cavab XP qazandırır.