Упражнение 17

Найдите ноутбуки, скорость которых меньше скорости любого ПК. Вывести: type, model, speed

Ошибки, которые здесь допускаются, связаны с излишним использованием операций соединения. Самым вопиющим примером, по мнению автора, является следующий:

SELECT DISTINCT p.type, l.model, l.speed
FROM Product p, Laptop l, PC c
WHERE l.speed < (SELECT MIN (speed)
                 FROM PC
                 )
      AND p.type = 'laptop';
mssql
🚫
[[ error ]]
[[ column ]]
[[ value ]]

В предложении FROM используется декартово произведение трех таблиц! Если присутствие таблицы Product еще можно как-то оправдать — ведь в задаче требуется указать еще и тип продукции, то таблицу PC можно смело исключить — это не повлияет на результат. Естественно, решение не будет оптимальным по скорости выполнения. Кроме того, могут возникнуть проблемы с памятью, так как мощность промежуточного результата может стать огромной даже для относительно небольших таблиц. Напомним, что мощность декартового произведения равна произведению мощностей операндов. Например, для таблиц с количеством строк 100, 500 и 1000 их декартово произведение будет содержать 50000000 строк!

И, тем не менее, решение является правильным, так как предложение DISTINCT исключает все дубликаты, появившиеся в результате декартового произведения.

ПиР

Решить упражнение на SQL-EX.RU