Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 Практический раздел.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
5.18 Mб
Скачать

Многотабличные запросы

Многотабличные запросы – это запросы, которые используют данные нескольких таблиц.

Для того, чтобы объединить в результирующей таблице столбцы нескольких таблиц, используют соединение таблиц и ключевые слова JOIN ON. В результате операции соединения двух таблиц создается таблица, состоящая из пар связанных строк, выбранных из каждой таблицы. Каким образом связываются пары строк определяет условие, которое задается после ключевого слова ON.

SELECT [DISTINCT | ALL] {* | список столбцов}

FROM имя_таблицы1 JOIN имя_таблицы2 ON условие

Аналогичное действие можно выполнить и таким образом:

SELECT [DISTINCT | ALL] {* | список столбцов}

FROM имя_таблицы1, имя_таблицы2

WHERE условие

Соединение таблиц, это частный случай декартова произведения таблиц. Декартово произведение двух таблиц – это таблица, состоящая из всех возможных пар строк, входящих в состав обеих таблиц. Для задания декартова произведения используются ключевые слова CROSS JOIN.

SELECT [DISTINCT | ALL] {* | список столбцов}

FROM имя_таблицы1 CROSS JOIN имя_таблицы2

Аналогичное действие можно выполнить и таким образом:

SELECT [DISTINCT | ALL] {* | список столбцов}

FROM имя_таблицы1, имя_таблицы2

Для того чтобы объединить в результирующей таблице строки нескольких таблиц используют объединение таблиц и ключевое слово UNION. Таблицы должны быть совместимы по соединению – т.е. иметь одинаковую структуру (одинаковое количество столбцов, с одинаковыми типами данных).

SELECT [DISTINCT | ALL] {* | список столбцов}

FROM имя_таблицы1

WHERE условие

UNION SELECT [DISTINCT | ALL] {* | список столбцов}

FROM имя_таблицы2

WHERE условие

Примеры многотабличных запросов

Для примеров используется таблица shop (Магазины) и таблица seller (Продавцы)

  1. Определить всех сотрудников, работающих в городе Челябинске:

SELECT fio as «ФИО»

FROM seller sl JOIN shop s ON sl.shopid=s.shopid

WHERE town='Челябинск';

  1. Определить количество продавцов в каждом магазине. В итоговой информации указать название магазина, адрес, торговую площадь, количество продавцов.

SELECT name as «магазин», adres as «адрес», area as «площадь», c as «количество продавцов»

FROM shop s JOIN пользователь: (SELECT shopid, COUNT(*) as c

FROM seller

GROUP BY shopid) n

ON s.shopid=n.shopid;

Задание для самостоятельной работы

Подзапросы и многотабличные запросы

  1. Определить в каком городе максимальная торговая площадь.

  2. Определить в каком городе максимальное количество магазинов.

  3. Определить у какого поставщика максимальный рейтинг.

  4. Определить у какого поставщика минимальный рейтинг.

  5. Определить всю информацию о поставщиках, неисполнивших заказ и просрочивших поставку.

  6. Определить ФИО продавца с максимальными продажами за прошедший месяц.

  7. Выбрать информацию о продавцах и определить для каждого суммарную выручку за товар за прошедший месяц. Отсортировать по убыванию выручки.

  8. Определить суммарную выручку за товар у каждого магазина за прошедший месяц.

  9. Определить по каждому поставщику суммарную выручку за товар за прошедший месяц.

  10. Определить количество проданных сумок каждой модели, поставленных начиная с 1 числа прошедшего месяца. В результирующую таблицу включить номер модели, описание модели, количество проданных, количество закупленных, отсортировать по убыванию количества проданных.

  11. Определить информацию о товаре, которая должна включать в себя код товара, описание модели, название поставщика, адрес поставщика, дату поставки, количество поставленного товара, количество в наличии, цену для покупателя, название магазина, адрес магазина.

  12. Определить магазины, в ассортименте которых нет в наличии моделей, в описании которых встречаются слова «красный» и «замша».

  13. Определить товары, имеющиеся в наличии, в описании которых встречаются слова «пряжка» или «фурнитура». Выбранная информация должна включать в себя код товара, модель, описание модели, № магазина, адрес магазина, сколько осталось в наличии.

  14. Определить для проданных товаров разницу между датой продажи и датой поставки в днях. Отсортировать по возрастанию этой величины. Выбранная информация должна включать код товара, описание модели, разница между датой продажи и датой поставки.

  15. Определить товары, которые не продаются в течении срока большего, чем один месяц (т.е. количество закупленных = количеству оставшихся в наличии и поставка была за 1 месяц от сегодняшней даты). Выбранная информация должна включать в себя код товара, модель, описание модели, название поставщика, адрес поставщика, № магазина, адрес магазина.

  16. Определить товар, который был распродан в течении 3-х дней с момента поставки. В выбранной информации указать код товара, модель, описание модели, код поставщика, код магазина, количество поставленного товара, дата поставки.

  17. Определить наличие товара в магазине «№ 123» (код магазина = 1). Выбранная информация должна включать код товара, модель, описание модели, название поставщика, цена для покупателя, количество в наличии. Отсортировать по названию модели.

  18. Выбрать поставщиков, которые находятся в том же городе, что и магазин № 123 (код магазина = 1). Выбранная информация должна включать название поставщиков, адрес.

СОДЕРЖАНИЕ И ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

  1. Изучить теоретические сведения.

  2. Открыть базу данных из предыдущей лабораторной работы.

  3. Выполнить запросы в соответствии с вариантом.

  4. Проверить работу всего проекта.

  5. Продемонстрировать преподавателю работу разработанного образца проекта.

  6. Получить от преподавателя индивидуальное задание и создать проект (по аналогии) для выполнения индивидуального задания.

  7. Подготовиться к защите лабораторной работы, которая включает в себя демонстрацию индивидуального варианта, защиту по контрольным вопросам теоретической части работы.

Вопросы выходного контроля:

  1. Дайте определение понятию вложенный запрос.

  2. Напишите синтаксис вложенного SELECT-запроса.

  3. Назовите, что получается в результате выполнения вложенного запроса

  4. Перечислите агрегирующие функции, которые Вы использовали в работе.

  5. Назовите основные конструкции, которые входят в оператор SELECT.

  6. Укажите ключевое слово, предназначенное для исключения повторяющихся строк из результата запроса.

  7. Назовите отличия конструкций WHERE и HAVING?

  8. С помощью какой конструкции выполняется сортировка результата запроса.