Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой_проект_УД_.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
735 Кб
Скачать
☆

Субд 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]