Упражнение 8 (подсказки и решения) стр. 1 |
|||||
Сначала пара «естественных» решений, которые отличаются лишь предикатом, проверяющим отсутствие у поставщика модели портативного компьютера. Решение 4.4.1. Предикат NOT IN
Решение 4.4.2. Предикат EXISTS (что обычно для этого предиката, подзапрос является коррелирующим)
3. Теперь приведу несколько оригинальных решений. Решение 4.4.3. Использование коррелирующих запросов с группировкой
В подзапросах проверяется, что число моделей ПК поставщика из основного запроса больше нуля, в то время как число моделей портативных компьютеров этого же поставщика равно нулю. Следует обратить внимание на аргумент функции COUNT(1). Стандарт определяет два типа аргументов этой функции: «*» и выражение. Применение «*» приводит к подсчету числа строк, отвечающих запросу. Использование выражения дает число строк, для которых выражение имеет значение, то есть не является NULL. В качестве выражения обычно служит имя столбца, поэтому задействование константы может вызвать удивление у тех, кто еще недостаточно хорошо знаком с языком. Поскольку константа (в рассматриваемом запросе 1) не может быть NULL, то такое выражение вполне эквивалентно COUNT(*).
|