- Записывать простые условия со знаками сравнения и находить записи, которые им удовлетворяют
- Пошагово вычислять сложный запрос с AND, OR, NOT и скобками через множества
- Применять маски
*и?к текстовым полям - Определять новое место записи после запроса и сортировки
В интернет-магазине ты выбираешь фильтры «цена меньше 50 манатов» и «рейтинг выше 4» — и из тысяч товаров остаётся несколько. Это запрос: СУБД проверяет каждую запись по условию и показывает только подходящие.
В каждом варианте вступительного экзамена есть одно задание на запрос: найти, сколько записей ему удовлетворяет, какие номера записей отобраны или как сдвинется запись после сортировки. Устройство таблиц объяснено в уроке «Базы данных: модели, СУБД и связанные таблицы».
Запрос и простое условие
Объект СУБД: команда, которая отбирает (ищет) записи, удовлетворяющие условию, при необходимости сортирует их и показывает результат в виде новой таблицы. Запрос не меняет данные, а только отбирает.
Записывается в виде «поле — знак сравнения — значение»: Математика > 18, Статус = «задерживается». Текстовые значения пишутся в кавычках и сравниваются посимвольно.
| Знак | Значение | Пример |
|---|---|---|
| = | равно | Класс = 10 |
| <> | не равно | Платформа <> 2 |
| < | меньше | Возраст < 16 |
| > | больше | Балл > 90 |
| <= | меньше или равно | Цена <= 50 |
| >= | больше или равно | История >= 70 |
| № | Имя | Математика | Физика | Информатика |
|---|---|---|---|---|
| 1 | Айсель | 18 | 12 | 25 |
| 2 | Мурад | 25 | 21 | 14 |
| 3 | Лейла | 12 | 19 | 22 |
| 4 | Эльвин | 20 | 25 | 17 |
| 5 | Нигяр | 9 | 16 | 20 |
| 6 | Рашад | 23 | 11 | 24 |
| 7 | Гюнай | 15 | 22 | 19 |
Какие номера записей таблицы «Олимпиада» удовлетворяют условию?
1) Математика > 18 2) Физика <= 16 3) Информатика <> 22 4) Математика >= 18
Показать решениеСкрыть решение
1) 25, 20, 23 → {2, 4, 6}. 18 > 18 — ложно, поэтому 1 не входит.
2) 12, 16, 11 → {1, 5, 6}. 16 <= 16 — истинно.
3) Все, кроме 22 → {1, 2, 4, 5, 6, 7}.
4) Граница входит: 18, 25, 20, 23 → {1, 2, 4, 6}.
Сложные условия: AND, OR, NOT
Простые условия соединяются логическими операциями — И, ИЛИ, НЕ из урока «Логические операции и логические элементы». В заданиях DİM они пишутся по-английски: AND, OR, NOT. Если найти множество записей для каждого простого условия, сложное условие превращается в операции над множествами. M(A) — множество номеров записей, удовлетворяющих условию A.
- M(A)номера записей, удовлетворяющих условию A
- ∩пересечение: входят в оба множества
AND — должны выполняться оба условия: остаются общие номера.
- ∪объединение: входят хотя бы в одно множество
OR — должно выполняться хотя бы одно условие: номера объединяются без повторов.
- Uвсе записи таблицы
- \разность: из U убираем M(A)
NOT — остаются записи, не удовлетворяющие условию.
Примеры по таблице «Олимпиада»: (Математика > 18) AND (Информатика >= 20) → {2, 4, 6} ∩ {1, 3, 5, 6} = {6}; (Математика > 18) OR (Физика > 20) → {2, 4, 6} ∪ {2, 4, 7} = {2, 4, 6, 7}; NOT (Физика > 15) → {1, 6}. Порядок действий: сначала скобки (изнутри наружу), затем NOT, затем AND и последним OR. В запросах DİM скобки обычно расставлены: начинай с самых внутренних, а где скобок нет, соблюдай порядок NOT → AND → OR. Та же логика работает при поиске в интернете — см. «Поиск в интернете: поисковые системы и запросы».
- 1Выдели простые условия
Для каждого простого условия запроса выпиши множество записей.
- 2Примени NOT
Для условия под NOT возьми оставшиеся записи — или замени знак на противоположный.
- 3Раскрывай скобки изнутри
AND → пересечение, OR → объединение; записывай каждый промежуточный результат.
- 4Возьми ответ
Итоговое множество — номера отобранных записей, число его элементов — количество записей.
Какие номера записей отберёт запрос
(((Математика < 20) AND NOT (Физика > 18)) OR ((Информатика > 21) AND (Физика > 15)))
в таблице «Олимпиада»?
A) 1, 5 B) 1, 3, 5 C) 3, 5, 6 D) 1, 3, 5, 6 E) 3
Показать решениеСкрыть решение
2) Информатика > 21 → {1, 3, 6}; Физика > 15 → {2, 3, 4, 5, 7}. AND → {3}.
3) OR: {1, 5} ∪ {3} = {1, 3, 5}.
Верный ответ: B) 1, 3, 5.
- A, Bлюбые условия
Законы де Моргана: при внесении NOT в скобки AND и OR меняются местами.
Сколько записей таблицы «Олимпиада» удовлетворяют запросу NOT (NOT (Математика > 15) AND (Информатика < 20)) OR NOT (Физика > 20)?
Показать решениеСкрыть решение
Способ 2 (де Морган): NOT (NOT A AND B) = A OR NOT B, то есть (Математика > 15) OR (Информатика >= 20) → {1, 2, 4, 6} ∪ {1, 3, 5, 6} = {1, 2, 3, 4, 5, 6} — результат тот же.
Ответ: 6 записей.
- 1.NOT (Балл > 45) ⇔ Балл 45
- 2.NOT (Возраст >= 16) ⇔ Возраст 16
- 3.NOT (Город = «Баку») ⇔ Город «Баку»
- 4.NOT (Цена <= 20) ⇔ Цена 20
Маски: * и ?
В текстовом поле иногда ищут не точное значение, а маску — образец. В маске два особых знака: * — любое количество любых символов (в том числе ноль), ? — ровно один любой символ. В записи DİM маска пишется в кавычках после знака равенства: Направление = «*n».
| Маска | Значение | Подходит | Не подходит |
|---|---|---|---|
*n | оканчивается на n | Riverton, Mapleton | Sandford, Oakdale |
M* | начинается с M | Milltown, Mapleton | Riverton |
*ll* | содержит ll | Milltown, Hillside | Lakeside |
?a* | второй символ — a | Oakdale, Lakeside | Milltown |
1?? | 3 символа, первый — 1 | 101, 150 | 1150, 205 |
| № | Рейс | Направление | Платформа | Статус |
|---|---|---|---|---|
| 1 | 101 | Riverton | 2 | по расписанию |
| 2 | 205 | Oakdale | 1 | задерживается |
| 3 | 310 | Milltown | 3 | по расписанию |
| 4 | 118 | Mapleton | 2 | задерживается |
| 5 | 222 | Lakeside | 1 | по расписанию |
| 6 | 407 | Sandford | 3 | задерживается |
| 7 | 150 | Hillside | 2 | по расписанию |
| 8 | 333 | Brighton | 1 | по расписанию |
Сколько записей таблицы «Автовокзал» отберёт запрос ((Статус = «задерживается» OR Платформа = 1) AND Направление = «*n*»)? Как изменится ответ, если маска будет «*n»?
Показать решениеСкрыть решение
2) «
*n*» — в названии есть n: Riverton, Milltown, Mapleton, Sandford, Brighton → {1, 3, 4, 6, 8}.3) AND → {4, 6, 8} — 3 записи.
4) «
*n» — только оканчивающиеся на n: {1, 3, 4, 8} (Sandford выпадает). Тогда {2, 4, 5, 6, 8} ∩ {1, 3, 4, 8} = {4, 8} — 2 записи.Сортировка
Расположение записей в определённом порядке по значениям одного или нескольких полей. По возрастанию: числа от меньшего к большему, текст по алфавиту (А → Я), даты от ранних к поздним. По убыванию — наоборот. Сортировка не меняет записи и их число, только порядок.
При сортировке по двум полям записи сначала упорядочиваются по первому полю; записи с одинаковым значением первого поля упорядочиваются по второму. Например, Баку, Гянджа, Ленкорань, Шеки — города по возрастанию. Самое трудное задание DİM на запросы сочетает отбор и сортировку:
- 1Примени запрос
Выпиши отобранные записи в новую таблицу в исходном порядке.
- 2Отметь старое место
Запиши, в какой строке новой таблицы стоит нужная запись: k.
- 3Отсортируй
Упорядочь итоговую таблицу по заданному полю по возрастанию или убыванию.
- 4Сравни с новым местом
Пусть новое место m: k − m > 0 — «на k − m строк вверх», k − m < 0 — вниз, k = m — не изменится.
| № | Имя | Математика | Физика | Химия |
|---|---|---|---|---|
| 1 | Камран | 72 | 81 | 64 |
| 2 | Сабина | 88 | 69 | 90 |
| 3 | Орхан | 65 | 77 | 71 |
| 4 | Фидан | 90 | 85 | 58 |
| 5 | Турал | 70 | 62 | 83 |
| 6 | Гюнай | 59 | 74 | 76 |
После применения запроса ((Математика >= 70 OR Химия > 75) AND Физика > 65) к таблице «Пробный экзамен» результат сортируют по полю Химия по возрастанию. Как изменится место записи о Фидан?
A) на 2 строки вниз B) на 1 строку вверх C) не изменится D) на 2 строки вверх E) на 1 строку вниз
Показать решениеСкрыть решение
2) Итоговая таблица: Камран, Сабина, Фидан, Гюнай — Фидан в 3-й строке (k = 3).
3) По возрастанию химии: Фидан 58, Камран 64, Гюнай 76, Сабина 90 — Фидан в 1-й строке (m = 1).
4) k − m = 2 > 0.
Верный ответ: D) на 2 строки вверх.
Записи (имя — класс — балл): Айсель — 9 — 85, Мурад — 10 — 90, Лейла — 9 — 92, Эльвин — 11 — 78, Нигяр — 10 — 88, Рашад — 9 — 70. Таблицу сортируют сначала по полю Класс по возрастанию, затем по полю Балл по убыванию. На каком месте окажется Нигяр?
Показать решениеСкрыть решение
2) 10-й класс: Мурад 90, Нигяр 88 → места 4–5.
3) 11-й класс: Эльвин 78 → место 6.
Ответ: Нигяр на 5-м месте.
rows = [('Kamran', 72, 81, 64), ('Sabina', 88, 69, 90), ('Orkhan', 65, 77, 71),
('Fidan', 90, 85, 58), ('Tural', 70, 62, 83), ('Gunay', 59, 74, 76)]
# query: ((Math >= 70 OR Chemistry > 75) AND Physics > 65)
result = [r for r in rows if (r[1] >= 70 or r[3] > 75) and r[2] > 65]
print('After the query:', [r[0] for r in result])
# sort by Chemistry, ascending (reverse=True would give descending)
sorted_rows = sorted(result, key=lambda r: r[3])
print('After sorting: ', [r[0] for r in sorted_rows])
k = [r[0] for r in result].index('Fidan') + 1
m = [r[0] for r in sorted_rows].index('Fidan') + 1
print('Fidan:', k, '->', m, '| rows up:', k - m)▸ Ожидаемый результат
After the query: ['Kamran', 'Sabina', 'Fidan', 'Gunay'] After sorting: ['Fidan', 'Kamran', 'Gunay', 'Sabina'] Fidan: 3 -> 1 | rows up: 2
| Запись DİM | SQL |
|---|---|
(A > 5) AND NOT (B = 2) | WHERE a > 5 AND NOT b = 2 |
Platforma <> 2 | platform <> 2 |
İstiqamət = «*n» | destination LIKE '%n' |
Kod = «1??» | code LIKE '1__' |
| Химия по возрастанию / убыванию | ORDER BY chemistry ASC / DESC |
* пишут %, вместо ? — _. Подробнее — в уроках курса SQL «WHERE: фильтрация строк», «LIKE, IN, BETWEEN и IS NULL», «ORDER BY и LIMIT: сортировка и ограничение».Главное
- Простое условие: поле — знак — значение; > и < не включают границу, >= и <= включают, <> — «не равно».
- AND → пересечение, OR → объединение, NOT → оставшиеся записи; порядок: скобки, NOT, AND, OR.
- Заменяй NOT противоположным знаком (NOT (x > a) ⇔ x <= a) и применяй законы де Моргана.
- Маска:
*— любое число символов (и ноль),?— ровно один; «*n» — оканчивается на n, «*n*» — содержит n. - Отбор + сортировка: место записи считают в итоговой таблице запроса и сравнивают с местом после сортировки.
Проверь себя
Вопросов: 12. Каждый правильный ответ приносит XP.