Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Коннолли Т. -> "Базы данных. Проектирование, реализация и сопровождение. Теория и практика" -> 90

Базы данных. Проектирование, реализация и сопровождение. Теория и практика - Коннолли Т.

Коннолли Т., Бегг К. Базы данных. Проектирование, реализация и сопровождение. Теория и практика — М.: Вильямc, 2003. — 1440 c.
ISBN 5-8459-0527-3
Скачать (прямая ссылка): bazidannihpproekt2003.djv
Предыдущая << 1 .. 84 85 86 87 88 89 < 90 > 91 92 93 94 95 96 .. 683 >> Следующая


194

Часть II. Рряяі іионная модель и языки staffNo в конструкциях FROM/WHERE. Затем необходимо сформировать группы, состоящие из номера отделения и табельных номеров его работников, для чего следует применить конструкцию GROUP BY. Наконец, результирующая таблица должна быть отсортирована с помощью задания конструкции ORDER BY. Результаты выполнения запроса представлены а табл. 5,30.

Таблица 5.30. Результат выполнения запроса из примера 5.27

branchNo staffNo count

В003 SU14 1

В003 SG37 2

tJ005 SL41 1

BOOT SA9 1

Выполнение соединений

Соединение является подмножеством более общей комбинации данных двух таблиц, называемой декартовым произведением (см. раздел 4.1.2). Декартово произведение двух таблиц представляет собой другую таблицу, состоящую из всех возможных пар строк, входящих в состав обеих таблиц. Набор столбцов результирующей таблицы представляет собой все столбцы первой таблицы, за которыми следуют все столбцы второй таблицы. Если ввести запрос к двум таблицам без задания конструкции WHERE, результат выполнения запроса в среде SQL будет представлять собой декартово произведение этих таблиц. Кроме того, стандарт ISO предусматривает специальный формат оператора SELECT, позволяющий вычислить декартово произведение двух таблиц:

SELECT [DISTINCT | ALL] {* j colutmLls) tab'1 "Nam '-I CROSS JOIN CaisjeWame"

Еще раз рассмотрим пример 5.24, в котором соединение таблиц client и Viewing выполняется с использованием общего столбца clientNo, При работе с таблицами, содержимое которых приведено в табл. 3.6 и 3.8, декартово произведение этих таблиц будет включать 20 строк (4 строки таблицы Client х 5 строк таблицы viewing = 20 строк). Это эквивалентно выдаче используемого в примере 5.24 запроса, но без применения конструкции WHERE.

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

1. Формируется декартово произведение таблиц, указанных в конструкции FROM.

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

3. Для каждой оставшейся строки определяется значение каждого элемента, указанного в списке выборки SELECT, в результате чего формируется отдельная строка результирующей таблицы.

4. Если в исходном запросе присутствует конструкция SELECT DISTINCT, из результирующей таблицы удаляются все строки-дубликаты. В реляционной

іГ па Ja 5. Язык SQL: манипулирование данными

195 алгебре действия, в лпилняе льг на 3 и 4 этапах, эквивалентны операции проекции по столбцам, заданным в списке выборки SELECT.

5. Если выполняемый запрос содержит конструкцию ORDER BY, осуществляется переупорядочивание строк результирующей таблицы.

Внешние соединения

При выполнении операции соединения данные из двух таблиц комбинируются с образованием пар связанных строк, в которых значения сопоставляемых столбцов являются одинаковыми. Если одно из значений в сопоставляемом столбце одной таблицы не совпадает ни с одним из значений в сопоставляемом столбце другой таблицы, то соотвртстъующая строка удаляется из результирующей таблицы. Именно это правило применялось во всех рассмотренных выше примерах соединения таблиц. Стандартом ISO предусмотрен и другой набор операторов соединений, называемых внешними соединениями (см. раздел 4.1.3). Во> внешнем соединении в результирующую таблицу помечаются также строки, не удовлетворяющие условию соединения. Чтобы понять особенности выполнения операций внешнего соединения, воспользуемся упрощенными таблицами Branch и PropertyForRent, содержимое которых представлено в табл. 5.31 и 5.32.

Таблица 5.31, Таблица Branchl

nranchNo ЬСі*у

ВооЗ Glasgow

В004 Bristol

В002 London

Таблица 5.32. Таблица Propertyf or Rent I propertyNo DCity

Aberdeen London

PGfl Glasgow

Обычное івнутргі ее) соединение этих таблиц выполняется с помошью следующего оператора SQL:

SELECT і * р *

FROM Branchl b, PropertyForRentl р WHERE b.bCity р.рСІСу

Результаты выполнения этого запроса представлены в табл. 5.33. Таблица 5.33. Результат внутреннего соединения упрощенных таблиц

branchNo

Branchl и PropertyForRentI hCity

KiropcrtyNo

oCity

В0С2

ВООЗ

Glasgow London

PL94

PG4

Glasgow London

196

Часть II. Реляционная модель и языки Как можно видеть, в результирующей таблице запроса имеются только две строки, содержащие одинаковые названия городов, выбранные из обеих таблиц. Обратите внимание, что в исходных данных нет соответствия для отделения компании в Глазго и для объекта, сдаваемого в аренду в городе Абердин. Если в результирующую таблицу потребуется включить и эти не имеющие соответствия строки, то следует использовать внешнее соединение. Существуют три типа внешнего соединения: левое, правое и полное. Рассмотрим особенности каждого из них на приведенных ниже примерах.
Предыдущая << 1 .. 84 85 86 87 88 89 < 90 > 91 92 93 94 95 96 .. 683 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100