Само нужните редове
Проблем
Кое свърши?
Сутрин управителят иска да знае кои продукти трябва да се поръчат, защото са свършили. В таблицата са 25 продукта. Утре ще са 2 500.
Не му трябват всички редове. Трябват му само тези, при които наличността е 0.
Идеята
WHERE
WHERE оставя само редовете, за които условието е вярно:
Базата минава през всеки ред, проверява stock = 0 и пази само верните. Условието може да сравнява с всяка колона, а не само с тези в SELECT.
Сравненията са: = равно, <> различно, <, >, <=, >=. Числата се пишат с точка:
Текстът е в единични кавички:
По-точно, за любопитните
SQLite приема и city = "Пловдив" с двойни кавички, но само по стар навик: ако няма колона с такова име, той го приема за текст. PostgreSQL ще каже, че колона „Пловдив“ няма. Пиши текста в единични кавички и заявката ще работи навсякъде.
Пробвай
Скъпите продукти
Покажи името и цената на продуктите, които струват поне 10 €.
Решение
SELECT name, price FROM products WHERE price >= 10;WHERE price >= 10. Шест продукта, от дъската за рязане (11,40 €) до комплекта ножове (39 €). „Поне 10“ значи, че и 10 влиза, затова е >=, а не >.
Идеята
AND, OR, NOT
Условията се свързват:
AND: и двете трябва да са верни.OR: поне едното е вярно.NOT: обръща условието.
Евтини продукти, от които има много (за промоция „вземи три“):
Виж го
Капанът с OR
Маркетингът иска клиентите от София или Пловдив, регистрирани от началото на 2026 г. Ето първия опит. Пусни го и виж датите:
Със скоби условието казва точно това, което искаш:
Щом смесваш AND и OR, слагай скоби, дори когато не са задължителни. Който чете заявката след теб, няма да се чуди.
Пробвай
Чакащите поръчки
Покажи номера, клиента и състоянието на поръчките, които са нови (new) или платени (paid), но още не са изпратени.
Решение
SELECT id, customer_id, status FROM orders WHERE status = 'new' OR status = 'paid';WHERE status = 'new' OR status = 'paid'. 23 поръчки: 11 нови и 12 платени. С AND вместо OR няма да излезе нищо, защото една поръчка има едно състояние.
Упражнение
Две задачи
1. Всички поръчки без отказаните (cancelled). Покажи номера и състоянието. Опитай с NOT.
Поръчките, които не са отказани:
Решение
SELECT id, status FROM orders WHERE NOT status = 'cancelled';WHERE NOT status = 'cancelled', или по-кратко WHERE status <> 'cancelled'. 53 поръчки.
2. Магазинът открива склад на морето. Кои клиенти от Варна или Бургас са с нас още от 2025 г.? Покажи името, града и датата на регистрация.
Клиентите от Варна или Бургас, регистрирани преди 2026 г.:
Решение
SELECT name, city, joined_at FROM customers
WHERE (city = 'Варна' OR city = 'Бургас') AND joined_at < '2026-01-01';WHERE (city = 'Варна' OR city = 'Бургас') AND joined_at < '2026-01-01'. Датите са текст във вида година-месец-ден, затова се сравняват правилно и с <. Без скобите щеше да излезе и Христо от Варна, регистриран през 2026 г.
Тест