русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Запросы, выражающие квантор общности


Дата добавления: 2015-07-09; просмотров: 643; Нарушение авторских прав


К сожалению в стандартном SQL нет предикатов типа CONTAINS и CONTAINED, которые проверяют вхождение множества во множество. С помощью этих предикатов можно было бы довольно легко выражать запросы, эквивалентные использованию предикатов общности в реляционном исчислении или операции деления в реляционной алгебре.

В связи с этим запросы, требующие квантора общности, выражаются с использованием других возможностей. Смысл этих замен заключается в следующем. Вспомним, что ограниченный квантор общности выражается в исчислении предикатов следующим образом:

"х(Р(х) É Q(x,y)

Взяв двойное отрицание от этого выражения и выразив импликацию через дизъюнкцию, мы получим:

Ø$х(Р(х) & ØQ(x,y))

Таким образом, квантор всеобщности выражается через отрицания и квантор существования.

Рассмотрим пример. Пусть следует дать ответ на следующий запрос: "Выдать преподавателей, читающих все типы лекций". Этот запрос может быть переформулирован следующим образом: "Выдать преподавателей, для которых НЕ СУЩЕСТВУЕТ таких типов лекций, которые они НЕ читают". Первая часть этого переформулированного запроса ("Выдать преподавателей, для которых НЕ СУЩЕСТВУЕТ таких типов лекций, которые...") выражается следующим образом:

SELECT t.Name

FROM TEACHER t

WHERE NOT EXISTS (SELECT l.Type

FROM LECTURE l

WHERE ...

)

Теперь следует выразить записать выражение, которое определяет условие на тип лекции. Для этого сначала выразим следующий вспомогательный запрос: "Выдать такие типы лекций, которые не читает преподаватель Иванов", имеющий, в принципе, тот же вид, что и в исходном запросе за исключением того, здесь указывается конкретный преподаватель. Он имеет следующий вид:

SELECT l.Type

FROM LECTURE l

WHERE NOT EXISTS (SELECT *



FROM TEACHER t2

WHERE t2.#T = l.#T AND t2.Name = "Иванов"

Теперь этот второй запрос можно подставить в первый в следующем виде:

· фраза WHERE второго запроса заменяет фразу WHERE вложенного подзапроса первого запроса.

· во фразе WHERE второго запросе вместо константы конкретного имени преподавателя (Иванов) используется имя преподавателя, определяемое переменной первого запроса (t.name). В результате получим:

SELECT t.Name

FROM TEACHER t

WHERE NOT EXISTS (SELECT l.Type

FROM LECTURE l

WHERE NOT EXISTS (SELECT *



FROM TEACHER t2

WHERE t2.#T = l.#T AND t2.Name = t.name

)

)



<== предыдущая лекция | следующая лекция ==>
Использование теоретико-множественных операторов | Вставка строк в таблицу. Предложение INSERT


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.103 сек.