|
Программирование >> Sql: полное руководство
girls и две копии таблицы parents: одна для объединения с таблицей boys с целью получения имен отцов, а вторая для объединения с таблицей girls с целью получения имен матерей). То, что в объединениях данного примера могут присутствовать несвязанные строки, означает существование нескольких возможных правильных ответов на запрос. Например, допустим, что вам нужно включить в результаты запроса все пары девочка/мальчик из одних и тех городов, даже те, в которых либо мальчик, либо девочка не имеют связанных строк с таблицей parents. В этом запросе придется использовать два внешних объединения - между таблицами boys и parents, а также таблицами girls и parents, - и одно внутреннее: между таблицами boys и girls Согласно стандарту SQL2, этот запрос будет выглядеть следующим образом: SELECT GIRLS.NAME, MOTHERS.PNAME, BOYS.NAME, FATHERS.PNAME FROM (GIRLS LEFT JOIN PARENTS AS MOTHERS ON ((MOTHERS.CHILD = GIRLS.NAME) AND (MOTHERS.TYPE = MOTHER ))) INNER jriN (BOYS LEFT JOIN PARENTS AS FATHERS ON ((FATHERS.CHILD = BOYS.NAME) AND (FATHERS.TYPE = FATHER ))) USING (CITY) В этом запросе проблема проверки столбца type в предложении where решена по-другому: сама проверка перемещена в предложение on обеих операций объединения. В этом случае столбец type будет проверяться на этапе построения каждого объединения, когда строки, расширенные значениями null, еще не добавлены в таблицу результатов запроса. Поскольку таблица parents встречается в предложениях from дважды в разных ролях, необходимо назначить ей два псевдонима, чтобы в предложении select можно было указать правильные столбцьь Как видно из примера, даже запрос с тремя объединениями в соответствии со стандартом SQL2 может иметь весьма сложный вид. Однако, несмотря на эту сложность, запрос по стандарту SQL2 точно и однозначно определяет то, что должна выполнить СУБД. Нет никакой неясности в отношении порядка объединения таблиц или в отношении того, какие объединения являются внешними, а какие - внутренними. В общем, новые возможности стоят дополнительных сложностей расширенного предложения from стандарта SQL2. Предложения where и order by могут свободно использоваться с расширенным предложением from. Связь между ними простая и остается такой, какой она была описана в табл. 7.1. Сначала выполняются операции, указанные в предложении from, включая все объединения или запросы на объединение. Условия объединения, заданные в предложении using или on, вьютупают как часть конкретного объединения, по отношению к которому они определены. Когда выполнение операций в предложении from заканчивается, к таблице результатов применяются условия отбора, заданные в предложении where. Таким образом, в предложении on задаются условия отбора, применяемые к отдельным объединениям; в предложении where задается условие отбора, которое применяется к результирующей таблице этих объединений. Резюме в настоящей главе рассмотрены запросы SQL, объединяющие данные из двух или более таблиц Имена таблиц, из которых берутся данные, задаются в предложении from многотабличного запроса (объединения) ш Каждая строка таблицы результатов запроса объединяет по одной строке из каждой исходной таблицы и является единственной строкой, содержащей комбинацию данных строк В многотабличных запросах чаще всего используются отнощения предок/потомок, существующие между первичными и внещними ключами В общем случае объединения можно создавать путем сравнения любых пар столбцов из двух объединяемых таблиц, используя условие равенства или любое другое условие сравнения Объединение можно представить как произведение двух таблиц, из которого удалена часть строк Таблицу можно объединять саму с собой, при самообъединении необходимо использовать псевдоним таблицы Внешнее объединение является расширением стандартного (внутреннего) объединения, сохраняющим в таблице результатов запроса несвязанные строки одной или обеих исходных таблиц, при этом отсутствующие ячейки заполняются значениями NULL Стандарт SQL2 обеспечивает полную поддержку внутренних и внешних объединений и позволяет объединять результаты нескольких объединений при выполнении многотабличных операций ft Итоговые запросы на выборку
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |