Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб. раб_2.doc
Скачиваний:
9
Добавлен:
19.11.2018
Размер:
254.98 Кб
Скачать

Запросы на выборку к трем и более таблицам

SQL позволяет объединять данные из трех или более таблиц, используя ту же самую методику, что и для объединения данных из двух таблиц.

Пример 2.4. Вывести список для всех поставок, включая объем поставки, наименование поставщика и наименование комплектующего для поставок, объем которых превышает 700.

Select Quantity, Sname, Pname

From Delivery, Supplier, Product

Where Delivery.SID = Supplier.SID and

Delivery.PID = Product.PID and

Quantity > 700

Результат:

Quantity Sname Pname

----------- ------------- --------------

800 R-Style Soc-A Gigabyte

900 Формоза Soc-478

800 Формоза Soc-603

В SQL-запросе используются два внешних ключа таблицы Delivery. Столбец SID является внешним ключом для таблицы Supplier; он связывает каждую поставку с поставщиком, выполняющим её. Столбец PID является внешним ключом для таблицы Product, связывая каждую поставку с комплектующим, включенным в поставку. Т.е. запрос связывает каждую поставку с соответствующим поставщиком и комплектующим.

SQL-запрос может быть сформирован и к большему числу таблиц.

Пример 2.5. Вывести список для всех поставок, включая объем поставки, наименование поставщика, наименование комплектующего и наименование проекта для поставок, объем которых превышает 700.

Select Sname, Pname, NameProject, Quantity

From Delivery, Supplier, Product, Project

Where Delivery.SID = Supplier.SID and

Delivery.PID = Product.PID and

Delivery.KID = Project.KID and

Quantity > 700

Результат

Sname Pname NameProject Quantity

---------- --------------- ------------- -------

R-Style Soc-A Gigabyte Комета 800

Формоза Soc-478 Восток 900

Формоза Soc-603 Сириус 800

Прочие объединения таблиц по равенству

Огромное множество многотабличных запросов основано на отношениях предок/потомок, но в SQL не требуется, чтобы связанные столбцы представляли собой пару «внешний ключ − первичный ключ». Любые два столбца из двух таблиц могут быть связанными, если только они имеют сравнимые типы данных.

Пример 2.6. Вывести список наименования всех поставщиков, город поставщика и наименования комплектующих, находящихся в одном и том же городе, что и поставщик.

Select Sname, Pname, Supplier.City

From Supplier, Product

Where Supplier.City = Product.City

Результат:

Sname Pname City

----------------- ----------------- -------------

Информатика Soc-370 Ростов-на-Дону

Вист-Дон Soc-370 Ростов-на-Дону

Информатика Soc-478 Ростов-на-Дону

Вист-Дон Soc-478 Ростов-на-Дону

Sunrise Server Dual Москва

Формоза Server Dual Москва

Sunrise Soc-A ASUS Москва

Формоза Soc-A ASUS Москва

R-Style Soc-A Gigabyte Санкт-Петербург

Результатами SQL-запроса являются пары строк из таблиц Supplier и Product, имеющие одинаковые значения в столбцах City. Указанные столбцы не являются ни внешним ключом. Тем не менее СУБД с готовностью объединяет таблицы в соответствии с запросом. Следует отметить, что при задании условия выборки необходимо использовать полные имена атрибутов (Supplier.City = Product.City), чтобы не произошел конфликт имен при выполнении SQL-запроса.

Связанные столбцы, подобные приведенным в данном примере, создают между двумя таблицами отношение «многие-ко-многим». Т.е. городу поставщика могут соответствовать множество комплектующих, находящихся в том же городе. В то же время для комплектующего, находящегося в определенном городе, могут быть поставлены в соответствие несколько поставщиков из того же города.

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

  • в объединении, созданном путем связи первичного ключа с внешним ключом, всегда существует отношение «один-ко-многим» (предок/потомок);

  • в других объединениях также могут существовать отношения «один-ко-многим», если по крайней мере в одной таблице связанный столбец содержит уникальные значения во всех строках;

  • в общем случае в объединениях, созданных на основе произвольных связанных столбцов, существуют отношения «многие-ко-многим».

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

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