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

Самообъединения

В первом решении используются подзапросы. Внутренний оператор SELECT выполняет простую выборку, чтобы возвратить имя компании (cli_name), с которой работает Иванов И.И..

Теперь рассмотрим тот же самый запрос, в котором используется объединение:

SELECT cl.cli_id, cl.cli_name, cl.cli_contact FROM Client AS cl, Client AS c2

WHERE cl.cli_name = c2.cli_name AND c2.cli_contact = 'Иванов И.И.'

Здесь используются псевдонимы таблиц Две таблицы, необходимые для выполнения запроса, на самом деле

одна и та же таблица, поэтому таблица Client появляется

впредложении FROM дважды.

11

Пример самообъединения

В БД имеется таблица:

Требуется найти студенток и их мужей

SELECT s1.Фамилия AS Муж_, s2.Фамилия AS Жена_ FROM Студент AS s1, Студент AS s2

WHERE s1.id = s2.Муж

12

Внешние объединения

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

Например, вы можете использовать объединения для решения следующих задач:

-подсчета количества заказов каждого клиента, включая клиентов, которые еще не сделали заказ;

-составления перечня продуктов с указанием количества заказов на них, включая продукты, которые никто из клиентов не захотел заказывать;

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

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

13

Левое внешнее объединение

Следующий оператор SELECT позволяет выполнить

простое внутреннее объединение. С его помощью выбирается список всех клиентов и их заказы:

SELECT Client.cli_id, Orders.order_num

FROM Client INNER JOIN Orders

ON Client.cli_id = Orders.cli_id;

Синтаксис внешнего объединения похож на этот. Для выборки имен всех клиентов, включая тех, которые еще не сделали заказов, можно сделать следующее:

 

 

 

cli id

order num

 

 

 

 

SELECT Client.cli_id, Orders.order_num

 

 

 

1000000001

20005

 

FROM Client LEFT OUTER JOIN Orders

 

1000000002 NULL

 

ON Client.cli_id = Orders.cli_id;

 

1000000003

20006

 

 

 

1000000004

20007

 

 

 

1000000005

20008

14

Правое внешнее объединение

Правое внешнее объединение аналогично левому и используется в случае, если в правой таблице существуют все записи, а в левой есть пропуски (NULL):

SELECT Orders.order_num, Client.cli_id,

FROM Client RIGHT OUTER JOIN Orders

ON Client.cli_id = Orders.cli_id;

order num cli id 20005 1000000001 NULL 1000000002 20006 1000000003 20007 1000000004 20008 1000000005

15

Использование объединений и условий объединения

1)Будьте внимательны при выборе типа объединения, которое собираетесь использовать.

2)Возможно, что чаще вы будете использовать внутреннее объединение.

3)Посмотрите в документации СУБД, какой именно синтаксис объединений она поддерживает.

4)Проверьте, правильно ли вы указали условие объединения (независимо от используемого синтаксиса), иначе будут возвращены неверные данные.

5)Можно включать в объединение много таблиц и даже применять для каждой из них свой тип объединения

16

Комбинированные запросы (соединения)

В большинстве SQL-запросов используется один оператор SELECT.

SQL позволяет также выполнять множественные запросы за счет многократного использования оператора SELECT и возвращать результаты в виде одного набора результатов запроса.

Эти комбинированные запросы обычно называют

соединениями.

Два основных сценария, для соединений:

1)для возвращения одинаковым образом структурированных данных из различных таблиц посредством одного запроса;

2)для выполнения многократных запросов к одной таблице и возвращения данных в виде результата одного запроса.

17

Комбинированные запросы и многократные условия WHERE

Результат комбинирования двух запросов к одной и той же таблице в основном аналогичен результату, полученному при выполнении одного запроса с несколькими требованиями в предложении WHERE.

Иначе говоря, любой оператор SELECT со многими условиями можно также рассматривать как сложный запрос.

18

Оператор UNION

Запросы в языке SQL комбинируются с помощью оператора UNION.

Оператор UNION позволяет многократно указывать оператор SELECT, и по завершении их работы может быть выведен один набор результатов.

UNION ставится между простыми SELECTзапросами

19

Пример 1

Для возвращения одинаковым образом

структурированных данных из различных таблиц посредством одного

запроса используется комбинированный запрос:

SELECT Name AS n

FROM cities

WHERE Name LIKE 'Т*'

UNION

SELECT Name AS n

FROM Regions

WHERE Name LIKE 'Т*'

20

Соседние файлы в папке Управл_данными