Базовая структура фразы FROM содержит имя одной таблицы или представления. Однако чтобы воспользоваться всей мощью реляционной модели, нужно иметь возможность извлекать столбцы из нескольких таблиц и представлений в одном запросе. Фраза FROM предоставляет механизм для осуществления этой операции с использованием следующего синтаксиса:
FROM <таблица_или_представление> <оператор_связывания> <таблица_или_представление> ON <условие_связывания>
Оператор связывания описывает тип выполняемого связывания. Microsoft SQL Server поддерживает внутреннее и внешнее связывание во всех их вариациях (см. урок 15).
Условие связывания представляет собой выражение, аналогичное условию отбора, используемого в фразе WHERE. Оно задает, как будут соответствовать строки в двух таблицах. Большинство операций связывания выполняются на основе выражений эквивалентности, таких как Column A = Column B. Однако SQL Server поддерживает любые логические операторы, а условие связывания может быть сколь угодно сложным, состоящим из нескольких выражений, соединенных с помощью логических операторов AND или OR. Таким же образом, как во фразе WHERE с несколькими условиями отбора.
Выражение связывания может быть повторено для добавления дополнительных таблиц и представлений в запрос. Синтаксис для связывания нескольких таблиц следующий:
FROM <таблица_или_вид> <оператор_связывания> <таблица_или_вид> ON <условие_связывания> <оператор_связывания> <таблица_или_вид> ON <условие_связывания> . . .
Имеется теоретическое ограничение в 256 таблиц на запрос, однако весьма маловероятно, что вам когда-либо понадобится более пяти или шести таблиц, а обычно используется два или три. На деле, если вы обнаружите, что вам требуется связать более десяти таблиц в одном запросе, внимательно изучите схему вашей базы данных, чтобы убедиться, что она корректно нормализована.
Связи могут быть созданы в конструкторе запросов Query Designer либо с использованием панели сетки Grid Pane, либо с использованием панели SQL Pane. Панелью сетки Grid Pane лучше пользоваться, если вы связываете таблицы, которые являются формально зависимыми в схеме базы данных, поскольку конструктор запросов будет создавать связь между ними автоматически. Альтернативой является применение панели SQL Pane, которая обеспечивает большую гибкость.
Имена объектов
Если вы работаете с единственной таблицей или представлением, у вас скорее всего не будет неопределенности относительно исходного столбца, поскольку все имена столбцов в таблице должны быть уникальными. Если же вы работаете с несколькими таблицами в запросе, вам следует проявлять осторожность при указании имен столбцов.
Полная спецификация для любого объекта базы данных определяется четырьмя идентификаторами: именем сервера, именем базы данных, именем владельца и именем объекта. Идентификаторы отделяются друг от друга точками. Таким образом, полное имя для таблицы Oils в моей системе будет следующим:
BUNNY.Aromatherapy.dbo.Oils
Некоторые объекты, такие как таблицы и представления, содержат другие объекты. Чтобы сослаться на один из таких объектов (в нашем случае, на столбцы), вы должны просто добавить его имя после имени объекта. Полное имя для столбца OilID таблицы Oils будет следующим:
BUNNY.Aromatherapy.dbo.Oils.OilID
К счастью, чтобы избежать двусмысленности, вам достаточно задать лишь часть иерархии. В запросе, основанном на единственной таблице, например, имени столбца само по себе будет достаточно для идентификации. Если же запрос связывает более одной таблицы, и таблицы содержат столбцы с одинаковыми именами, вы должны включить имя таблицы в имя объекта: Oils.OilID OilProperties.OilID делают различия вполне очевидными.
Наиболее распространенной формой связывания является внутреннее связывание. Внутреннее связывание возвращает только те строки, для которых условие связывания имеет значение TRUE.
Свяжите две таблицы с использованием панели диаграмм Diagram Pane
щелкнув на кнопке Diagram Pane (Панель диаграмм) в панели инструментов конструктора запросов.
в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит диалоговое окно Add Table (Добавление таблицы).

в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит панель SQL Pane.
в панели инструментов конструктора запросов. (Нажмите ОК, если конструктор запросов Query Designer отобразит сообщение об ошибке в синтаксисе оператора SELECT.) Конструктор запросов Query Designer скроет панель SQL Pane.Внимание! Когда вы открываете конструктор запросов Query Designer, базовым оператором SQL всегда является SELECT *. Выбор

в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит значения PlantType для каждого вида масла.
Свяжите две таблицы с использованием панели SQL Pane
и отобразите панель SQL Pane,
щелкнув на кнопках в панели инструментов конструктора запросов.
SELECT на следующий:SELECT Oils.OilID, Oils.OilName, PlantParts.PlantPart FROM Oils INNER JOIN PlantParts ON Oils.PlantPartID = PlantParts.PlantPartID

в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит значения PlantPart таблицы Oils для каждой строки.
Свяжите несколько таблиц с использованием панели диаграмм Diagram Pane
и отобразите панель диаграмм Diagram Pane.




в панели инструментов конструктора запросов Query Designer, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит и столбец PlantPart, и столбец PlantType для каждого вида масла.
Свяжите несколько таблиц с использованием панели SQL Pane
и отобразите панель SQL Pane.
SELECT следующим:SELECT Oils.OilID, Oils.OilName, Odors.Odor FROM Oils INNER JOIN OilOdors ON Oils.OilID = OilOdors.OilID INNER JOIN Odors ON OilOdors.OdorID = Odors.OdorID

в панели инструментов конструктора запросов, чтобы исполнить запрос.
Иногда вам надо, чтобы запрос возвращал все строки из одной или более таблиц, независимо от того, имеют ли они соответствующие строки в другой таблице. Это осуществляется с помощью внешнего связывания, которое может быть левым, правым и полным.
Левое внешнее связывание возвращает все строки из левой таблицы во фразе JOIN и только те строки из правой таблицы, для которых условие связывания истинно (имеет значение TRUE ). Синтаксис для левого связывания следующий:
FROM ЛеваяТаблица LEFT OUTER JOIN ПраваяТаблица ON <условие_связывания>
Например, оператор SELECT, представленный ниже, возвращает все строки в таблице Oils, отвечающие значениям PlantPart из таблицы PlantParts, для которых задан PlantPartID. Если отвечающих значениям строк в таблице PlantParts нет, запрос возвратит NULL в качестве значения PlantPart для строки.
SELECT Oils.OilName, PlantParts.PlantPart FROM Oils LEFT OUTER JOIN PlantParts ON Oils.PlantPartID = PlantParts.PlantPartID
Правое внешнее связывание является противоположностью левого внешнего связывания: оно возвращает все строки из правой таблицы в фразе JOIN и отвечающие условию значения из левой таблицы, в то время как полное внешнее связывание возвращает все строки из обеих таблиц, отвечающие условию.
Создайте левое внешнее связывание с использованием панели диаграмм Diagram Pane


в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит диалоговое окно Add Table (Добавление таблицы).
Совет. Вы можете создавать левое внешнее связывание для двух таблиц. Здесь мы используем три таблицы, из которых таблица OilCautions действует как узловая, реализующая отношение много-ко-многим между таблицами Oils и Cautions.

Совет. Вы можете перемещать таблицы в панели диаграмм Diagram Pane, чтобы добиться наилучшего отображения информации.
в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит панель SQL Pane.
в панели инструментов конструктора запросов. (Нажмите ОК, если конструктор запросов Query Designer отобразит сообщение об ошибке в синтаксисе оператора SELECT.) Конструктор запросов Query Designer скроет панель SQL Pane.Внимание! Когда вы открываете конструктор запросов Query Designer, базовым оператором SQL всегда является SELECT *. Выбор

в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит только те виды масла, для которых предусмотрены предостережения.
в панели инструментов конструктора запросов Query Designer. Конструктор запросов Query Designer отобразит диалоговое окно Properties (Свойства) для связи.

Примечание. Установка флажка All Rows From OilCautions (Все строки из OilCautions) приведет к созданию правой

в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит все строки в таблице Oils и отвечающие им значения из таблицы Cautions.
Создайте правую внешнюю связь с использованием панели SQL Pane
и отобразите панель SQL Pane
в конструкторе запросов.
SELECT на следующий:SELECT Oils.OilName, Properties.Property FROM Oils RIGHT OUTER JOIN OilProperties ON Oils.OilID = OilProperties.OilID INNER JOIN Properties ON OilProperties.PropertyID = Properties.PropertyID

в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит все строки из таблицы OilProperties, с соответствующими значениями из таблицы Oils.
Последним типом связывания является объединения. Объединения помещают результаты выполнения двух различных операторов SELECT в один набор строк. При внутреннем и внешнем связывании столбцы из двух таблиц размещаются построчно. Объединение размещает строки из двух таблиц в одном столбце, как если бы вы взяли два набора строк и получили единое их множество, в котором один набор располагается под другим. Фактический порядок строк в полученном результате определяется фразой ORDER BY.
Синтаксис объединения отличается от синтаксиса связывания. Он имеет следующий вид:
SELECT <список_столбцов> FROM <имя_таблицы> UNION [ALL] SELECT <список_столбцов> FROM <имя_таблицы> [ORDER BY <список_столбцов>]
Вы можете добавить в запрос столько операторов UNION SELECT, сколько захотите (с учетом ограничения в 256 таблиц), но все операторы SELECT должны возвращать одно и то же количество столбцов одинаковых или SELECT будет определять имена столбцов, а фраза ORDER BY последнего оператора SELECT будет определять порядок сортировки.
По умолчанию SQL Server не допускает дублирования строк в результате выполнения запроса с объединением. Если вы, однако, укажете UNION ALL, дублирующиеся строки будут сохранены.
Создайте объединение


SELECT 'PropertyTable' AS TableName, PropertyID AS ID, Property AS Quality FROM Properties UNION SELECT 'OdorTable', OdorID, Odor FROM Odors ORDER BY Quality

в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer объединит результаты выполнения двух операторов | Чтобы ... | Используйте синтаксис оператора SELECT |
|---|---|
| Создать внутреннее связывание | SELECT ... FROM <таблица> INNER JOIN <таблица> ON <условие связывания> |
| Связать несколько таблиц | SELECT ... FROM <таблица> <оператор связывания> <таблица>ON <условие связывания> <оператор связывания> <таблица> ON <условие связывания> |
| Создать правое внешнее связывание | SELECT ... FROM <таблица> RIGHT |
| Создать левое внешнее связывание | SELECT ... FROM <таблица> LEFT |
| Создать полное внешнее связывание | SELECT ... FROM <таблица> FULL |
| Создать объединение | SELECT ... UNION [ALL] SELECT ... [ORDER BY <список_столбцов>] |
Базовая структура фразы FROM содержит имя одной таблицы или представления. Однако чтобы воспользоваться всей мощью реляционной модели, нужно иметь возможность извлекать столбцы из нескольких таблиц и представлений в одном запросе. Фраза FROM предоставляет механизм для осуществления этой операции с использованием следующего синтаксиса:
FROM <таблица_или_представление> <оператор_связывания> <таблица_или_представление> ON <условие_связывания>
Оператор связывания описывает тип выполняемого связывания. Microsoft SQL Server поддерживает внутреннее и внешнее связывание во всех их вариациях (см. урок 15).
Условие связывания представляет собой выражение, аналогичное условию отбора, используемого в фразе WHERE. Оно задает, как будут соответствовать строки в двух таблицах. Большинство операций связывания выполняются на основе выражений эквивалентности, таких как Column A = Column B. Однако SQL Server поддерживает любые логические операторы, а условие связывания может быть сколь угодно сложным, состоящим из нескольких выражений, соединенных с помощью логических операторов AND или OR. Таким же образом, как во фразе WHERE с несколькими условиями отбора.
Выражение связывания может быть повторено для добавления дополнительных таблиц и представлений в запрос. Синтаксис для связывания нескольких таблиц следующий:
FROM <таблица_или_вид> <оператор_связывания> <таблица_или_вид> ON <условие_связывания> <оператор_связывания> <таблица_или_вид> ON <условие_связывания> . . .
Имеется теоретическое ограничение в 256 таблиц на запрос, однако весьма маловероятно, что вам когда-либо понадобится более пяти или шести таблиц, а обычно используется два или три. На деле, если вы обнаружите, что вам требуется связать более десяти таблиц в одном запросе, внимательно изучите схему вашей базы данных, чтобы убедиться, что она корректно нормализована.
Связи могут быть созданы в конструкторе запросов Query Designer либо с использованием панели сетки Grid Pane, либо с использованием панели SQL Pane. Панелью сетки Grid Pane лучше пользоваться, если вы связываете таблицы, которые являются формально зависимыми в схеме базы данных, поскольку конструктор запросов будет создавать связь между ними автоматически. Альтернативой является применение панели SQL Pane, которая обеспечивает большую гибкость.
Имена объектов
Если вы работаете с единственной таблицей или представлением, у вас скорее всего не будет неопределенности относительно исходного столбца, поскольку все имена столбцов в таблице должны быть уникальными. Если же вы работаете с несколькими таблицами в запросе, вам следует проявлять осторожность при указании имен столбцов.
Полная спецификация для любого объекта базы данных определяется четырьмя идентификаторами: именем сервера, именем базы данных, именем владельца и именем объекта. Идентификаторы отделяются друг от друга точками. Таким образом, полное имя для таблицы Oils в моей системе будет следующим:
BUNNY.Aromatherapy.dbo.Oils
Некоторые объекты, такие как таблицы и представления, содержат другие объекты. Чтобы сослаться на один из таких объектов (в нашем случае, на столбцы), вы должны просто добавить его имя после имени объекта. Полное имя для столбца OilID таблицы Oils будет следующим:
BUNNY.Aromatherapy.dbo.Oils.OilID
К счастью, чтобы избежать двусмысленности, вам достаточно задать лишь часть иерархии. В запросе, основанном на единственной таблице, например, имени столбца само по себе будет достаточно для идентификации. Если же запрос связывает более одной таблицы, и таблицы содержат столбцы с одинаковыми именами, вы должны включить имя таблицы в имя объекта: Oils.OilID OilProperties.OilID делают различия вполне очевидными.
Наиболее распространенной формой связывания является внутреннее связывание. Внутреннее связывание возвращает только те строки, для которых условие связывания имеет значение TRUE.
Свяжите две таблицы с использованием панели диаграмм Diagram Pane
щелкнув на кнопке Diagram Pane (Панель диаграмм) в панели инструментов конструктора запросов.
в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит диалоговое окно Add Table (Добавление таблицы).

в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит панель SQL Pane.
в панели инструментов конструктора запросов. (Нажмите ОК, если конструктор запросов Query Designer отобразит сообщение об ошибке в синтаксисе оператора SELECT.) Конструктор запросов Query Designer скроет панель SQL Pane.Внимание! Когда вы открываете конструктор запросов Query Designer, базовым оператором SQL всегда является SELECT *. Выбор

в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит значения PlantType для каждого вида масла.
Свяжите две таблицы с использованием панели SQL Pane
и отобразите панель SQL Pane,
щелкнув на кнопках в панели инструментов конструктора запросов.
SELECT на следующий:SELECT Oils.OilID, Oils.OilName, PlantParts.PlantPart FROM Oils INNER JOIN PlantParts ON Oils.PlantPartID = PlantParts.PlantPartID

в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит значения PlantPart таблицы Oils для каждой строки.
Свяжите несколько таблиц с использованием панели диаграмм Diagram Pane
и отобразите панель диаграмм Diagram Pane.




в панели инструментов конструктора запросов Query Designer, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит и столбец PlantPart, и столбец PlantType для каждого вида масла.
Свяжите несколько таблиц с использованием панели SQL Pane
и отобразите панель SQL Pane.
SELECT следующим:SELECT Oils.OilID, Oils.OilName, Odors.Odor FROM Oils INNER JOIN OilOdors ON Oils.OilID = OilOdors.OilID INNER JOIN Odors ON OilOdors.OdorID = Odors.OdorID

в панели инструментов конструктора запросов, чтобы исполнить запрос.
Иногда вам надо, чтобы запрос возвращал все строки из одной или более таблиц, независимо от того, имеют ли они соответствующие строки в другой таблице. Это осуществляется с помощью внешнего связывания, которое может быть левым, правым и полным.
Левое внешнее связывание возвращает все строки из левой таблицы во фразе JOIN и только те строки из правой таблицы, для которых условие связывания истинно (имеет значение TRUE ). Синтаксис для левого связывания следующий:
FROM ЛеваяТаблица LEFT OUTER JOIN ПраваяТаблица ON <условие_связывания>
Например, оператор SELECT, представленный ниже, возвращает все строки в таблице Oils, отвечающие значениям PlantPart из таблицы PlantParts, для которых задан PlantPartID. Если отвечающих значениям строк в таблице PlantParts нет, запрос возвратит NULL в качестве значения PlantPart для строки.
SELECT Oils.OilName, PlantParts.PlantPart FROM Oils LEFT OUTER JOIN PlantParts ON Oils.PlantPartID = PlantParts.PlantPartID
Правое внешнее связывание является противоположностью левого внешнего связывания: оно возвращает все строки из правой таблицы в фразе JOIN и отвечающие условию значения из левой таблицы, в то время как полное внешнее связывание возвращает все строки из обеих таблиц, отвечающие условию.
Создайте левое внешнее связывание с использованием панели диаграмм Diagram Pane


в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит диалоговое окно Add Table (Добавление таблицы).
Совет. Вы можете создавать левое внешнее связывание для двух таблиц. Здесь мы используем три таблицы, из которых таблица OilCautions действует как узловая, реализующая отношение много-ко-многим между таблицами Oils и Cautions.

Совет. Вы можете перемещать таблицы в панели диаграмм Diagram Pane, чтобы добиться наилучшего отображения информации.
в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит панель SQL Pane.
в панели инструментов конструктора запросов. (Нажмите ОК, если конструктор запросов Query Designer отобразит сообщение об ошибке в синтаксисе оператора SELECT.) Конструктор запросов Query Designer скроет панель SQL Pane.Внимание! Когда вы открываете конструктор запросов Query Designer, базовым оператором SQL всегда является SELECT *. Выбор

в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит только те виды масла, для которых предусмотрены предостережения.
в панели инструментов конструктора запросов Query Designer. Конструктор запросов Query Designer отобразит диалоговое окно Properties (Свойства) для связи.

Примечание. Установка флажка All Rows From OilCautions (Все строки из OilCautions) приведет к созданию правой

в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит все строки в таблице Oils и отвечающие им значения из таблицы Cautions.
Создайте правую внешнюю связь с использованием панели SQL Pane
и отобразите панель SQL Pane
в конструкторе запросов.
SELECT на следующий:SELECT Oils.OilName, Properties.Property FROM Oils RIGHT OUTER JOIN OilProperties ON Oils.OilID = OilProperties.OilID INNER JOIN Properties ON OilProperties.PropertyID = Properties.PropertyID

в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит все строки из таблицы OilProperties, с соответствующими значениями из таблицы Oils.
Последним типом связывания является объединения. Объединения помещают результаты выполнения двух различных операторов SELECT в один набор строк. При внутреннем и внешнем связывании столбцы из двух таблиц размещаются построчно. Объединение размещает строки из двух таблиц в одном столбце, как если бы вы взяли два набора строк и получили единое их множество, в котором один набор располагается под другим. Фактический порядок строк в полученном результате определяется фразой ORDER BY.
Синтаксис объединения отличается от синтаксиса связывания. Он имеет следующий вид:
SELECT <список_столбцов> FROM <имя_таблицы> UNION [ALL] SELECT <список_столбцов> FROM <имя_таблицы> [ORDER BY <список_столбцов>]
Вы можете добавить в запрос столько операторов UNION SELECT, сколько захотите (с учетом ограничения в 256 таблиц), но все операторы SELECT должны возвращать одно и то же количество столбцов одинаковых или SELECT будет определять имена столбцов, а фраза ORDER BY последнего оператора SELECT будет определять порядок сортировки.
По умолчанию SQL Server не допускает дублирования строк в результате выполнения запроса с объединением. Если вы, однако, укажете UNION ALL, дублирующиеся строки будут сохранены.
Создайте объединение


SELECT 'PropertyTable' AS TableName, PropertyID AS ID, Property AS Quality FROM Properties UNION SELECT 'OdorTable', OdorID, Odor FROM Odors ORDER BY Quality

в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer объединит результаты выполнения двух операторов | Чтобы ... | Используйте синтаксис оператора SELECT |
|---|---|
| Создать внутреннее связывание | SELECT ... FROM <таблица> INNER JOIN <таблица> ON <условие связывания> |
| Связать несколько таблиц | SELECT ... FROM <таблица> <оператор связывания> <таблица>ON <условие связывания> <оператор связывания> <таблица> ON <условие связывания> |
| Создать правое внешнее связывание | SELECT ... FROM <таблица> RIGHT |
| Создать левое внешнее связывание | SELECT ... FROM <таблица> LEFT |
| Создать полное внешнее связывание | SELECT ... FROM <таблица> FULL |
| Создать объединение | SELECT ... UNION [ALL] SELECT ... [ORDER BY <список_столбцов>] |
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.