Визуальное конструирование запросов
Для удобного конструирования запросов можно использовать визуальный конструктор, вызываемый командой 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>.