Математика | ||||||||||||||||||||||
Основные принципы соединения
| ||||||||||||||||||||||
С помощью соединения можно получать данные из двух или нескольких таблиц на основе логических связей между ними(Если..то..). Соединения указывают, как Microsoft SQL Server 2005 должен использовать данные из одной таблицы для выбора строк из другой таблицы. Соединение определяет способ связывания двух таблиц в запросе следующим образом:
Внутреннее соединение можно задавать в предложениях FROM и WHERE. Внешнее соединение можно указывать только в предложении FROM. Условия соединения сочетаются с условиями поиска WHERE и HAVING для управления строками, выбранными из базовых таблиц, на которые ссылается предложение FROM. То, что условия соединения задаются в предложении FROM, помогает отделить их от условий поиска, которые могут быть заданы в предложении WHERE. Объединение рекомендуется задавать именно таким способом. Ниже приведен упрощенный синтаксис соединения с использованием предложения FROM стандарта SQL-92: FROM first_table join_type second_table [ON (join_condition)] Аргумент join_type задает тип соединения: внутренний, внешний или перекрестный. Аргумент join_condition определяет предикат, который будет вычисляться для каждой пары соединяемых строк. Ниже приведен пример предложения FROM с заданным соединением:
Ниже приведена простая инструкция SELECT, использующая это соединение:
Инструкция возвращает наименование продукта и сведения о поставщике для всех сочетаний запчастей, поставляемых компаниями с названиями на букву F и стоимостью продукта более 10 долларов. Если один запрос содержит ссылки на несколько таблиц, то все ссылки
столбцов должны быть однозначными. В предыдущем примере как таблица
Если имя столбца не дублируется в двух или более таблицах, указанных в запросе, то ссылки на него уточнять именем таблицы не обязательно. Это показано в предыдущем примере. Подобную инструкцию SELECT иногда трудно понять, поскольку в ней нет ничего, что указывало бы на таблицы, из которых берутся столбцы. Запрос гораздо легче читать, если все столбцы указаны с именами соответствующих таблиц. Запрос будет читаться еще легче, если используются псевдонимы таблиц, особенно когда имена таблиц сами должны уточняться именами базы данных и владельца. Ниже приведен тот же пример, но для того чтобы упростить чтение, используются псевдонимы таблиц, уточняющие названия столбцов.
В предыдущем примере условие соединения задается в предложении FROM, что является рекомендуемым способом. В следующем запросе это же условие соединения указывается в предложении WHERE:
Список выборки для соединения может ссылаться на все столбцы в соединяемых таблицах или на любое подмножество этих столбцов. Список выборки не обязательно должен содержать столбцы из каждой таблицы в соединении. Например, в соединении из трех таблиц связующим звеном между одной из таблиц и третьей таблицей может быть только одна таблица, при этом список выборки не обязательно должен ссылаться на столбцы средней таблицы. Хотя обычно в условиях соединения для сравнения используется оператор равенства (=), можно указать другие операторы сравнения или реляционные операторы, равно как другие предикаты. При обработке соединений в SQL Server механизм запросов выбирает наиболее эффективный метод обработки из нескольких возможных. Хотя при физическом выполнении различных объединений используется много разных оптимизаций, логическая последовательность имеет следующий вид:
Такая последовательность может иногда влиять на результаты запроса, если условия перемещаются между предложениями FROM и WHERE. Столбцы, используемые в условии соединения, не обязательно должны иметь одинаковые имена или одинаковый тип данных. Однако если типы данных не совпадают, то они должны быть совместимыми или допускать в SQL Server неявное преобразование. Если типы данных не допускают неявное преобразование, то условия соединения должны явно преобразовывать эти типы данных с помощью функции CAST. Большинство запросов, использующих соединение, можно переписать с помощью вложенных запросов и наоборот. Дополнительные сведения о вложенных запросах см. в разделе
|
||||||||||||||||||||||
Предложениями и замечаниями обращаться по адресу- vova1001@yandex.ru |