Məzmuna keç
Educora
İrəli16 dəq10 / 22

INSERT, UPDATE, DELETE: məlumatların dəyişdirilməsi

Cədvələ yeni sətirlər əlavə et, mövcud sətirləri dəyiş və lazımsızları sil — həm də bunu təhlükəsiz etməyi öyrən.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • INSERT ilə bir və ya bir neçə sətir əlavə etmək
  • UPDATE ilə sətirləri şərtə görə dəyişmək
  • DELETE ilə 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.

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;
▸ 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ı
Yeni şagird avtomatik olaraq 13 nömrəsini aldı.

Bir əmrlə bir neçə sətir əlavə etmək üçün qiymət qruplarını vergüllə 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;
▸ 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.

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

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;
▸ 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.

SQL
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
Nümunə tapşırıq

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ər
Bir 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.
SQL
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
SQL
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.

SQL
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
SQL
-- 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. 1
    Əvvəlcə SELECT

    Eyni WHERE ilə SELECT * yaz və hansı sətirlərin dəyişəcəyinə bax.

  2. 2
    Sətirləri say

    COUNT(*) ilə sayın gözlədiyin kimi olduğunu yoxla.

  3. 3
    Sonra dəyiş

    SELECT *-i DELETE və ya UPDATE ... SET ilə əvəz et, WHERE-ə toxunma.

  4. 4
    Vacib 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ıqSQLiteMySQLPostgreSQLSQL Server
Bütün sətirləri tez silməkDELETE FROM tTRUNCATE TABLE tTRUNCATE TABLE tTRUNCATE TABLE t
Yeni sətrin id-siLAST_INSERT_ROWID()LAST_INSERT_ID()RETURNING idSCOPE_IDENTITY()
Varsa yenilə, yoxdursa əlavə etON CONFLICT … DO UPDATEON DUPLICATE KEY UPDATEON CONFLICT … DO UPDATEMERGE
Məlumat dəyişikliyi əmrlərində dialekt fərqləri.
Tapşırıq

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.

Tapşırıq · SQL
-- 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
Tapşırıq

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.

Tapşırıq · SQL
-- 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 NULL və ya DEFAULT qiyməti alır; NOT NULL sü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-siz UPDATE və DELETE bütün cədvələ təsir edir — əvvəlcə eyni şərtlə SELECT et.

Özünü yoxla

10 sual. Hər düzgün cavab XP qazandırır.

1 / 10
Cədvələ yeni sətri hansı əmr əlavə edir?