|
MS SQL Server - Расширенные объединения TSQL
Расширенные объединения TSQL находятся в секции WHERE. В объединениях TSQL оператор сравнения используется для столбцов объединяемых таблиц или для выражений, содержащих столбцы:
SELECT * FROM titles, titleauthor
WHERE titles.title_id = titleauthor.title_id
Если между таблицами отсутствует оператор сравнения, выполняется ортогональное объединение. Внутренние объединения выполняются с помощью стандартных операторов сравнения между столбцами. Для внешних объединений в SQL Server существуют специальные операторы сравнения: *= используется для левых внешних объединений, а =* — для правых внешних объединений.
ВАЖНО!
В расширениях TSQL не существует оператора для выполнения полного внешнего объединения. При попытке воспользоваться оператором *=* выдается сообщение об ошибке.
В расширенных объединениях TSQL действуют некоторые ограничения. Например, если таблица использовалась в качестве внешней во внешнем объединении, она может быть внутренней таблицей внешнего или внутреннего объединения.
Расширенные объединения TSQL продемонстрированы в нескольких примерах. Первая команда выполняет ортогональное объединение:
SELECT * FROM titles t, titleauthor ta
Возвращаются все записи из таблиц title и titleauthor. Общее число возвращаемых записей равно количеству записей в title, умноженному на количество записей в titleauthor. Следующая команда выполняет внутреннее объединение:
SELECT * FROM titles t, titleauthor ta
WHERE t.title_id = ta.title_id
Команда возвращает только те записи, в которых содержимое title_id совпадает в таблицах titles и titleauthor. Последний пример демонстрирует внешнее объединение:
SELECT * FROM titles t, titleauthor ta
WHERE t.title_id *= ta.title_id -- внешнее объединение
Команда возвращает все записи titles даже в том случае, если для title_id не находится соответствующего значения title_id в таблице titleauthor. Расширенные объединения TSQL являются традиционным способом связывания таблиц; новые команды SQL рекомендуется записывать в стандарте ANSI.
|