Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

SQL_All / sql / LAB4SQL

.DOC
Скачиваний:
53
Добавлен:
18.03.2015
Размер:
27.65 Кб
Скачать

Лабораторная работа №4 (SQL)

Объединение таблиц

Для вывода данных в запросе из двух связанных между собой таблиц, необходимо:

  • Указывать в запросе как наименования полей, так и наименования таблиц

  • В предложении WHERE запроса явно указывать условие объединения таблиц.

Пример запроса: Вывести список всех заказчиков и продавцов, проживающих в одинаковых городах

SELECT customer.cname,sales.sname,sales.city

FROM sales,customer

WHERE sales.city=customer.city

В названиях полей используются префиксы - названия таблиц

Условие sales.city = customer.city - условие ОБЪЕДИНЕНИЯ таблиц.

Выбираются только те записи из таблиц, которые удовлетворяют условию объединения,

Пример запроса: Вывести имена всех заказчиков и соответствующие им имена продавцов

SELECT customer.cname,sales.sname

FROM customer,sales

WHERE sales.snum=customer.snum

В таблице заказчиков (customer) ссылки на таблицу продавцов (sales) - по номеру продавца. Поле snum существует в обеих таблицах. Связь таблиц в запросе по этому полю называется связью по ССЫЛОЧНОЙ ЦЕЛОСТНОСТИ. Ссылочная целостность означает, что в подчиненной таблице (customer) не может находиться такой номер snum, которого бы не было в таблице sales

В запросах редко используется объединение таблиц по неравенству, хотя это вполне возможно. Так, запрос

SELECT sname,cname

FROM sales,customer

WHERE sname < cname AND rating < 200

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

Возможно объединение и большего, чем два, числа таблиц.

Пример запроса: Вывести данные о сделках, совершавшихся между продавцами и заказчиками из разных городов

SELECT onum,orders.cnum,orders.snum,customer.city,sales.city

FROM customer,sales,orders

WHERE customer.city <> sales.city

AND orders.cnum = customer.cnum

AND orders.snum = sales.snum

Условий связей между таблицами должно быть на единицу меньшим, чем число таблиц в запросе.

Возможно объединение таблицы с самой собой.

Пример запроса: Вывести все пары заказчиков с одинаковым рейтингом

SELECT first.cname,second.cname,first.rating

FROM customer first,customer second

WHERE first.rating=second.rating

В предложении FROM используются псевдонимы first и second. Псевдонимы определены только на период действия запроса. После его выполнения псевдонимы не существуют. Запрос сравнивает каждую строку таблицы со всеми строками этой же таблицы, поэтому в выводе имеется избыточность. Для устранения избыточности необходимо наложение асимметричности на любое из полей таблицы:

SELECT first.cname,second.cname,first.rating

FROM customer first,customer second

WHERE first.rating=second.rating

AND first.cnum < second.cnum

Задания для самостоятельного выполнения.

  1. Вывести таблицу: номер сделки и имя заказчика, совершившего сделку.

  2. Для каждой сделки укажите имена заказчиков и продавцов

  3. Вывести имя заказчика, имя продавца, процент его комиссионных для продавцов с комиссионными 0,12

  4. Вывести список: имя продавца, сумма его комиссионных для сделок, совершенных заказчиками с рейтингом выше 100

  5. Вывести все пары продавцов, живущих в одном городе. Дубликаты и совпадения устранить.

Соседние файлы в папке sql