WHERE (P.Dep=D.Dep)AND(D.Proisv='n')

В этом примере таблице Pers дан псевдоним Р, а таблице Dep - D. Конечно, эти псевдонимы действуют только в данном, операторе и не имеют никакого отношения к псевдонимам баз данных, которые мы постоянно используем.

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

SELECT pl.fam, p2.fam, pl.year_b FROM Pers pi, Pers p2 WHERE (pl.year_b = p2.year_b) AND (pi. fam != p2.fam)

В этом примере для таблицы Pers мы ввели два псевдонима: pi и р2. В конструкции WHERE мы ищем в этих якобы разных таблицах записи с одинаковым годом рождения. Второе условие pl.fam != p2.fam нужно, чтобы сотрудник не отображался в результатах как ровесник сам себя. Правда, приведенный оператор выдает в результате по две записи на каждую пару ровесников, сначала, например, «Николаев -Андреев», а потом «Андреев - Николаев». Чтобы исключить такое дублирование можно добавить еще одно условие - pl.Fam <

p2.Fam:

SELECT pl.fam, p2.fam,' pi.year_b FROM Pers pi, Pers p2 WHERE (pl.year_b = p2.year_b) AND (pi.fam != p2.fam) and(pi.Fam <

p2.Fam)

Дополнительное условие упорядочивает появление фамилий в pi и р2 и исключает дублирование результатов.

До сих пор мы рассматривали объединения, основанные на однозначном соответствии записей двух таблиц, когда каждой записи в первой таблице находилась соответствующая ей запись во второй таблице. Возможны и другие виды объединений, которые выдают записи независимо от того, есть ли соответствующее поле во второй таблице. Это внешние объединения (outer join). Их три типа: левое, правое и полное. Левое объединение (обозначается ключевыми словами LEFT OUTER JOIN ... ON) включает в результат все записи первой таблицы, даже те, для которых не имеется соответствия во второй. Правое объединение (обозначается ключевыми словами RIGHT OUTER JOIN ... ON) включает в результат все записи второй таблицы, даже если им нет соответствия в записях первой. Полное объединение (обозначается ключевыми словами FULL OUTER JOIN ... ON) включает в результат объединение записей обеих таблиц, независимо от их соответствия.

Пусть, например, у вас есть таблица сотрудников некоей компании Pers и есть таблица Chef, в которой занесены данные на членов совета директоров этой компании. В число членов совета входят и сотрудники компании, и посторонние лица. Для определенности положим, что в таблице Pers имеются записи на сотрудников «Иванов» и «Петров», причем Петров является членом совета, а Иванов - нет. В таблице Chef имеются записи на членов совета «Петров» и «Сидоров», причем Сидоров - не сотрудник компании. Тогда оператор

SELECT * FROM Pers LEFT OUTER JOIN Chef

ON Pers.Fam = Chef.Fam выдаст результат вида:

Поля таблицы Pers

Поля таблицы Chef

Иванов
J Петров Петров

Оператор задал левое объединение таблицы Per? (она указана после ключевого слова FROM) с таблицей Chef (она указана после ключевых слов LEFT OUTER JOIN). Условие объединения указано после ключевого слова ON и заключается в совпадении фамилий.


⇐Предыдущая страница| |Следующая страница ⇒

Язык SQL в Delphi 5



Новости за месяц

  • Январь
    2019
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс