Проектирование информационных систем
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
таблицы открывается окно с областью SQL-кода, содержащее шаблон запроса. Этот запрос может быть дописан вручную или сформирован с помощью Конструктора запросов. Элементами конструктора являются окна: Область схемы, Область условий, Область результата, Добавления таблицы, которые вызываются соответствующими кнопками . Для выполнения запроса используется кнопка .
На рис. 21 показан пример созданного таким образом запроса к таблицам Customer и Executed_Contract.
Рис. 21.
Для создания запроса в отдельной вкладке используется кнопка Создать запрос панели инструментов Стандарт или пункт Создать запрос контекстного меню, вызываемого для выбранной БД. Далее запрос пишется вручную или создается в Конструкторе запросов (меню Запрос/Создать запрос в редакторе, см. пример на рис.21).
После формирования запроса и нажатия на кнопку Ok текст запроса переносится на вкладку. После чего он может быть выполнен, а также сохранен в отдельном файле с расширением sql. Пример показан на рис.22.
Рис. 22.
Для того чтобы ранее сохраненный запрос мог быть выполнен, надо открыть файл с запросом. При открытии файла (меню Файл/Открыть/Файл) устанавливается соединение с сервером. Для выполнения запроса необходимо указать полные имена используемых в запросе таблиц (Имя_БД.dbo.Имя_таблицы). Например, furniture.dbo.Customer.
Другой вариант указания для какой именно базы данных предназначены SQL-команды - использование команды use , которая пишется до других SQL-команд. (В этом случае префикс dbo не указывается.)
Запрос с группровкой и агрегатными функциями
Для включения в запрос секции GROUP BY в конструкторе запросов в контекстном меню Области схемы выбирается пункт Добавить группу по. При этом в Области условий добавляется столбец Группировка. Выбор агрегатной функции для требуемого поля происходит из выпадающего списка (см. рис. 23).
Рис. 23.
Сформированный запрос и результат его выполнения показан на рис.24.
Рис. 24.
Результат выполнения запроса может быть сохранен в отдельный текстовый файл двумя способами:
.Вызвать контекстное меню Области запроса и выбрать команду Отправить результат в > в файл (см. рис. 25);
.Вызвать контекстное меню Области результата и выбрать команду Сохранить результаты как….
Рис. 25.
Запросы на изменение данных
Существуют три вида запросов, изменяющих содержимое таблиц базы данных:
запрос на добавление (insert);
запрос на обновление (update);
запрос на удаление (delete).
В качестве примера создадим запрос на добавление в таблицу Executed_Contract записей о выполненных контрактах. Выполненными считаются контракты из таблицы Current_Contract, у которых дата завершения меньше текущей.
Для этого в Конструкторе запросов после добавления таблицы Current_Contract и выбора необходимых полей в контекстном меню Области схемы выбирается пункт Изменить тип > Вставить результаты. Затем из списка таблиц выбираем таблицу-адресат Executed_Contract и добавляем фильтр для поля Cur_End_Data (см. рис. 26).
Рис. 26.
Записи, добавленные в таблицу Executed_Contract, должны быть удалены из таблицы Current_Contract. Для этого аналогичным образом создатется запрос на удаление.Server использует расширенную версию языка SQL, которая называется Transact-SQL, или T-SQL. T-SQL позволяет создавать пакеты из нескольких запросов, которые последовательно выполняются на сервере и их результаты вместе возвращаются клиенту.
Команда GO определяет, когда пакет передается на сервер. Пример пакета из указанных выше запросов на вставку и удаление показан на рис. 27.
Рис. 27.
Вложенные запросы
Пример. Найти заказчиков, имеющих максимальное количество заказов.
Вначале создается запрос, возвращающий количество заказов, имеющихся у каждого заказчика. (Рис. 28)
Рис. 28.
Далее этот запрос используется в секции FROM запроса, определяющего максимальное количество заказов у одного заказчика
Рис. 29.
Окончательный вид запроса, дающего ответ на вопрос, сформулированный в примере, представлен на рис. 30. Здесь запрос, показанный на рис.29, используется в секции WHERE при определении условия для выбора фамилии заказчика с максимальным количеством заказов; при этом запрос на подсчет количества заказов у каждого заказчика используется дважды.
Рис. 30.
Получить в результате выполнения одного запроса список пользователей с количеством заказов, сделанных каждым из них, и максимальное количество заказов, сделанных одним пользователем, позволяет запрос на рис. 31. В этом запросе использована секция COMPUTE, в которой возможна подстановка одной агрегатной функции в другую (что запрещено делать в других секциях запросов).
Выражения в секции COMPUTE должны совпадать с выражениями в списке выборки команды SELECT и в этой секции нельзя использовать псевдонимы столбцов.
Рис. 31.
В запросе на рис.32 используются три агрегатные функции, вычисляющие количество заказов, общую стоимость заказов и среднюю стоимость одного заказа для каждого клиента. При этом используется информация как о текущих заказах, находящаяся в таблице с именем Current_Contract, так и о выполненных ранее заказах из таблицы с именем Executed_Contract. Для этого в секции FROM помещена к