Читайте также:
|
|
В этом случае одной и той же таблице даются два псевдонима.
Задание 10: требуется найти всех ровесников в организации.
Это можно сделать оператором
SELECT pl.Farn, p2.Fam, pl.Year_b FROM Pers pi, Pers p2
WHERE (pl.Year_b = p2.Year_b) AND (pl.Fam! = p2.Fam)
Замечание. В этом примере для таблицы Pers мы ввели два псевдонима: р1 и р2.
В конструкции WHERE мы ищем в этих якобы разных таблицах записи с одинаковым годом рождения. Второе условие pl.fam!= p2.fam нужно, чтобы сотрудник не отображался в результатах как ровесник сам себя.
Правда, приведенный оператор выдает в результате по две записи на каждую пару ровесников, сначала, например, «Николаев — Андреев», а потом «Андреев — Николаев».
Чтобы исключить такое дублирование можно добавить еще одно условие:
pl.Fam < p2.Fam:
SELECT pl.Fam, p2.Fam, pl.Year_b FROM Pers pi, Pers p2
WHERE (pl.Year_b - p2.Year_b) AND (pl.Fam!= p2.Fam) AND (pl.Fam < p2.Fam)
Дополнительное условие упорядочивает появление фамилий в pi и р2 и исключает дублирование результатов.
9. Осваиваем приемы создания внешних объединений
Замечание. До сих пор рассматривались объединения, основанные на однозначном соответствии записей двух таблиц, когда каждой записи в первой таблице находилась соответствующая ей запись во второй таблице.
Возможны и другие виды объединений, которые выдают записи независимо от того, есть ли соответствующее поле во второй таблице. Это внешние объединения (outer join).
Их три типа:
А) левое;
Б) правое;
В) полное.
Пояснение: Левое объединение (обозначается ключевыми словами LEFT OUTER JOIN... ON) включает в результат все записи первой таблицы, даже те, для которых не имеется соответствия во второй.
Правое объединение (обозначается ключевыми словами RIGHT OUTER JOIN... ON) включает в результат все записи второй таблицы, даже если им нет соответствия в записях первой. Полное объединение (обозначается ключевыми словами FULL OUTER JOIN... ON) включает в результат объединение записей обеих таблиц, независимо от их соответствия.
Задание. Добавьте в базу данных таблицу Chef, в которую занесите данные на членов совета директоров этой компании. Причем в число членов совета входят и сотрудники компании, и посторонние лица.
Пусть в таблице Pers имеются записи на сотрудников «Иванов» и «Петров», причем Петров является членом совета, а Иванов — нет.
В таблице Chef имеются записи на членов совета «Петров» и «Сидоров», причем Сидоров — не сотрудник компании.
Задание 11. Выполните оператор левого объединения
SELECT * FROM Pers LEFT OUTER JOIN Chef ON Pers.Fam = Chef.Fam
получите результат вида:
Поля таблицы Pers | Поля таблицы Chef | ||
Иванов | …………… | ||
Петров | ……………. | Петров | ……………. |
Замечание. Оператор задает левое объединение таблицы Pers (ее имя указано после ключевого слова FROM) с таблицей Chef (ее имя указано после ключевых слов LEFT OUTER JOIN).
Условие объединения указано после ключевого слова ON и заключается в совпадении фамилий.
Как видно из таблицы, результат включает все поля и таблицы Pers, и таблицы Chef. Число строк соответствует числу записей таблицы Pers. В строках, относящихся к записям, для которых в Chef не нашлось соответствие, поля таблицы Chef остаются пустые.
Задание 12. Выполните оператор правого объединения
SELECT * FROM Pers RIGHT OUTER JOIN Chef ON Pers.Fam = Chef.Fam
получите результат вида:
Поля таблицы Pers | Поля таблицы Chef | ||
Петров | | ……………. | Петров | ………….. |
Сидоров | …………… |
Число строк соответствует числу записей таблицы Chef.
В строках, относящихся к записям, для которых в Pers не нашлось соответствие, поля таблицы Pers остаются пустые.
Задание 13. Выполните оператор полного объединения
SELECT * FROM Pers FULL OUTER JOIN Chef ON Pers.Fam = Chef.Fam
получите результат вида:
Поля таблицы Pers | Поля таблицы Chef | ||
Иванов | ……………. | ||
Петров | …………….. | Петров | ……………. |
Сидоров | …………….. |
В нем к строкам, относящимся к таблице Pers, добавлены строки, относящиеся к таблице Chef, для которых не нашлось соответствия в таблице Pers.
Дата добавления: 2015-08-09; просмотров: 98 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Осваиваем работу с псевдонимами | | | ОБЩАЯ ХАРАКТЕРИСТИКА СРЕДНЕГО ВОЗРАСТА |