|
Программирование >> Sql: полное руководство
Внутренняя структура объединения таблиц Для простых объединений таблиц довольно легко написать правильную инструкцию select на основе запроса, выраженного на обычном языке. И наоборот, глядя на инструкцию select, можно легко определить, что она делает. Однако если в объединении участвует много таблиц или используется сложное условие отбора, бывает не так-то просто понять, какую функцию выполняет та или иная инструкция select. По этой причине необходимо дать более точное определение понятию объединение . Умножение таблиц Объединение - это частный случай более общей комбинации данных из двух таблиц, известной под названием декартово произведение (или просто произведение) двух таблиц. Произведение двух таблиц представляет собой таблицу (называемую таблицей произведения), состоящую из всех возможных пар строк обеих таблиц Столбцами таблицы произведения являются все столбцы первой таблицы, за которыми следуют все столбцы второй таблицы. На рис. 7.11. изображен пример произведения двух маленьких таблиц. Таблица GIRLS
Таблица произведения Рис 7 п. Произведение двухтабтц/.
Если создать запрос к двум таблицам без предложения where, то таблица результатов запроса окажется произведением двух таблиц. Например, результатом запроса Показать все возможные комбинации служащих и городов SELECT NAME, CITY FROM SALESREPS, OFFICES будет произведение таблиц salesreps и offices, состоящее из всех возможных комбинаций служащий/город. Таблица результатов запроса будет иметь 50 строк (5 офи--ов * 10 служащих = 50 комбинаций). Обратите внимание на то, что для объединения двух упомянутых таблиц используется точно такая же инструкция select, но только с предложением where, содержащим условие сравнения связанных столбцов: Показать список служащих и городов, в которых они работают. SELECT NAME, CITY FROM SALESREPS, OFFICES WHERE REP OFFICE = OFFICE Два приведенных выше запроса указывают на важную связь между объединениями и произведением: Объединение двух таблиц является произведением этих таблиц, из которого удалены некоторые строки. Удаляются именно те строки, которые не удовлетворяют условию сравнения связанных столбцов (условию отбора) для данного объединения . Понятие произведения важно, так как оно входит в формальное определение правил выполнения многотабличных запросов на выборку, приведенное в следующем параграфе. Правила выполнения многотабличных запросов на выборку в табл. 7.1 представлены правила выполнения SQL-запроса на выборку, приведенные ранее в табл. 6.4 и расширенные для случая многотабличных запросов. Эти правила раскрывают смысл любой многотабличной инструкции select, в точности определяя процедуру, которая всегда позволяет получить правильный набор результатов запроса. !rt6nHua 7 I Правила выполнения многотабличного SQL-aanpocdHa выборку Таблица результатов запроса на выборку генерируется следующим образом: 1. Если запрос представляет собой запрос на объединение (union) инструкций select, для каждой из этих инструкций выполнить действия 2-5 и получить отдельную таблицу результатов. 2. Сформировать произведение таблиц, перечисленных в предложении from. Если в предложении from указана только одна таблица, то произведением будет она сама 3. Если имеется предложение where, применить заданное в нем условие отбора к каждой строке таблицы произведения и оставить в ней только те строки, для которых это условие выполняется, т.е. имеет значение true; строки, для которых условие отбора имеет значение false или null, - отбросить. 4 Для каждой из оставшихся строк вычислить значение каждого элемента в списке возвращаемых столбцов и создать одну строку таблицы результатов запроса При любой ссылке на столбец берется значение столбца для текущей строки. 5. Если указан предикат distinct, удалить из таблицы результатов запроса все повторяющиеся строки. 6. Если запрос является запросом на объединение (union) инструкций select, объединить результаты выполнения отдельных инструкций в одну таблицу результатов запроса. Удалить из нее повторяющиеся строки, если не указан преди}й1Т all. 7. EcjTH имеется предложение order by, отсортировать результаты запроса. Чтобы увидеть, как работает эта процедура, рассмотрим следующий запрос: Получить название компании и список всех заказов для клиента с идентификатором 2103. SELECT COMPANY, ORDER NUM, AMOUNT FROM CUSTOMERS, ORDERS WHERE CUST NUM = CUST AND CUST NUM = 2103 ORDER BY ORDER NUM COMPANY ORDER NUM AMOUNT Acme Mfg. 112963 $3,276.00 Acme Mfg. 112983 $702.00 Acme Mfg. 112987 $27,500.00 Acme Mfg. 113027 $4,104.00 Выполним действия, перечисленные в табл. 7.1: 1. Из таблицы customers (21 строка) и таблицы orders (30 строк) сформируем таблицу произведения, состоящую из 630 строк (все возможные комбинации строк из двух таблиц). 2. Применяя условие отбора, определенное в предложении where, отберем только те строки таблицы произведения, в которых идентификаторы клиентов одинаковые (cust num = cust) и равны заданному идентификатору (сизт = 2103) Останется только четыре строки, остальные 626 будут отброшены. 3. Из таблицы произведения выберем три столбца (company, order num и amount), указанных в предложении select, и получим таблицу результатов запроса, состоящую из четырех строк. 4. В соответствии с предложением order by отсортируем четыре строки по столбцу order num и получим окончательный результат. Очевидно, что ни одна реляционная СУБД не будет выполнять запрос подобным образом. Но цель определения, данного в табл. 7.1, заключается не в том, чтобы описать, как выполняется запрос в СУБД. Оно просто является определением понятия многотабличный запрос . Внешнее объединение таблиц * Операция объединения в SQL соединяет информацию из двух таблиц, формируя пары связанных строк из этих двух таблиц. Объединенную таблицу образуют пары тех строк из различных таблиц, у которых в связанных столбцах содержатся одинаковые значения. Если строка одной из таблиц не имеет пары, то объединение может привести к неожиданным результатам. Это иллюстрируют следующие далее запросы. Вывести список служащих и офисов, где они работают. SELECT NAME, REP OFFICE FROM SALESREPS NAME REP OFFICE
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |