Самостоятельная работа Создание запросов с использованием стандартных слов union, intersect и minus по дисциплине «Базы данных»


Download 61.34 Kb.
bet4/9
Sana25.12.2022
Hajmi61.34 Kb.
#1065867
TuriСамостоятельная работа
1   2   3   4   5   6   7   8   9
Bog'liq
4-Labaratoriya ishi Mavzu Union, Intersect va Minus standart

Пример 5. Есть база данных портала объявлений.
Пусть сначала требуется получить данные о категориях и частях категорий объявлений, в которых подано более 100 объявлений в неделю. Пишем следующий запрос:

SELECT Category, Part, Units, Money


FROM ADS WHERE Units > 100
Результатом выполнения запроса будет следующая таблица:

Category

Part

Units

Money

Транспорт

Автомашины

110

17600

Транспорт

Мотоциклы

131

20960

Электротехника

Телевизоры

127

8255

Электротехника

Холодильники

137

8905

Стройматериалы

Регипс

112

11760

Досуг

Музыка

117

7605

Теперь требуется извлечь данные о категориях и частях категорий объявлений, за которые выручено более 10000 денежных единиц в неделю. Пишем следующий запрос:

SELECT Category, Part, Units, Money


FROM ADS WHERE Money > 10000
Результатом выполнения запроса будет следующая таблица:

Category

Part

Units

Money

Транспорт

Автомашины

110

17600

Недвижимость

Квартиры

89

18690

Недвижимость

Дачи

57

11970

Транспорт

Мотоциклы

131

20960

Стройматериалы

Регипс

112

11760

Теперь требуется извлечь данные, которые соответствуют критериям и первого, и второго запросов. Объединяем запросы при помощи оператора UNION:

SELECT Category, Part, Units, Money


FROM ADS WHERE Units > 100
UNION
SELECT Category, Part, Units, Money
FROM ADS WHERE Money > 10000
Результатом выполнения запроса будет следующая таблица:

Транспорт

Автомашины

110

17600

Транспорт

Мотоциклы

131

20960

Недвижимость

Квартиры

89

18690

Недвижимость

Дачи

57

11970

Электротехника

Телевизоры

127

8255

Электротехника

Холодильники

137

8905

Стройматериалы

Регипс

112

11760

Досуг

Музыка

117

7605

Примеры запросов к базе данных "Портал объявлений-1" есть также в уроках об операторах INSERTUPDATEDELETEHAVING.

  • Страница 2 (Объединение результатов сложных запросов)

Объединение результатов запросов к двум таблицам с помощью оператора SQL UNION


До сих пор мы рассматривали запросы с оператором UNION, в которых объединялись результаты из одной таблицы. Теперь будем объединять результаты из двух таблиц.
Пример 6. Есть база данных склада строительных материалов. В ней есть таблицы, содержащая данные об обоях. Таблица Vinil содержит данные о виниловых обоях, таблица Paper - о бумажных обоях. Требуется узнать данные о ценах обоев из одной и другой таблицы.
Чтобы извлечь не повторяющиеся данные о ценах на виниловые обои, составим запрос со словом DISTINCT:

SELECT DISTINCT Price FROM VINIL


Результатом выполнения запроса будет следующая таблица:

Price

400

500

530

610

720

800

850

Чтобы извлечь не повторяющиеся данные о ценах на бумажные обои, составим следующий запрос, также со словом DISTINCT:

SELECT DISTINCT Price FROM PAPER


Результатом выполнения запроса будет следующая таблица:

Price

300

320

360

400

430

500

530

Теперь составим объединённый запрос с оператором UNION:

SELECT DISTINCT Price FROM VINIL


UNION
SELECT DISTINCT Price FROM PAPER
Так как мы не используем слово ALL, дубликаты значений 400, 500 и 530 выводиться не будут. Результатом выполнения запроса будет следующая таблица:

Price

300

320

360

400

430

500

530

610

720

800

850

Пример 7. База данных и таблицы - те же, что и в предыдущем примере.
Требуется получить все данные о ценах, в том числе повторяющиеся. Запрос на объединение результатов с использованием оператора UNION будет аналогичен запросу в предыдущем примере, но вместо просто UNION пишем UNION ALL:

SELECT DISTINCT Price FROM VINIL


UNION ALL
SELECT DISTINCT Price FROM PAPER
Результатом выполнения запроса будет следующая таблица:

Price

300

320

360

400

400

430

500

500

530

530

610

720

800

850

  • Страница 2 (Объединение результатов сложных запросов)

При помощи оператора SQL UNION можно объединить как простые запросы, так и запросы, содержащие подзапросы (вложенные запросы). Рассмотрим соответствующий пример.
Пример 8. Есть база данных "Театр". В её таблице Play содержатся данные о постановках (названия - в столбце Name), в таблице Director - даные о режиссёрах (в столбце Fname - имя, в столбце Lname - фамилия). Первичный ключ таблицы Director - dir_id - идентификационный номер режиссёра. Dir_id также - внешний ключ таблицы Play, он ссылается на первичный ключ таблицы Director. Требуется вывести спектакли режиссеров John Barton и Trevor Nunn.
Решение. Объединим результаты двух запросов - один возвращает спектакли режиссёра John Barton, другой - режиссёра Trevor Nunn. А каждый из этих объединяемых запросов к таблице Play делаем с подзапросом к таблице Director, который возвращает dir_id по имени и фамилии режиссёра. Каждый внешний запрос принимает из вложенного запроса значение ключа dir_id и возвращает названия постановок (Name):

SELECT NAME FROM PLAY WHERE dir_id = (SELECT dir_id FROM DIRECTOR WHERE


fname = 'John' AND lname = 'Barton')
UNION
SELECT NAME FROM PLAY WHERE dir_id = (SELECT dir_id FROM DIRECTOR WHERE
fname = 'Trevor' AND lname = 'Nunn')

Операции пересечения и разности множеств в SQL


Оператор SQL INTERSECT реализует операцию реляционной алгебры пересечение множеств, оператор SQL EXCEPT - разность множеств. В виде множеств выступают результаты единичных запросов.
Таким образом, оператор SQL INTERSECT возвращает те и только те строки, которые возвращает и первый, и второй запросы. В свою очередь, оператор SQL EXCEPT возвращает те строки, которые возвращает первый запрос, и которых нет среди строк, возвращаемых вторым запросом.
Для того, чтобы были осуществлены операции пересечения и разности, запросы должны быть совместимы по объединению, то есть должны совпадать число столбцов, порядок их следования и их имена.
Оператор INTERSECT имеет следующий синтаксис:

SELECT ИМЕНА_СТОЛБЦОВ (1..N)


FROM ИМЯ_ТАБЛИЦЫ
INTERSECT
SELECT ИМЕНА_СТОЛБЦОВ (1..N)
FROM ИМЯ_ТАБЛИЦЫ
Оператор EXCEPT имеет следующий синтаксис:

SELECT ИМЕНА_СТОЛБЦОВ (1..N)


FROM ИМЯ_ТАБЛИЦЫ
EXCEPT
SELECT ИМЕНА_СТОЛБЦОВ (1..N)
FROM ИМЯ_ТАБЛИЦЫ
В этой конструкции единичные запросы могут иметь условия в секции WHERE, а могут не иметь их. При помощи операторов INTERSECT и EXCEPT можно производить операции с запросами как к одной таблице, так и к разным.
В примерах работаем с базой данных сети магазинов и таблицами SOLNYSHKO и VETEROK, содержащими данные о продуктах, которые имеются в магазинах с соответствующими названиями. Таблица SOLNYSHKO:

Prod_ID

ProdName

Maker

Quantity

1

хлеб

AB

100

2

молоко

CD

65

3

мясо

EF

75

4

рыба

GH

60

5

сахар

IJ

45

Таблица VETEROK:

Prod_ID

ProdName

Maker

Quantity

1

хлеб

QW

85

2

молоко

LD

70

3

сыр

MV

45

4

масло

DG

62

5

рыба

LN

55

2: Пересечение множеств: оператор SQL INTERSECT и его альтернативы
Пересечением множеств A и B называется множество, состоящее их всех тех или только тех элементов, которые принадлежат каждому из множеств A и B. Больше об операциях над множествами как над математическими объектами можно узнать из урока Множества и операции над множествами. Пересечениями множеств могут служить носители одних и тех же имен в двух студенческих группах, овощи одних и тех же наименований в двух корзинах и другие. Пересечением множеств является, наконец, набор товаров, которые имеются и в одном, и в другом магазинах.
Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке.

Download 61.34 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling