Ba'zan jadvaldan keraksiz qatorlarni butunlay olib tashlash kerak bo'ladi: mahsulot sotuvdan chiqdi, mijoz hisobini o'chirdi yoki eski buyurtmani tozalamoqchimiz. Buning uchun DELETE operatoridan foydalanamiz.
DELETE jadvaldan butun qatorni (qatorlarni) o'chiradi. U alohida ustunni emas, balki to'liq qatorni olib tashlaydi.
DELETE ning umumiy ko'rinishi:
DELETE FROM jadval_nomi WHERE shart;WHERE — bu eng muhim qism: u qaysi qatorlar o'chirilishini belgilaydi. Shartga mos kelgan har bir qator o'chiriladi, qolganlari joyida qoladi.
Masalan, quyidagi mahsulotlar jadvalidan boshlaymiz:
| id | nomi | kategoriya | narx | ombor |
|---|---|---|---|---|
| 1 | Telefon | Elektronika | 5000000 | 10 |
| 2 | Noutbuk | Elektronika | 12000000 | 5 |
| 3 | Quloqchin | Elektronika | 300000 | 50 |
| 4 | Kitob | Kitoblar | 50000 | 100 |
| 5 | Daftar | Kanstovar | 8000 | 200 |
| 6 | Ruchka | Kanstovar | 3000 | 500 |
| 7 | Stol | Mebel | 800000 | 15 |
| 8 | Stul | Mebel | 250000 | 40 |
id raqami 3 bo'lgan mahsulotni o'chirish uchun:
DELETE FROM mahsulotlar WHERE id = 3;Bu so'rovdan keyin jadvalda Quloqchin qatori qolmaydi — qolgan 7 ta qator esa o'zgarishsiz turadi.
Shartni xohlagancha murakkab qilishingiz mumkin. Masalan, Kanstovar kategoriyasidagi barcha mahsulotlarni o'chirish:
DELETE FROM mahsulotlar WHERE kategoriya = 'Kanstovar';Bu Daftar va Ruchka qatorlarini birdaniga o'chiradi.
Bu DELETE dagi eng xavfli xato. Agar WHERE ni yozmasangiz:
DELETE FROM mahsulotlar;bu so'rov jadvaldagi BARCHA qatorlarni o'chiradi! Jadval bo'shab qoladi va o'chirilgan ma'lumotlarni qaytarib bo'lmaydi.
Muhim:
DELETE FROM jadvalniWHEREsiz yozish — butun jadvalni tozalaydi. Har doimWHEREshartingiz to'g'ri ekanligiga ishonch hosil qiling. Ko'pchilik xavfsizlik uchun avval xuddi shu shart bilanSELECTqilib, qaysi qatorlar o'chishini ko'rib oladi.
Masalan, o'chirishdan oldin tekshirish:
SELECT * FROM mahsulotlar WHERE ombor < 10;Bu so'rov o'chmoqchi bo'lgan qatorlarni ko'rsatadi. Natija sizni qoniqtirsa, xuddi shu shartni DELETE da ishlatasiz.
DELETE so'rovi hech qanday jadval qaytarmaydi — u shunchaki qatorlarni o'chiradi. O'chirish to'g'ri bo'lganini bilish uchun, undan keyin COUNT(*) bilan qatorlar sonini sanab ko'rishimiz mumkin.
Masalan, ombor zaxirasi 10 dan kam mahsulotlarni o'chiramiz, so'ng nechta qolganini sanaymiz:
DELETE FROM mahsulotlar WHERE ombor < 10;
SELECT COUNT(*) FROM mahsulotlar;Boshida 8 ta mahsulot bor edi. ombor < 10 shartiga faqat bitta mahsulot — Noutbuk (ombori 5) mos keladi (Telefon ombori aniq 10, ya'ni "10 dan kam" emas). Demak bitta qator o'chadi va 7 ta qoladi:
7Eslatma: Bir nechta SQL buyrug'ini ketma-ket yozganda, har birini nuqta-vergul (
;) bilan ajrating. AvvalDELETEishlaydi, keyinSELECTo'chirishdan keyingi holatni ko'rsatadi.
mahsulotlar jadvali tayyor. Avval ombordagi ombor zaxirasi 10 dan kam bo'lgan mahsulotlarni DELETE bilan o'chiring. So'ng jadvalda nechta mahsulot qolganini COUNT(*) bilan chiqaring.