Характерные ошибки при решении задач на написание запросов на выборку (SELECT)База данных «Компьютерная фирма»Упражнение 71 |
|||||||
Найти тех производителей ПК, все модели ПК которых имеются в таблице PC Вот типичный неверный запрос
Ключевым моментом формулировки является слово "ВСЕ". Давайте посмотрим на модели производителя E. Модели ПК, которые выпускает производитель E, дает следующий запрос: Результат:
А теперь проверим, какие из этих моделей имеются в таблице PC: Оказывается, что из трех моделей только одна - 1260 - имеется в таблице PC. По условию же задачи там должны находиться ВСЕ три модели производителя E. Собственно, решение этой задачи сводится к операции реляционного деления, только для каждого производителя у нас свой делитель (его модели). В упрощенном виде операцию реляционного деления можно записать так:
Операция реляционного деления не является примитивной. Это означает, что эту операцию можно выразить через другие (примитивные) реляционные операции. Избыточность реляционной алгебры, предложенной Коддом, обусловлена ориентаций на практическое применение. Язык Язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL тоже избыточен, в чем нас убеждает каждая задача, которую можно решить разными способами. Несмотря на это, аналога операции реляционного деления в нем нет. :-) В заключение приведу представление реляционного деления, выраженного через другие операции.
Здесь A[a] означает проекцию отношения A на атрибут a; TIMES - декартово произведение. "Подстрочный" перевод на язык SQL может выглядеть следующим образом:
Не следует использовать этот подстрочник как руководство к действию; есть более простые способы решить задачу. Впрочем, я не настаиваю. :-) |