Към съдържанието
wannacode

Списъци, граници и шаблони

Проблем

Три града, три OR-а

Куриерската фирма за Североизтока и морето обслужва Варна, Бургас и Русе. Трябват ти клиентите от тези градове:

SQLбаза: магазин

Работи, но при десет града условието става ред от OR-ове, в който лесно се пропуска нещо.

Идеята

IN: един от списъка

IN проверява дали стойността е в списък:

SQLбаза: магазин

Същият резултат, а списъкът се чете наведнъж. NOT IN е обратното: всичко освен изброеното.

Идеята

BETWEEN: между две граници

BETWEEN a AND b значи „от a до b“, заедно с a и b:

SQLбаза: магазин

Датите в базата са текст във вида 2026-03-31. Такъв текст се подрежда като датите, затова BETWEEN работи и за тях. Поръчките от първото тримесечие на 2026 г.:

SQLбаза: магазин
По-точно, за любопитните

Ако датата има и час (2026-03-31 18:20), BETWEEN '2026-01-01' AND '2026-03-31' ще изпусне 31 март след полунощ, защото '2026-03-31 18:20' е след '2026-03-31'. Тогава по-сигурно е ordered_at >= '2026-01-01' AND ordered_at < '2026-04-01'.

Пробвай

Неприключените поръчки

Покажи номера, датата и състоянието на поръчките, които не са нито доставени (delivered), нито отказани (cancelled).

SQLбаза: магазин

Идеята

LIKE: по част от текста

LIKE сравнява с шаблон. В шаблона % значи „какъвто и да е текст, и празен“, а _ значи „точно един знак“.

SQLбаза: магазин

'%хляб%' намира всяко име, в което някъде пише „хляб“. 'хляб%' би търсил имена, които започват с „хляб“, а '%хляб' такива, които свършват с него.

Виж го

Главни и малки букви

Кои продукти започват с „б“? Пусни:

SQLбаза: магазин

Нищо. А „Бял хляб“, „Баница“ и „Банани“ са там. SQLite не различава главни и малки букви при LIKE, но само при латиницата. За него „Б“ и „б“ са два различни знака. Смени шаблона на 'Б%' и пусни пак.

По-точно, за любопитните

Различните бази правят различно. В PostgreSQL LIKE винаги различава главни и малки, а ILIKE не ги различава, и то за всяка азбука. В MySQL зависи от настройката за сравняване на текста (collation) и обикновено не ги различава. Ако търсенето трябва да работи за всяка азбука, в SQLite се ползва разширение (ICU) или се пази отделна колона с текста в малки букви.

Пробвай

Млечните

Покажи името и цената на продуктите, в чието име има „мляко“.

SQLбаза: магазин

Упражнение

Две задачи

1. Поръчките от лятото на 2026 г. (юни, юли, август): номер, клиент и дата.

Поръчките между 1 юни и 31 август 2026 г.:

SQLбаза: магазин

2. Клиентите, чието име започва с „М“: име и град.

Клиентите с име, започващо с „М“:

SQLбаза: магазин

Тест

Провери се

1. Кои цени влизат в price BETWEEN 2 AND 3?
2. Какво намира name LIKE '%кафе%'?
3. Защо в SQLite LIKE 'кафе%' не намира „Кафе на зърна“?
4. Как се пише „датата е през октомври 2026 г.“ за ordered_at?

Създаден от Иво Гергов като част от кампанията на Evo Tech за достъпно обучение по програмиране ·