- •Рецензенты:
- •Введение
- •Содержание
- •1. Цель, задачи и реализуемые компетенции
- •2. Формулировка задания
- •3.2 Теоретическая часть курсового проекта
- •3.3 Практическая часть курсового проекта
- •3.3.1 Обследование предметной области
- •3. Структура работы
- •1. Теоретическая часть
- •2. Практическая часть
- •3.1 Введение к курсовому проекту
- •3.3.2 Разработка технического задания
- •3.3.3 Концептуальное проектирование
- •3.3.4 Инфологическое проектирование
- •3.3.5 Реляционная модель бд
- •3.3.6 Даталогическая модель бд
- •3.3.7 Запросы к базе данных
- •3.3.8 Разработка механизмов защиты данных от несанкционированного доступа
- •3.3.9 Требования к техническому обеспечению
- •3.3.10 Инструкция по использованию базы данных
- •3.3.11 Заключение
- •3.3.12 Список используемой литературы
- •3.3.13 Приложения
- •4. Общие требования к написанию и оформлению проекта
- •4.1 Оформление пояснительной записки
- •5. Последовательность выполнения задания
- •6. Критерии оценивания Проекта
- •7. Порядок защиты проекта
- •Список рекомендуемой литературы
- •Internet-ресурсы
- •Приложение 1
- •Направление (специальность) _______________________________________
- •Задание на курсовую работу (проект)
- •Приложение 2
- •Курсовой проект
- •Приложение 3
- •1 Безусловная выборка значений
- •2 Простая выборка
- •3 Выборка уникальных значений
- •4 Выборка вычисляемых значений
- •5 Выборка с условием
- •6 Выборка с упорядочением
- •7 Выборка с использованием оператора between
- •8 Выборка с использованием оператора in (принадлежит)
- •9 Выборка с использованием шаблонов
- •Имя поля like строковая константа
- •10 Выборка из связанных таблиц
- •Простое соединение
- •Соединение с дополнительным условием
- •Соединение трех таблиц
- •11 Использование группировки данных при организации запросов
- •Использование группировки данных совместно с условием
- •Использование having
- •12 Использование квантора существования в запросах
- •13 Объединение множеств
- •Субд ms Visual FoxPro
- •14 Модификация данных в таблицах
- •15 Удаление данных
- •16 Добавление записей
- •Insert into таблица [(поле [,поле] ...)] values (константа [,константа]...)
- •Insert into таблица [(поле [,поле] ...)] подзапрос
- •17 Запросы по дате
- •18. Соединение отношений. Оператор join
- •19. Коррелированные и некоррелированные подзапросы
- •20. Вычисления в таблицах. Команда calculate
Субд ms Visual FoxPro
Следующий пример показывает результат применения оператора UNION в случае, когда формальная совместимость по объединению имеется, но фактически столбцы из разных таблиц отображают разные данные. Их совмещение в едином столбце не имеет смысла. Поэтому слева от рисунка имеется надпись «неверно».
Н Е В Е Р Н О |
|
Рисунок 13.2 – Неверное применение оператора UNION
Пример 13.1. SQL-запрос
SELECT kod FROM tab12 WHERE UNITPRICE>1000
UNION
SELECT kod FROM tab13 WHERE CUSTOMERNO=23
предназначен для выбора кодов товаров, которые имеют стоимость более 1000, либо приобретаются покупателем с кодом 23 (либо и то, и другое).
Использование оператора UNION исключает из результатов выборки повторяющиеся значения. Если это не устраивает пользователя, то вместо оператора UNION используют UNION ALL.Тогда повторы не будут исключены из выборки.
Оператором UNION можно соединить любое количество конструкций SELECT.
Пример 13.2. С помощью SQL-запроса
SELECT kod FROM tab12 WHERE UNITPRICE>1000
UNION
SELECT kod FROM tab13 WHERE CUSTOMERNO=23
UNION
SELECT kod FROM tab12 WHERE UNITPRICE< 500
пользователь может получить информацию о кодах товаров, которые имеют стоимость более 1000, либо приобретены покупателем с кодом 23, либо имеют цену менее 500.
Если к запросу, приведенному в примере 13.1, добавить строку OR UNITPRICE < 500, то его результирующая таблица будет аналогична результирующей таблице, соответствующей запросу из примера 13.2.
Оператор ORDER BY в запрос с использованием оператора UNION может входить только в последнее предложение SELECT. При использовании критерия упорядочивания используются номера полей результирующей таблицы. Пример с включением константы в результирующую таблицу:
SELECT kod,”Стоимость товара >1000$” FROM tab12
WHERE UNITPRICE>1000
UNION
SELECT kod, ”Товар куплен покупателем 23” FROM tab13
WHERE CUSTOMERNO=23
ORDER BY 2,1
Другой синтаксис оператора объединения:
(SELECT*FROM STOCK) UNION (SELECT*FROM ORDSALE)
Еще один вариант запроса:
SELECT*FROM (TABLE tab12 UNION TABLE tab13)
Если эти операции необходимо применить к отдельным столбцам, то используют команду CORRESPONDING BY (имя_поля). В этом случае объединительная совместимость таблиц не требуется, но обязательно указанные поля должны иметь одинаковый тип данных.
Использование оператора UNION при выборке
вычисляемых значений
При выполнении запросов может осуществляться не только выбор из таблицы ранее введенных в нее значений, но и получение данных, отсутствующих в исходной таблице. При этом условия выборки для различных полей и строк исходной таблицы могут быть различными, что приводит к необходимости составления различных запросов. В том случае, когда полученный результат требуется представить в виде одной таблицы, требуется выполнить объединение множеств. В этом случае используется оператор UNION, а результаты выполнения различных запросов должны быть совместимы по объединению.
На рисунке 13.3 в СУБД Visual FoxPro показано применение оператора UNION для объединения двух запросов, полученное с помощью СУБД MS Visual FoxPro. Текст запроса приведен в командном окне. Результат выполнения запроса находится в окне Query. Состав таблицы показан в верхней части окна. Первый запрос вычисляет цену товара с кодом kod=1 со скидкой 10%. Второй запрос вычислят цену товара с кодом kod=2 с наценкой 18% (Это налог на добавленную стоимость). Столбец Price переименован в столбец Цена.
Рисунок 13.3 – Применение оператора UNION при выборке вычисляемых значений
Тип переменной PRICE – Currency. По умолчанию данный тип переменной настроен на получения десятичного числа с 4 знаками после запятой (рисунок 13.3, окно Query). Однако данный тип переменной позволяет настроить формат вывода десятичного числа таким образом, чтобы после десятичной точки было два знака, что соответствует национальной валюте России.
SQL-запрос с оператором UNION может объединять произвольное количество запросов. Добавим к запросу, представленному на рисунке 13.3, еще одно условие, вычислим цену товара с кодом Kod=3 со скидкой 5%. Тогда для получения результатов выборки в виде одной таблицы потребуется SQL-запрос:
SELECT Kod, Stock, Price * 0.9 AS цена FROM Table3 WHERE Kod=1
UNION
SELECT Kod, Stock, Price * 1.18 AS цена FROM Table3
WHERE Kod=2
UNION
SELECT Kod, Stock, Price * 0,95 AS цена FROM Table3
WHERE Kod=3
Получение вычисляемых значений и правила вычислений могут определяться условиями, которые проверяются не только в таблице, содержащей числовые данные для вычислений, но и в других таблицах.
Пример 13.3. Пусть в базе данных содержится таблица Товары(kod, price) и таблица Клиенты( kod_c, name, , kod). Чтобы вычислить цены товаров из таблицы Товары, одновременно предоставив клиентам из Москвы скидку 10%, а клиентам из Ставрополя скидку 5% можно использовать запрос с подзапросом:
SELECT Товары. kod, Товары. price*0.9 as цена, Клиенты.city
FROM Товары, Клиенты WHERE exists(select*from Клиенты WHERE city="Москва" AND Товары.kod=Клиенты.kod)
union
SELECT Товары. kod, Товары. price *0.95 as цена, Клиенты.city
FROM Товары, Клиенты WHERE exists(select*from клиенты WHERE city="Ставрополь" AND Товары.kod=Клиенты.kod) AND Товары.kod=Клиенты.kod
