Программирование в Microsoft SQL Server 2000

Связывание таблиц

Разбить на страницы
Показывать лекцию целиком

Вы научитесь:

  • создавать внутренние связи с использованием панели диаграмм Diagram Pane;
  • создавать внутренние связи с использованием панели диаграмм SQL Pane;
  • связывать несколько таблиц с использованием панели диаграмм Diagram Pane;
  • связывать несколько таблиц с использованием панели SQL Pane;
  • создавать внешние связи с использованием панели диаграмм Diagram Pane;
  • создавать внешние связи с использованием панели SQL Pane;
  • создавать объединения (unions).
  • Использование фразы FROM

    Базовая структура фразы 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

  • Откройте конструктор запросов Query Designer для таблицы Oils, щелкнув правой кнопкой мыши на ее имени в рабочей панели Details Pane, указав на Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки).
  • Отобразите панель диаграмм Diagram Pane,щелкнув на кнопке Diagram Pane (Панель диаграмм) в панели инструментов конструктора запросов.
  • Нажмите кнопку Add Table (Добавить таблицу)в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит диалоговое окно Add Table (Добавление таблицы).
  • Выделите таблицу PlantTypes в списке таблиц и нажмите кнопку Add (Добавить). SQL Server добавит таблицу в запрос.
  • Нажмите Close (Закрыть), чтобы закрыть диалоговое окно Add Table (Добавление таблицы).
  • Щелкните на кнопке SQL Pane (Панель SQL)в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит панель SQL Pane.
  • Удалите
  • Щелкните на кнопке SQL Pane (Панель SQL)в панели инструментов конструктора запросов. (Нажмите ОК, если конструктор запросов Query Designer отобразит сообщение об ошибке в синтаксисе оператора SELECT.) Конструктор запросов Query Designer скроет панель SQL Pane.
  • Внимание! Когда вы открываете конструктор запросов Query Designer, базовым оператором SQL всегда является SELECT *. Выбор определенных столбцов в панели диаграмм Diagram Pane приводит к добавлению их в список столбцов. Эта возможность предусмотрена Microsoft.

  • В панели диаграмм Diagram Pane установите флажок рядом со столбцами OilID и OilName в таблице Oils, а также рядом со столбцом PlantType в таблице PlantTypes.
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит значения PlantType для каждого вида масла.
  • Свяжите две таблицы с использованием панели SQL Pane

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

  • Скройте панель SQL Paneи отобразите панель диаграмм Diagram Pane.
  • Нажмите кнопку Add Table (Добавить таблицу) в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит диалоговое окно Add Table (Добавление таблицы).
  • Выделите таблицу PlantTypes в списке таблиц и нажмите кнопку Add (Добавить). SQL Server добавит таблицу в запрос.
  • Нажмите кнопку Close (Закрыть), чтобы закрыть диалоговое окно Add Table (Добавление таблицы).
  • В панели диаграмм Diagram Pane щелкните на столбце PlantType в таблице PlantTypes, чтобы добавить столбец в запрос.
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов Query Designer, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит и столбец PlantPart, и столбец PlantType для каждого вида масла.
  • Свяжите несколько таблиц с использованием панели SQL Pane

  • Скройте панель диаграмм Diagram 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
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос.
  • Закройте окно конструктора запросов Query Designer.
  • Внешнее связывание

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

    Левое внешнее связывание возвращает все строки из левой таблицы во фразе 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 для таблицы Oils, щелкнув правой кнопкой мыши на ее имени в рабочей панели Details Pane, укажите на Open Table (Открытие таблицы) и выберите Return All Rows (Показать все строки).
  • Отобразите панель диаграмм Diagram Pane.
  • Нажмите кнопку Add Table (Добавить таблицу)в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит диалоговое окно Add Table (Добавление таблицы).
  • Выберите Cautions и OilCautions в списке таблиц, а затем нажмите кнопку Add (Добавить). Конструктор запросов Query Designer добавит таблицы в запрос.
  • Совет. Вы можете создавать левое внешнее связывание для двух таблиц. Здесь мы используем три таблицы, из которых таблица OilCautions действует как узловая, реализующая отношение много-ко-многим между таблицами Oils и Cautions.

  • Нажмите кнопку Close (Закрыть), чтобы закрыть диалоговое окно.
  • Совет. Вы можете перемещать таблицы в панели диаграмм Diagram Pane, чтобы добиться наилучшего отображения информации.

  • Щелкните на кнопке SQL Pane (Панель SQL)в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит панель SQL Pane.
  • Удалите
  • Щелкните на кнопке SQL Paneв панели инструментов конструктора запросов. (Нажмите ОК, если конструктор запросов Query Designer отобразит сообщение об ошибке в синтаксисе оператора SELECT.) Конструктор запросов Query Designer скроет панель SQL Pane.
  • Внимание! Когда вы открываете конструктор запросов Query Designer, базовым оператором SQL всегда является SELECT *. Выбор определенных столбцов в панели диаграмм Diagram Pane приводит к добавлению их в список столбцов. Эта возможность предусмотрена Microsoft.

  • В панели диаграмм Diagram Pane выберите столбцы OilID и OilName из таблицы Oils, а также столбец Caution из таблицы Cautions для вывода.
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит только те виды масла, для которых предусмотрены предостережения.
  • Выделите линию связи между таблицами Oils и OilCautions, щелкнув на ней, а затем щелкните на кнопке Properties (Свойства)в панели инструментов конструктора запросов Query Designer. Конструктор запросов Query Designer отобразит диалоговое окно Properties (Свойства) для связи.
  • Установите флажок All Rows From Oils (Все строки из Oils).
  • Примечание. Установка флажка All Rows From OilCautions (Все строки из OilCautions) приведет к созданию правой внешней связи, а установка обоих флажков приведет к созданию полной внешней связи.

  • Нажмите кнопку Close (Закрыть), чтобы закрыть диалоговое окно. Конструктор запросов Query Designer изменит линию связи. Чтобы отразить новую спецификацию связывания.
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит все строки в таблице Oils и отвечающие им значения из таблицы Cautions.
  • Создайте правую внешнюю связь с использованием панели SQL Pane

  • Скройте панель диаграмм Diagram 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
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит все строки из таблицы OilProperties, с соответствующими значениями из таблицы Oils.
  • Закройте окно конструктора запросов Query Designer.
  • Объединения

    Последним типом связывания является объединения. Объединения помещают результаты выполнения двух различных операторов SELECT в один набор строк. При внутреннем и внешнем связывании столбцы из двух таблиц размещаются построчно. Объединение размещает строки из двух таблиц в одном столбце, как если бы вы взяли два набора строк и получили единое их множество, в котором один набор располагается под другим. Фактический порядок строк в полученном результате определяется фразой ORDER BY.

    Синтаксис объединения отличается от синтаксиса связывания. Он имеет следующий вид:

    SELECT <список_столбцов> FROM <имя_таблицы>
    UNION [ALL]
    SELECT <список_столбцов> FROM <имя_таблицы>
    [ORDER BY <список_столбцов>]

    Вы можете добавить в запрос столько операторов UNION SELECT, сколько захотите (с учетом ограничения в 256 таблиц), но все операторы SELECT должны возвращать одно и то же количество столбцов одинаковых или совместимых типов и в одном и том же порядке. Первый оператор SELECT будет определять имена столбцов, а фраза ORDER BY последнего оператора SELECT будет определять порядок сортировки.

    По умолчанию SQL Server не допускает дублирования строк в результате выполнения запроса с объединением. Если вы, однако, укажете UNION ALL, дублирующиеся строки будут сохранены.

    Создайте объединение

  • Откройте конструктор запросов Query Designer, щелкнув правой кнопкой мыши на таблице Properties в рабочей панели Details Pane, укажите на Open Table (Открытие таблицы) и выберите Return All Rows (Показать все строки).
  • Отобразите панель SQL Pane.
  • Замените имеющийся оператор SQL следующим:
    SELECT	'PropertyTable' AS TableName, PropertyID AS ID,
    	Property AS Quality FROM Properties
    UNION
    SELECT	'OdorTable', OdorID, Odor FROM Odors
    ORDER BY	Quality
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer объединит результаты выполнения двух операторов
  • Краткое содержание

    Чтобы ... Используйте синтаксис оператора SELECT
    Создать внутреннее связывание SELECT ... FROM <таблица> INNER JOIN <таблица> ON <условие связывания>
    Связать несколько таблиц SELECT ... FROM <таблица> <оператор связывания> <таблица>ON <условие связывания> <оператор связывания> <таблица> ON <условие связывания>
    Создать правое внешнее связывание SELECT ... FROM <таблица> RIGHT OUTER JOIN <таблица> ON <условие связывания>
    Создать левое внешнее связывание SELECT ... FROM <таблица> LEFT OUTER JOIN <таблица> ON <условие связывания>
    Создать полное внешнее связывание SELECT ... FROM <таблица> FULL OUTER JOIN <таблица> ON <условие связывания>
    Создать объединение SELECT ... UNION [ALL] SELECT ... [ORDER BY <список_столбцов>]
    Страницы:

    Вы научитесь:

  • создавать внутренние связи с использованием панели диаграмм Diagram Pane;
  • создавать внутренние связи с использованием панели диаграмм SQL Pane;
  • связывать несколько таблиц с использованием панели диаграмм Diagram Pane;
  • связывать несколько таблиц с использованием панели SQL Pane;
  • создавать внешние связи с использованием панели диаграмм Diagram Pane;
  • создавать внешние связи с использованием панели SQL Pane;
  • создавать объединения (unions).
  • Использование фразы FROM

    Базовая структура фразы 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

  • Откройте конструктор запросов Query Designer для таблицы Oils, щелкнув правой кнопкой мыши на ее имени в рабочей панели Details Pane, указав на Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки).
  • Отобразите панель диаграмм Diagram Pane,щелкнув на кнопке Diagram Pane (Панель диаграмм) в панели инструментов конструктора запросов.
  • Нажмите кнопку Add Table (Добавить таблицу)в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит диалоговое окно Add Table (Добавление таблицы).
  • Выделите таблицу PlantTypes в списке таблиц и нажмите кнопку Add (Добавить). SQL Server добавит таблицу в запрос.
  • Нажмите Close (Закрыть), чтобы закрыть диалоговое окно Add Table (Добавление таблицы).
  • Щелкните на кнопке SQL Pane (Панель SQL)в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит панель SQL Pane.
  • Удалите
  • Щелкните на кнопке SQL Pane (Панель SQL)в панели инструментов конструктора запросов. (Нажмите ОК, если конструктор запросов Query Designer отобразит сообщение об ошибке в синтаксисе оператора SELECT.) Конструктор запросов Query Designer скроет панель SQL Pane.
  • Внимание! Когда вы открываете конструктор запросов Query Designer, базовым оператором SQL всегда является SELECT *. Выбор определенных столбцов в панели диаграмм Diagram Pane приводит к добавлению их в список столбцов. Эта возможность предусмотрена Microsoft.

  • В панели диаграмм Diagram Pane установите флажок рядом со столбцами OilID и OilName в таблице Oils, а также рядом со столбцом PlantType в таблице PlantTypes.
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит значения PlantType для каждого вида масла.
  • Свяжите две таблицы с использованием панели SQL Pane

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

  • Скройте панель SQL Paneи отобразите панель диаграмм Diagram Pane.
  • Нажмите кнопку Add Table (Добавить таблицу) в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит диалоговое окно Add Table (Добавление таблицы).
  • Выделите таблицу PlantTypes в списке таблиц и нажмите кнопку Add (Добавить). SQL Server добавит таблицу в запрос.
  • Нажмите кнопку Close (Закрыть), чтобы закрыть диалоговое окно Add Table (Добавление таблицы).
  • В панели диаграмм Diagram Pane щелкните на столбце PlantType в таблице PlantTypes, чтобы добавить столбец в запрос.
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов Query Designer, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит и столбец PlantPart, и столбец PlantType для каждого вида масла.
  • Свяжите несколько таблиц с использованием панели SQL Pane

  • Скройте панель диаграмм Diagram 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
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос.
  • Закройте окно конструктора запросов Query Designer.
  • Внешнее связывание

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

    Левое внешнее связывание возвращает все строки из левой таблицы во фразе 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 для таблицы Oils, щелкнув правой кнопкой мыши на ее имени в рабочей панели Details Pane, укажите на Open Table (Открытие таблицы) и выберите Return All Rows (Показать все строки).
  • Отобразите панель диаграмм Diagram Pane.
  • Нажмите кнопку Add Table (Добавить таблицу)в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит диалоговое окно Add Table (Добавление таблицы).
  • Выберите Cautions и OilCautions в списке таблиц, а затем нажмите кнопку Add (Добавить). Конструктор запросов Query Designer добавит таблицы в запрос.
  • Совет. Вы можете создавать левое внешнее связывание для двух таблиц. Здесь мы используем три таблицы, из которых таблица OilCautions действует как узловая, реализующая отношение много-ко-многим между таблицами Oils и Cautions.

  • Нажмите кнопку Close (Закрыть), чтобы закрыть диалоговое окно.
  • Совет. Вы можете перемещать таблицы в панели диаграмм Diagram Pane, чтобы добиться наилучшего отображения информации.

  • Щелкните на кнопке SQL Pane (Панель SQL)в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит панель SQL Pane.
  • Удалите
  • Щелкните на кнопке SQL Paneв панели инструментов конструктора запросов. (Нажмите ОК, если конструктор запросов Query Designer отобразит сообщение об ошибке в синтаксисе оператора SELECT.) Конструктор запросов Query Designer скроет панель SQL Pane.
  • Внимание! Когда вы открываете конструктор запросов Query Designer, базовым оператором SQL всегда является SELECT *. Выбор определенных столбцов в панели диаграмм Diagram Pane приводит к добавлению их в список столбцов. Эта возможность предусмотрена Microsoft.

  • В панели диаграмм Diagram Pane выберите столбцы OilID и OilName из таблицы Oils, а также столбец Caution из таблицы Cautions для вывода.
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит только те виды масла, для которых предусмотрены предостережения.
  • Выделите линию связи между таблицами Oils и OilCautions, щелкнув на ней, а затем щелкните на кнопке Properties (Свойства)в панели инструментов конструктора запросов Query Designer. Конструктор запросов Query Designer отобразит диалоговое окно Properties (Свойства) для связи.
  • Установите флажок All Rows From Oils (Все строки из Oils).
  • Примечание. Установка флажка All Rows From OilCautions (Все строки из OilCautions) приведет к созданию правой внешней связи, а установка обоих флажков приведет к созданию полной внешней связи.

  • Нажмите кнопку Close (Закрыть), чтобы закрыть диалоговое окно. Конструктор запросов Query Designer изменит линию связи. Чтобы отразить новую спецификацию связывания.
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит все строки в таблице Oils и отвечающие им значения из таблицы Cautions.
  • Создайте правую внешнюю связь с использованием панели SQL Pane

  • Скройте панель диаграмм Diagram 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
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит все строки из таблицы OilProperties, с соответствующими значениями из таблицы Oils.
  • Закройте окно конструктора запросов Query Designer.
  • Объединения

    Последним типом связывания является объединения. Объединения помещают результаты выполнения двух различных операторов SELECT в один набор строк. При внутреннем и внешнем связывании столбцы из двух таблиц размещаются построчно. Объединение размещает строки из двух таблиц в одном столбце, как если бы вы взяли два набора строк и получили единое их множество, в котором один набор располагается под другим. Фактический порядок строк в полученном результате определяется фразой ORDER BY.

    Синтаксис объединения отличается от синтаксиса связывания. Он имеет следующий вид:

    SELECT <список_столбцов> FROM <имя_таблицы>
    UNION [ALL]
    SELECT <список_столбцов> FROM <имя_таблицы>
    [ORDER BY <список_столбцов>]

    Вы можете добавить в запрос столько операторов UNION SELECT, сколько захотите (с учетом ограничения в 256 таблиц), но все операторы SELECT должны возвращать одно и то же количество столбцов одинаковых или совместимых типов и в одном и том же порядке. Первый оператор SELECT будет определять имена столбцов, а фраза ORDER BY последнего оператора SELECT будет определять порядок сортировки.

    По умолчанию SQL Server не допускает дублирования строк в результате выполнения запроса с объединением. Если вы, однако, укажете UNION ALL, дублирующиеся строки будут сохранены.

    Создайте объединение

  • Откройте конструктор запросов Query Designer, щелкнув правой кнопкой мыши на таблице Properties в рабочей панели Details Pane, укажите на Open Table (Открытие таблицы) и выберите Return All Rows (Показать все строки).
  • Отобразите панель SQL Pane.
  • Замените имеющийся оператор SQL следующим:
    SELECT	'PropertyTable' AS TableName, PropertyID AS ID,
    	Property AS Quality FROM Properties
    UNION
    SELECT	'OdorTable', OdorID, Odor FROM Odors
    ORDER BY	Quality
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer объединит результаты выполнения двух операторов
  • Краткое содержание

    Чтобы ... Используйте синтаксис оператора SELECT
    Создать внутреннее связывание SELECT ... FROM <таблица> INNER JOIN <таблица> ON <условие связывания>
    Связать несколько таблиц SELECT ... FROM <таблица> <оператор связывания> <таблица>ON <условие связывания> <оператор связывания> <таблица> ON <условие связывания>
    Создать правое внешнее связывание SELECT ... FROM <таблица> RIGHT OUTER JOIN <таблица> ON <условие связывания>
    Создать левое внешнее связывание SELECT ... FROM <таблица> LEFT OUTER JOIN <таблица> ON <условие связывания>
    Создать полное внешнее связывание SELECT ... FROM <таблица> FULL OUTER JOIN <таблица> ON <условие связывания>
    Создать объединение SELECT ... UNION [ALL] SELECT ... [ORDER BY <список_столбцов>]
    Вернуться к учебному плану