§ 14. Условия выбора и сложные логические выражения
Основные темы параграфа:
♦ примеры, сложных логических выражений;
♦ логическое умножение (и);
♦ логическое сложение (или);
♦ отрицание;
♦ приоритеты логических операций;
♦ запрос на выборку и сложные логические выражения.
Примеры сложных логических выражений
Рассмотрим еще одну группу высказываний (табл. 3.5) и их логические значения.
Таблица 3.5. Высказывания и их логические значения
Высказывание | Значение |
БД «Факультативы» | |
1. Русанов занимается геологией. | Истина |
2. Шляпина посещает факультативы. | Истина |
БД «Успеваемость» | |
3. У Аликина по физике то ли 4, то ли 5. | Истина |
4. У Галкиной по алгебре не двойка. | Истина |
БД «Погода» | |
5. 15 марта 2004 года были осадки. | Истина |
6. 17 марта 2004 года влажность была меньше 100% | Ложь |
БД «Домашняя библиотека» | |
7. В библиотеке есть книги Беляева А.Р., изданные не ранее 1990 года. | Истина |
8. В библиотеке есть книги Толстого Л.Н. или Тургенева И.С. | Истина |
Каждое из этих высказываний объединяет в себе значения нескольких
полей одновременно. Поэтому они не могут быть записаны в форме простых
логических выражений.
Вот как записываются соответствующие логические выражения:
1. ФАМИЛИЯ="Русанов" и ГЕОЛОГИЯ
2. ФАМИЛИЯ="Шляпина" и (ЦВЕТОВОДСТВО или ГЕОЛОГИЯ или ТАНЦЫ)
3. УЧЕНИК="Аликин Петр" и (ФИЗИКА=4 или ФИЗИКА=5)
4. не АЛГЕБРА=2 и Ученик="Галкина Нина"
5. ДАТА=15/03/04 и (ОСАДКИ="дождь" или ОСАДКИ="снег").
6. ДАТА=17/03/04 и ВЛАЖНОСТЬ<100
7. АВТОР= "Беляев А.Р." и ГОД>=1990
8. АВТОР= "Толстой Л.Н." или АВТОР=" Тургенев И.С."
Здесь кроме знакомых вам отношений
и имен логических полей используются смысловые связки «и», «или», «не».
Это служебные слова, которые выполняют роль знаков логических операций.
Познакомимся с тремя логическими операциями:
• операция логического умножения (конъюнкция); знак операции «и»;
• операция логического сложения (дизъюнкция); знак операции «или»;
• операция отрицания; знак операции «не».
Выражения, содержащие логические операции, будем называть сложными логическими выражениями.
Операции логического умножения и сложения — двуместные. Это значит, что они связывают между собой две логические величины (два логических операнда).
Логическое умножение (и)
В результате логического умножения (конъюкции) получается истина, если оба операнда истинны.
Пусть требуется получить справку о книгах Беляева А.Р., изданных не раньше 1990 года, с указанием названия книги, года издания и полки, на которой стоит книга. Соответствующая команда имеет вид:
.выбрать НАЗВАНИЕ, ГОД, ПОЛКА где АВТОР= "Беляев А.Р." и ГОД>=1990
Формирование справки происходит в такой последовательности: сначала вырезаются и склеиваются в одну таблицу все строки, удовлетворяющие первому отношению: АВТОР=Беляев А.Р. Получается следующее:
НОМЕР | АВТОР | НАЗВАНИЕ | ГОД | ПОЛКА |
0001 | Беляев А.Р. | Человек-амфибия | 1987 | 5 |
0005 | Беляев А.Р. | Звезда КЭЦ | 1990 | 5 |
0008 | Беляев А.Р. | Избранное | 1994 | 7 |
Затем из этой таблицы вырезаются строки, удовлетворяющие второму отношению: ГОД>=1990. Получаем:
НОМЕР | АВТОР | НАЗВАНИЕ | ГОД | ПОЛКА |
0005 | Беляев А.Р. | Звезда КЭЦ | 1990 | 5 |
0008 | Беляев А.Р. | Избранное | 1994 | 7 |
И наконец, вырезаются столбцы, указанные в списке полей команды. На экран выведется справка:
НАЗВАНИЕ | ГОД | ПОЛКА |
Звезда КЭЦ | 1990 | 5 |
Избранное | 1994 | 7 |
Логическое сложение (или)
В результате логического сложения (дизъюнкции) получается истина, если значение хотя бы одного операнда истинно.
Пусть, например, мы хотим получить список всех книг Толстого Л.Н. и Тургенева И.С. Запрос на выборку пишется так:
.выбрать где АВТОР="Толстой Л.Н." или АВТОР="Тургенев И.С."
В этом случае строки, удовлетворяющие условиям АВТОР="Толстой Л. Н." или АВТОР="Тургенев И. С.", вырезаются одновременно из исходной таблицы. После их склеивания получаем:
НОМЕР | АВТОР | НАЗВАНИЕ | ГОД | ПОЛКА |
0003 | Тургенев И.С. | Повести и рассказы | 1982 | 1 |
0007 | Толстой Л.Н. | Повести и рассказы | 1986 | 1 |
Отрицание
Отрицание изменяет значение логической величины на противоположное: не истина = ложь; не ложь = истина.
Отрицание — одноместная операция. Это значит, что она применяется к одному логическому операнду.
Например, требуется получить список всех книг, кроме книг Беляева. Запрос такой:
.выбрать АВТОР, НАЗВАНИЕ где не АВТОР="Беляев А.Р."
В этом случае вырезаются все строки, в которых значение поля АВТОР не равно «Беляев А.Р.». Строки склеиваются, а из полученной таблицы вырезаются столбцы АВТОР и НАЗВАНИЕ. После их склеивания получим справку:
АВТОР | НАЗВАНИЕ |
Кервуд Д. | Бродяги севера |
Тургенев И.С. | Повести и рассказы |
Олеша Ю.К. | Избранное |
Тынянов Ю.Н. | Кюхля |
Толстой Л.Н. | Повести и рассказы |
Табл. 3.6 иллюстрирует результаты всех вариантов выполнения трех логических операций. Такую таблицу называют таблицей истинности. В ней буквами А и В обозначены логические операнды. Логическая величина «истина» обозначена буквой И, логическая величина «ложь» — буквой Л.
Таблица 3.6.Таблица истинности
А | Б | А и Б | А или Б | не А |
И | И | И | И | Л |
И | Л | Л | И | Л |
Л | И | Л | И | И |
Л | Л | Л | Л | И |
Приоритеты логических операций
Если в сложном логическом выражении имеется несколько логических операций, то возникает вопрос, в каком порядке их выполнит компьютер. Это касается выражений под номерами 2, 3, 4, 5 в приведенном выше примере.
В логическом выражении можно использовать круглые скобки. Так же как и в математических формулах, скобки влияют на последовательность выполнения операций. Если нет скобок, то операции выполняются в порядке их старшинства. Среди логических операций, как и среди арифметических, есть различие по старшинству (еще говорят: по приоритету). По убыванию старшинства логические операции располагаются в таком порядке:
отрицание (не);
конъюнкция (и);
дизъюнкция (или).
Запрос на выборку и сложные логические выражения
Ниже приведены два логических выражения для БД «Домашняя библиотека», отличающиеся только скобками. Цифры над знаками логических операций указывают на последовательность их выполнения.
1 3 2
(ГОД=1987 или ГОД=1986) и (ПОЛКА=5 или ПОЛКА=1)
2 1 3
ГОД=1987 или ГОД=1986 и ПОЛКА=5 или ПОЛКА=1
Первое выражение будет истинным для записей с номерами 1, 4, 7. Второе истинно для записей с номерами 1, 3, 4, 6,7. Постарайтесь понять, почему.
Коротко о главном
Выражение, содержащее логические операции, называется сложным логическим выражением.
Существуют три основные логические операции: отрицание (не); логическое умножение — конъюнкция (и); логическое сложение — дизъюнкция (или).
Отрицание изменяет значение логической величины на противоположное; результат логического умножения — истина только тогда, когда истинны оба операнда; результат логического сложения — истина, если значение хотя бы одного операнда истинно.
Порядок выполнения операций в логическом выражении определяется старшинством операций и расстановкой скобок. В первую очередь выполняются операции в скобках. Логические операции по убыванию старшинства расположены так: не, и, или.
Вопросы и задания
1. Какие логические операция употребляются в сложных логических выражениях? Сформулируйте правила их выполнения.
2. Как определяется порядок выполнения логических операций в сложных выражениях?
3.
Пусть а, b, с — логические величины, которые имеют следующие значения: а
= истина, b = ложь, с = истина. Определите результаты вычисления
следующих логических выражений:
а и b; а и b или с; (а или b) и (с или b);
а или b; а или b и с; не (а или b) и (с или b);
не а или b; не а или b и с; не (а и b и с).
4. Напишите команды выборки с использованием сложных логических выражений:
• определить все даты до 17 марта, когда температура была выше нуля градусов;
• определить фамилии всех учеников, которые посещают танцы, но не посещают факультатив по геологии;
• получить список всех отличников по гуманитарным дисциплинам;
• определить полку, на которой стоит книга Толстого Л.Н. «Повести и рассказы»;
• определить фамилии авторов книг с названием «Повести и рассказы», выпущенных до 1985 года;
• получить инвентарные номера всех книг, стоящих на пятой и седьмой полках;
• получить фамилии авторов и названия книг, выпущенных в период с 1985 по 1990 год;
• получить инвентарные номера всех книг, стоящих ниже пятой полки и изданных после 1990 года.
Тест "Поиск информации в базе данных" (К. Поляков)
Тренировочный тест к главе 3 "Хранение и обработка информации в базах данных"