Проектирование информационных систем

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

таблицы открывается окно с областью 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 помещена к