Визуальное конструирование запросов

Для удобного конструирования запросов можно использовать визуальный кон­структор, вызываемый командой New/QBE Queryменю программы Database Desktop. При этом открывается окно Select File,где указывается имя главного файла таблицы, на основании данных которой строится запрос. После выбора файла и нажатия кнопки Openоткрывается окно визуального конструктора (рис. 13).

Рис. 13. Окно визуального конструктора запросов SQL

 

В этом окне показываются имена таблицы и всех ее полей. Под именем каждого поля находится флажок и текстовое поле (слева от флажка для имени таблицы и справа — для имени поля).

С помощью визуального конструктора можно:

§ создавать и изменять запрос по образцу;

§ выполнять запрос по образцу;

§ сохранять запрос по образцу как SQL-запрос.

 

Большая часть работы с запросом по образцу проходит в окне визуального кон­структора, где для каждого поля таблицы задаются условия отбора и сортиров­ки. Для этого щелчком правой кнопки мыши в поле имени таблицы (слева от флажка) вызывается контекстное меню, в котором выбирается вид запроса:

□ пустая строка — отбор и редактирование записей таблицы;

□ insert — вставка записей в таблицу;

□ delete — удаление записей из таблицы;

□ set — сравнение записей в таблицах.

 

Для выполнения запроса нужно выполнить команду Query/Ran Queryменю программы Database Desktop или нажать кнопку панели инструментов. Пе­ред выполнением запроса происходит проверка его правильности.

Для получения текста запроса, соответствующего визуальному запросу, нужно выполнить команду Query/Show SQLили нажать на панели инструментов кнопку с буквами SQL.Приотсутствии ошибок в конструкции запроса автома­тически открывается окно SQL Editor(рис. 11),в котором содержится текст запроса на языке SQL. При наличии ошибок окно Редактора SQL-запроса не появляется, а выдается сообщение об ошибке.

Запрос можно сохранять (Save)на диске под своим именем или под другим (Save as).Можно также открыть ранее сохраненный запрос (Open).Файл запро­са имеет расширение QBE. (В скобках указаны команды пункта Fileпрограммы Database Desktop.)

 

Отбор записей из таблицы

При отборе записей из таблицы щелчком правой кнопки мыши на флажках по­лей вызывается контекстное меню (рис. 3), в котором выбирается метка для флажка:

§ пусто — поле не включается в результат запроса;

§ галочка со знаком + — поле включается в результат запроса;

§ галочка — поле включается в результат запроса с сортировкой записей по возрастанию значений этого поля;

§ галочка с черной стрелкой — поле включается в результат запроса с сортировкой записей по убыванию значений этого поля;

§ галочка с буквой g — поле включается в результат запроса и используется для группирования записей.

 

Кроме того, справа от флажка для каждого поля таблицы можно вручную ввести условие отбора записей. Поле, для которого допускается ввод условия запроса, обозначается текстовым курсором. Этот курсор отображается черным прямо­угольником и переключается мышью или клавишами управления курсором. При вводе (редактировании) условия отбора черный прямоугольник сменяется ми­гающей вертикальной линией.

При выполнении запроса, показанного на рис. 14, из таблицы Personnel от­бираются записи, для которых значение оклада (поле Р_Salary) больше или равно 3500. Кроме поля оклада, в результат запроса включаются поля имени (P_Name) и должности (P_Position).

Рис. 14. Отбор записей по величине оклада

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

При выполнении запроса, показанного на рис. 15, в набор данных, как и в предыдущем примере, отбираются записи, для которых значение поля P_Saiary больше или равно 3500. Но в результат запроса включается только поле Name.

Рис. 15.Отбор записей по полю, не входящему в результат запроса

 

Условие отбора может быть более сложным, чем просто сравнение, и содержать операции логического умножения (and) и сложения (or).

 

Для объединения отдельных условий с помощью операции логического умно­жения нужно перечислить эти условия в одной строке через запятую. Например, при выполнении запроса, показанного на рис.16, будут отобраны записи, для которых значение поля P_Salary находится в интервале 3500 .. 5000.

Рис. 16.Использование вусловии отбора операции логического умножения

 

Рис. 17. Использование в условии отбора операции логического сложения

 

Для соединения отдельных условий операцией логического сложения нужно перечислить эти условия в разных строках. Так, при выполнении запроса, пока­занного на рис.17, в набор попадут записи, для которых поле P_Position содержит значения Водитель или Секретарь. В результат запроса не включаются поля кода и примечания.

Добавление к запросу новой строки выполняется переводом текстового курсора вниз при нахождении его на последней строке (с помощью клавиш управления курсором). При этом курсор может находиться в любом поле запроса.

Замечание

Отметки для каждого поля во всех строках запроса должны быть одинаковыми. Например, если в приведенном на рис.17 запросе во второй строке убрать отметку для поля р Birthday, то при попытке выполнить запрос будет выдано сообщение об ошибке.

Удаление строки запроса выполняется одновременным нажатием клавиш <Ctrl> и <Delete>. Предварительно текстовый курсор должен быть установлен в любом поле удаляемой строки.

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

Например, при выполнении запроса, показанного на рис.18, будут отобраны записи, для которых значение поля P_Position равно водитель, а значение поля p_salary больше или равно 3000. В результат запроса попадают поля р Name, P_Position и P_Salary.

Рис. 18. Отбор записей по нескольким полям

 

Редактирование записей

При редактировании записей необходимо определить:

□ условия отбора записей;

□ новые значения изменяемых полей.

Условия отбора записей формируются, как рассмотрено в предыдущем разделе. Для изменяемых полей следует задать новые значения, перед которыми указы­вается ключевое слово changeto.

Замечание

При вставке и удалении записей флажки всех полей должны быть пустыми.


При выполнении запроса, показанного на рис.19, для всех записей, имею­щих значение секретарь поля P_Post, значение поля P_Salary будет установле­но в 4700.

Рис. 19. Редактирование записей

 

Аналогичным образом в одном запросе можно отобрать записи на основании более сложного условия, а также одновременно изменить значения нескольких полей.

Вставка и удаление записей

При вставке и удалении записей справа от флажков для полей таблицы указы­ваются значения соответствующих полей. При вставке записей нужно с по­мощью контекстного меню в поле имени таблицы выбрать в качестве типа за­проса INSERT.

При выполнении запроса, показанного на рис.20, в таблицу Personnel3 до­бавляется новая запись, имеющая следующие значения полей: P_Name — Семено­ва Е.Н., P_Position — Менеджер, P_Birthday — 12.03.67, P_Salary — 4000.

Рис. 20.Вставка записи

Замечание

При вставке и удалении записей флажки всех полей должны быть пустыми.

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

В результате отработки одного запроса в таблицу можно добавить сразу не­сколько записей. При этом значения полей каждой новой записи вводятся от­дельной строкой запроса. Например, при выполнении запроса, показанного на рис.21, в таблицу Personnel3 добавляется две записи: первая имеет значе­ния полей: P_Name — Семенова Е.Н., P_Position— Менеджер, P_Salary— 4000, P_Birthday — 12.03.67, а вторая:P_Name — Петров В.Э., P_Position — Менеджер, p_Salary — 4500. Поля P_Code обеих записей являются автоинкрементными и заполняются автоматически. Поле P_Birthday второй записи и поля P_Note обеих записей остаются пустыми.

Рис. 21. Одновременная вставка двух записей

 

Замечание

При вставке нескольких записей вид запроса insert в поле имени таблицы нужно указывать для каждой записи.

 

При удалении записей с помощью контекстного меню в поле имени таблицы следует выбрать вид запроса delete. Справа от флажков полей указываются зна­чения полей удаляемых записей.

Например, запрос, показанный па рис.22, удаляет запись, имеющую значе­ния полей: P_Name — Семенова Е.Н., P_Position — Менеджер, P_Salary — 4000, P_BirthDay — 12. 03.67.

Рис. 22. Удаление записи

 

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

§ в таблице нет записи с указанными значениями полей — удаления записи не происходит;

§ в таблице есть несколько записей с указанными значениями полей — удаля­ются все такие записи.

 

Если значения поля не заданы, то это поле не влияет на отбор записей для уда­ления. В запросе, показанном на рис.23, такими полями являются, напри­мер, P_Name и P_Birthday. В результате его выполнения из таблицы Personnel3 удаляются все записи, соответствующие менеджерам с окладом 4000 рублей.

Можно задать более сложные критерии отбора записей для удаления, например, определив вторую строку условия (рис.24). При выполнении этого запроса из таблицы Personnel3 удалятся все менеджеры и водители с окладом 4000 рублей.

Рис. 23. Удаление записи

Рис. 24. Удаление записей

 

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

Связывание таблиц

Можно построить запрос по образцу не только для одиночных таблиц, как это рассмотрено выше, но и для связанных таблиц. Для этого требуется:

□ добавить к запросу новую таблицу;

□ связать между собой две таблицы.

 

Добавление таблицы выполняется нажатием кнопки Add Tableпанели инстру­ментов (на кнопке изображена таблица и знак +) и выбором в открывшемся ок­не Select Fileглавного файла таблицы.

Для связывания таблицы нужно нажать кнопку Join Tablesпанели инструментов (на кнопке изображены две таблицы), при этом кнопка останется в нажатом состоянии, а к указателю мыши добавляется изображение двух таблиц. Затем щелчком на полях связи обеих таблиц между ними устанавливается соединение, получающее имя joinl. Имя соединения отображается в полях связи. Таким же образом можно связать между собой три и более таблиц.

Для связанных таблиц операции отбора, редактирования, вставки и удаления записей выполняются так же, как и для одиночных таблиц. Рассмотрим в каче­стве примера технику отбора записей. Запрос, показанный на рис.25, выво­дит из подчиненной таблицы Cards записи с движением товара, который указан в главной таблице store склада. Отбор записей осуществляется по полю S_Name названия товара, в результирующий набор данных включаются поля C_Move ко­личества поступившего или убывшего товара и C_Date даты выполнения опера­ции. При выполнении запроса будут выведены записи, соответствующие покуп­ке и продаже моркови.

Рис. 25. Связывание таблиц

 

Если требуется, например, вывести записи за определенный период, то для поля CDate дополнительно указываются нижнее и верхнее значения даты.

Для удаления таблицы из запроса нужно нажать кнопку Remove Tablesпанели инструментов (с изображением таблицы и знака -), в открывшемся одноимен­ном окне выбрать имя таблицы и нажать кнопку ОК (рис.26).

Рис. 26. Удаление таблицы из запроса

 

Замечание

После удаления одной из таблиц в поле связи другой таблицы остается название связи.

 

Для удаления связи нужно поочередно установить курсор в поля связи обеих таблиц, где отображается имя связи, например, joinl, и нажать клавишу <Delete>.