Определение полей результирующей таблицы
В результирующей таблице поля формируются на основе полей выходной таблицы и вычисляемых полей. Для выбора полей, которые должны присутствовать в результирующей таблице, нужно отобразить их в списке Selected Fields вкладки выбора полей запроса.
В Visual FoxPro существует несколько вариантов выбора полей результирующей таблицы.
1. Откройте вкладку Fields, выделите в списке Available fieldsполя, которые необходимо отобразить в запросе, и с помощью кнопки Add …перенесите их в список Selected fields. Кнопка Add All …позволяет произвести выбор сразу всех полей таблицы. Если для формирования запроса необходимо выбрать большую часть полей, то воспользуйтесь этой кнопкой, а затем выделите курсором поля, которые не нужно помещать в запрос, и удалите их из списка Selected fieldsс помощью кнопки Remove.
2. В Visual FoxPro широко используется механизм dgar-and-drop. Для использования этого механизма при выборе полей перейдите на панель, содержащую образы таблиц, используемых в запросе. Выделите нужные поля и переместите их с помощью манипулятора «мышь» в список Selected fields.
3. Для добавления в список отдельных полей таблицы можно выбрать поле и дважды нажать левую кнопку манипулятора «мышь».
Запуск запроса на выполнение
После задания условий для выбора необходимой информации из базы данных и указания результирующих полей в окне конструктора можно просмотреть результаты выполнения запроса. Это можно выполнить одним из следующих способов:
1) нажмите кнопку Run (Выполнить) на стандартной панели инструментов;
2) выберите команду контекстного меню Run Query (Выполнить запрос);
3) выберите в меню Query (Запрос) команду Run Query (Выполнить запрос);
4) нажмите комбинацию клавиш «Ctrl» + «Q».
На экране появятся результаты запроса, представленные в табличном виде. Для просмотра результатов запроса, не открытого в окне конструктора запросов, необходимо в окне проекта установить курсор (указатель манипулятора «мышь») на имя запроса и нажать кнопку Run (Выполнить).
Аппаратура и материалысовпадают с приведенными в описании лабораторной работы 1.
Указания по технике безопасностисовпадают с приведенными в описании лабораторной работы 1.
Задания для защиты работы
Базовый уровень
Задание 1. Используя конструктор запросов, организуйте выборку информации из базы данных «Стол заказов»:
1) всех потребителей, начинающихся на букву «С»;
2) всех товаров, произведенные в Российской Федерации;
3) всех поставщиков, расположенных на территории Ставропольского края.
Методика выполнения задания 1:
1. Откройте созданный проект «Стол заказов».
2. На вкладке Data выберите группу Queries. После этого нажмите кнопку New.
3. На экран будет выведено диалоговое окно New Queries, в котором также нажмите кнопку New Queries.
4. В диалоговом окне Add Table or Viewвыберите таблицу, из которой надо произвести выборку значений. Например, «Журнал реализации».
5. Нажмите кнопку Add …для переноса её в окно конструктора запросов.
6. Выбор полей необходимых для создания запроса осуществите следующим образом:
1) активизируйте вкладку Fields;
2) в списке Available fieldsвыделите поля, которые необходимо перенести в запрос;
3) нажмите кнопку Add для переноса выделенных полей в список Selected fields, если же необходимо перенести все поля, то нажмите кнопку Add All.
7. Запустите сгенерированный запрос на выполнение, нажав кнопку Run.
Повышенный уровень
Задание 2. В командном окне Visual FoxProнаберите SQL запросы для получения информации из базы данных «Стол заказов»:
1) всех потребителей, начинающихся на букву «С»;
2) всех товаров, произведенные в Российской Федерации;
3) всех поставщиков, расположенных на территории Ставропольского края.
Содержание отчета и его форма
Отчет по лабораторной работе должен состоять из:
1) названия лабораторной работы;
2) ответов на контрольные вопросы;
3) формулировки заданий к лабораторной работе и порядка их выполнения.
Отчет о выполнении лабораторной работы в письменном виде сдается преподавателю.
3. Вопросы для самостоятельной работы
Базовый уровень
1. Способы создания запросов в Visual FoxPro.
2. Охарактеризуйте создание запросов с помощью мастера.
3. Охарактеризуйте создание запросов в конструкторе проектов.
4. Каким образом при создании запроса можно определить поля результирующей таблицы?
5. Каким образом можно просмотреть результат выборки (запроса)?
7. Как можно просмотреть автоматически сгенерированный запрос в виде SQL?
Повышенный уровень
8. Охарактеризуйте создание запросов в командном окне Visual FoxPro.
Лабораторная работа 7
Расширенные SQL-запросы. Модификация данных в таблицах
Цель и содержание: изучить средства языка SQL для условной и безусловной модификации данных в таблицах баз данных (БД).
Теоретическая часть
С помощью конструкций языка SQL можно не только производить поиск информации в базе данных, но и выполнять основные действия над таблицами:
1) добавлять информацию в таблицу;
2) модифицировать данные в таблице;
3) удалять информацию из таблицы.
Модификация данных в таблицах
В языке SQL для модификации данных в таблицах используется конструкция UPDATE, которая имеет следующий синтаксис:
UPDATE таблица
SET поле=выражение [,поле=выражение] …
[WHERE условие]
В результате выполнения этой конструкции все записи в таблице, которые удовлетворяют условию, обновляются в соответствии с оператором присвоения «поле = выражение».
При использовании конструкции UPDATE может использоваться только одна таблица. При использовании подзапросов для модификации данных результат выборки должен возвращать только одно значение, а не несколько.
Модификация единственной записи. Для каждой записи, которая должна быть обновлена, т. е. для каждой записи, которая удовлетворяет условию WHERE, или для всех записей, если фраза WHERE опущена, ссылки во фразе SET на поля этой записи обозначают значения этих полей до их модификации. Например, с помощью SQL-запроса
UPDATE tab12
SET NAME =“Macintosh”,
UNITPRICE = UNITPRICE+10000
WHERE NAME =“Pentium4”
будет изменено название товара «Pentium4» на «Macintosh» и увеличена стоимость на 10000.
Модификация множества записей. При изменении значений во множестве записей таблицы условие, определяемой при помощи оператора WHERE,должно удовлетворятьвсему множеству. Используя SQL-запрос
UPDATE tab14
SET CREDITLIMIT= CREDITLIMIT*2
WHERE CITY=“Ставрополь”
можно получить список всех покупателей, проживающих в Ставрополе, с увеличенной в 2 раза суммой кредита.
Модификация с подзапросом. Модификация с подзапросом используется в том случае, если необходимо произвести изменить значения полей в связанных таблицах. В частности, с помощью SQL-запроса
UPDATE tab14
SET UNITPRICE = 0.8*UNITPRICE
WHERE “Мичуринск” = (SELECT CITY FROM tab15
WHERE tab15.CUSTOMERNO= tab14.CUSTOMERNO)
можно вывести на экран список всех покупателей, проживающих в Мичуринске, уменьшив стоимость, приобретенного ими товара на 20%.
Целостность
Целостность - самое важное требование, предъявляемое к базам данных. Для связи таблиц в реляционных базах данных используются совпадающие поля. Например, в таблицах CUSTOMER и ORDSALE связь осуществляется по полю CUSTOMERNO. Наименования совпадающих полей могут и не совпадать, но они должны иметь одинаковый тип. Нарушение целостности возникает в том случае, когда таблица ORDSALE содержит номера покупателей, которых нет в таблице CUSTOMER. Для проверки целостности данных при добавлении в таблицу ORDSALE информации об отпуске товаров можно проверить, имеется ли указанный покупатель в таблице CUSTOMER. Более правильным является использование первичных и внешних ключей таблиц, которые автоматически отслеживают целостность данных.
Для создания первичных и внешних ключей можно использовать команду CREATE TABLE а также команду ALTER TABLE. Приведем синтаксис команды ALTER TABLE:
ALTER TABLE имя таблицы
ADD PRIMARY KEY(имя поля, имя поля ...)
ADD FOREIGN KEY имя внешнего ключа
(имя поля, имя поля ...)
REFERENCES имя ссылочной таблицы
[ON DELETE
RESTRICT çCASCADE çSET NULL]
Для обеспечения целостности покупателей в базе данных создадим первичный ключ для таблицы CUSTOMER и внешние ключи для всех таблиц, которые содержат код покупателя:
ALTER TABLE CUSTOMER
ADD PRIMARY KEY(CUSTOMERNO)
ALTER TABLE ORDSALE
ADD FOREIGN KEY CUSTNO (CUSTOMERNO)
REFERENCES CUSTOMER
ON DELETE RESTRICT
Если указан параметр RESTRICT, то удалить покупателя в таблице CUSTOMER можно только в том случае, если он не указан ни в какой другой таблице, имеющей ссылку на таблицу CUSTOMER. В этом случае для удаления покупателя из таблицы CUSTOMER предварительно необходимо удалить все записи в таблице все записи в таблице ORDSALE, содержащие ссылки на этот номер покупателя. В некоторых случаях желательно, чтобы удаление главной таблицы приводило к удалению подчиненных. Для этого используется фраза: ON DELETE CASCADE.
Удаление данных
Для удаления данных из базы используется конструкция DELETE, которая имеет следующий синтаксис:
DELETE FROM таблица [WHERE условие]
В результате выполнения конструкции удаляются все записи, которые удовлетворяют условию.
С помощью конструкции DELETEиз базы данных может быть удалена одна запись, множество записей, все записи из одной таблицы; одна или множество записей из нескольких связанных таблиц.
Пример– SQL-запрос, иллюстрирующий удаление одной записи из базы данных
DELETE FROM tab12
WHERE CUSTOMERNO=23
В результате его выполнения будет удален из базы данных покупатель со значением кода, равным «23».
Пример – SQL-запрос, иллюстрирующий удаление из базы множества записей
DELETE FROM tab12 WHERE STOCK=34
После выполнения данного SQL-запроса из таблицы tab12будутудаленывсе записи, в которых поле STOCKравно 34.
Пример– SQL-запрос, иллюстрирующий удаление всех записей из таблицы ORDSALE:
DELETE FROM ORDSALE
В результате выполнения этой операции таблица будет доступна для дальнейшей работы, однако, она будет пустой. Удаление из таблицы всех записей не приводит к уничтожению таблицы.
SQL-запрос с подзапросом используют в том случае, если необходимо произвести удаление записей из нескольких связанных таблиц, принадлежащих одной базе данных.
Пример– Удаление с подзапросом
DELETE FROM tab12
WHERE “Киев”= (SELECT CITY FROM tab13
WHERE tab13.CUSTOMERNO= tab12.CUSTOMERNO)
После выполнения данного запроса из базы данных будет удалена информация о покупках всех клиентов, проживающих в Киеве.
Добавление записей
Для добавления записей в базу данных с помощью языка SQL используется конструкция INSERT, которая имеет два варианта синтаксиса:
INSERT INTO таблица [(поле [,поле] ...)] VALUES (константа [,константа]...)
или
INSERT INTO таблица [(поле [,поле] ...)] подзапрос
В первом варианте в таблицу вставляется запись, имеющая заданные значения для указанных полей, причем i-я константа в списке констант соответствует i-у полю в списке полей. Во втором варианте формируется подзапрос, представляющий собой множество записей, которые добавляются в таблицу. При этом i-е поле результата подзапроса соответствует i-у полю в списке полей добавляемой таблицы. В обоих случаях отсутствие списка полей эквивалентно использованию всех полей таблицы.
С помощью конструкции INSERTв базу данных можно вставить одну запись, множество записей.
Пример– SQL-запрос для вставки одной записи в базу данных
INSERT INTO tab15
(kod, NAME, UNITPRICE, CATEGORY)
VALUES
(1001,”Pentium”,3000000,2)
В результате выполнения приведенного выше запроса будет создана новая запись для товара с заданным номером, наименованием, стоимостью и категорией товара. В частности, в таблицу tab15будет добавлен товар «Pentium»,с кодом равным 1001, стоимостью 30000000 и категорией, равной 2.
Пример – SQL-запрос для вставки одной записи в базу данных