От фильтра к запросу. Типы запросов, страница 3

Это получилось потому, что все критерии отбора, указанные в одной строке, объединяются оператором AND и в результате Вы получаете только те записи, которые удовлетворяют всем условиям, точнее - одновременно удо­влетворяют условиям во всех полях строки. В нашем случае запись должна содержать одну из трех комнат: 101, 201 или 301 и в то же время эти номера должны принадлежать к первой категории. В итоге мы и получили пустую таблицу, т.к. ни одной записи одновременно отвечающей этим двум условиям, у нас нет.

Но совершенно другой результат мы получим, если "П" перенесем строкой ниже (в строку "или"):


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

У нас в таблице объединились записи, представ­ляющие и номера люкс и номера первой категории. Это произошло потому, что каждая строка в критериях отбора анализируется отдельно и строки объединяются операто­ром OR. В нашем случае в таблицу попадают записи, в которых есть номера комнат 101, 201, 301 илите номера, которые относятся к первой категории ("П").

Закрыв запрос и вновь открыв его в режиме кон­структора, мы увидим, что буква "П" не переходит из строки "или" в строку "Условие отбора".

Чтобы еще лучше понять механизм отбора записей, объединим "П" и "Л" оператором OR:

Поле

Номер комнаты

Код категории

Условие отбора

101 Or 201 Or 301

Л Ог П

Или

Выполнив запрос, мы увидим в таблице только комнаты категории люкс. Мы уверены, что следующее ло­гическое выражение, объясняющее результат, не вызовет у Вас ни малейшего недоумения:

(101 OR 201 OR 301) ANDOR П)

Действительно, в правой скобке у нас множество комнат, принадлежащих категориям люкс и первой, а в левой - множество комнат люкс. Объединив эти множества оператором AND, мы, конечно же получаем только множе­ство люкс.


И, наконец, чтобы окончательно расставить все по местам и проверить себя, прибавьте к номерам комнат 102:


 

Теперь добавим в запрос таблицу "Гости", чтобы посмотреть, кто же живет в номерах люкс. При этом убе­рем условие отбора из поля "Номера комнат", а оставим только "Л" в столбце "Код категории", одновременно за­претив вывод этого поля на экран (убрав крестик в соот­ветствующей строке).

В третий столбец запроса занесем поле "Фамилия" из таблицы "Гости" и выполним запрос. Мы увидим, что записей не три, а две. Запись, соответствующая 101-й ком­нате, пропала. Сейчас пропажа записи для нас уже не тайна: т.к. в 101-й комнате никто не живет, то поля "Фамилия", соответствующего этой комнате, нет, т.е. значение этого поля для записи со 101-й комнатой ложно. А значит и вся запись ложна (т.к. как мы знаем, что крите­рии отбора в строке соединяются оператором AND), по­этому и не выводится на экран.

Чтобы запись со 101-й комнатой вновь появилась, поселите в эту комнату своего лучшего друга. При этом у нас к Вам просьба не заносить друга в таблицу "Гости" (конечно же, это не требование администрации гостиницы, не позво­ляющей вдвоем проживать в одноместном номере, а наше пожелание не вносить лишней путаницы в базу данных на этапе ее изучения).

Выполнив запрос, мы увидим три записи - друг по­ка в своем номере.

Мы можем увидеть запись со 101-й комнатой в нашем за­просе и не поселяя в этот номер своего друга.

Обратим внимание на связь между таблицами. Таб­лицы связывают линии, не имеющие на своих концах ни­каких значков, кроме маленьких точек. Это означает, что объединяются только те записи, в которых связанные поля обеих таблиц совпадают. Вы можете убедиться в этом, щелкнув правой кнопкой мыши на линии связи и в по­явившемся контекстно-зависимом меню выполнить коман­ду "Параметры объединения". В открывшемся окне Вы увидите, что установленная по умолчанию первая опция и задает такие параметры объединения полей двух таблиц.

Теперь вполне понятно, что мы не видели в запросе третьей записи - поля с такими данными (101) в таблице "Гости" не было. А теперь в окне "Параметры объедине­ния" зададим опцию, когда объединяются все записи из таблицы 'Этажи" и только те записи из таблицы "Гости", в которых связанные поля совпадают. У линии связи появ­ляется стрелка, направленная в сторону таблицы "Гости".

Выполнив запрос "Люкс", Вы увидите, что даже не поселяя друга, все три номера люкс будут выведены. Но если друг не живет в номере, то поле в столбце "Фамилия" будет конечно пусто. После этого вновь поселите друга в его номер.

Не огорчайтесь, если Вам что-то пока неясно в ме­ханизме связи в Access - мы еще не раз вернемся к нему. А сейчас нам пора расставаться с запросом "Люкс". Но не удаляйте его, он нам еще пригодится.