
- •Семантическое моделирование данных: er-диаграммы
- •Реляционная модель данных: домены и отношения Общая характеристика реляционной модели данных
- •Типы данных – множество значений, множество операций
- •Простые типы данных
- •Структурированные типы данных
- •Ссылочные типы данных
- •Типы данных, используемые в реляционной модели
- •Отношения, атрибуты, кортежи отношения Определения и примеры
- •Свойства отношений
- •Первая нормальная форма
- •Реляционная модель данных: целостность
- •Целостность в реляционной модели данных
- •Реляционная модель данных: реляционная алгебра
- •Ограничения на операции
- •Соединение
- •Деление
- •Манипулирование реляционными данными
- •Реляционная модель данных: реляционное исчисление кортежей Реляционное исчисление
- •Исчисление кортежей
- •Реляционная алгебра и реляционное исчисление
- •Проектирование реляционных баз данных на основе принципов нормализации: функциональные зависимости
- •Проектирование реляционных баз данных на основе принципов нормализации: 1nf, 2nf, 3nf, bcnf Нормальная форма
- •Роль нормализации в проектировании реляционных баз данных
- •Нормальные формы
- •Первая нормальная форма (1nf)
- •Вторая нормальная форма (2nf)
- •Третья нормальная форма (3nf)
- •Нормальная форма Бойса — Кодда (bcnf)
- •Типы данных Transact-sql Типы данных (Transact-sql)
- •Типы данных
- •Преобразования типа Transact-sql Преобразование типов данных (компонент Database Engine)
- •Скалярные выражения Transact-sql
- •Логические выражения Transact-sql Логические операторы (Transact-sql)
- •Табличные выражения Transact-sql Табличные выражения
- •7.2.1. Предложение from
- •7.2.1.1. Соединённые таблицы
- •7.2.1.2. Псевдонимы таблиц и колонок
- •7.2.1.3. Подзапросы
- •7.2.1.4. Табличные функции
- •7.2.2. Предолжение where
- •7.2.3. Предложения group by и having
- •7.2.4. Обработка оконных функций
- •Обобщенные табличные выражения Transact-sql Применение обобщенных табличных выражений
- •With обобщенное_табличное_выражение (Transact-sql)
- •Рекомендации по созданию и использованию обобщенных табличных выражений
- •Рекомендации по созданию и использованию обобщенных табличных выражений
- •Рекомендации по созданию и использованию рекурсивных отв
- •Инструкции языка управления потоком Transact-sql Язык управления потоком (Transact-sql)
- •Сценарии и пакеты Transact-sql Сценарии языка Transact-sql
- •Инструкции языка описания данных Transact-sql Инструкции языка описания данных ddl (Transact-sql)
- •Инструкции alter (Transact-sql)
- •Инструкции create (Transact-sql)
- •Инструкции drop (Transact-sql)
- •Ограничения целостности Transact-sql
- •Инструкции языка обработки данных Transact-sql
- •Предложение for (Transact-sql)
- •Инструкции языка контроля доступа к данным Transact-sql
- •Хранимые процедуры Transact-sql Хранимые процедуры (компонент Database Engine)
- •Функции Transact-sql Основные сведения о пользовательских функциях
- •Триггеры Transact-sql Триггеры dml
- •Курсоры Transact-sql Курсоры
- •Использование простого курсора и синтаксиса
- •Индексы Transact-sql Индексы
- •Вторичный индекс path типа данных xml
- •Вторичный индекс value типа данных xml
- •Вторичный индекс property
- •Управление транзакциями в sql Server Инструкции транзакций (Transact-sql)
- •Журналирование в sql Server Журнал транзакций (sql Server)
- •Просмотр журнала ошибок sql Server
- •Управление безопасностью в sql Server
- •Массовый импорт и экспорт данных в sql Server Массовый импорт и экспорт данных (sql Server)
- •Методы массового импорта и экспорта данных
- •Файлы форматирования
- •Метаданные в sql Server Метаданные (службы Master Data Services)
- •Распределенные запросы и распределенные транзакции в sql Server Распределенные запросы
- •Распределенные транзакции Transact-sql
- •Распределенные запросы и распределенные транзакции
7.2.1.2. Псевдонимы таблиц и колонок
В сложных ссылках на таблицы, для дальнейших ссылок в остальной части запроса, могут быть использованы временные имена. Они называются псевдонимами таблиц.
Чтобы создать псевдоним таблицы, пишите
FROM ссылка_на_таблицу AS псевдоним
или
FROM ссылка_на_таблицу псевдоним
Ключевое слово AS является необязательным. Псевдоним может быть любым идентификатором.
Типичное применение псевдонимов таблиц состоит в назначении длинным именам таблиц коротких идентификаторов, чтобы сделать последующие предложения соединений более читабельными. Например:
SELECT * FROM some_very_long_table_name s JOIN another_fairly_long_name a ON s.id = a.num;
Псевдоним даёт новое имя ссылающееся на ту же таблицу в текущем запросе — поэтому где-либо ещё в текущем запросе не разрешается ссылаться на таблицу по первоначальному имени. Таким образом, вот это неправильно:
SELECT * FROM my_table AS m WHERE my_table.a > 5; -- ошибка
Псевдонимы таблиц, в основном, используются для целей сокращения и лучшей читабельности текста запроса, но они бывают необходимы, когда необходим выполнить соединение таблицы с собой же, например:
SELECT * FROM people AS mother JOIN people AS child ON mother.id = child.mother_id;
Кроме того, псевдноним также требуется, если ссылка на таблицу является подзапросом (см. Section 7.2.1.3).
Скобки используются для того, чтобы избежать путаницы. В следующем примере, первый оператор назначает псевдоним b для второй таблицы my_table, а второй оператор назначает псевдоним результату соединения:
SELECT * FROM my_table AS a CROSS JOIN my_table AS b ...
SELECT * FROM (my_table AS a CROSS JOIN my_table) AS b ...
Другая форма псевдонимов таблиц даёт временные имена колонкам таблицы, точно также как и для самой таблицы:
FROM ссылка_на_таблицу [AS] псевдоним ( колонка1 [, колонка2 [, ...]] )
Вначале, указываются псевдонимы колонок, затем обычые колонки таблицы, оставшиеся колонки не переименовываются. Такой синтаксис особенно полезен для подзапросов соединений таблиц с самими собой.
Когда к результатам предложения JOIN применяется псевдоним, то этот псевдоним скрывает первоначальные имена внутри JOIN. Например:
SELECT a.* FROM my_table AS a JOIN your_table AS b ON ...
является правильным SQL запросом, но:
SELECT a.* FROM (my_table AS a JOIN your_table AS b ON ...) AS c
неправильный запрос: псевдоним таблицы a не виден за пределами псевдонима c.
7.2.1.3. Подзапросы
Подзапросы, предоставляющие на выходе таблицу, должны быть заключены в круглые скобки и им должен быть назначен псевдоним таблицы. (См. Section 7.2.1.2.) Например:
FROM (SELECT * FROM table1) AS alias_name
Этот пример эквивалентен FROM table1 AS alias_name. Когда подзапрос выполняет группировку или агрегирование, возникают более интересные случаи, которые не могут быть представлены как простое соединение таблиц.
Подзапрос также можте быть списком VALUES:
FROM (VALUES ('anne', 'smith'), ('bob', 'jones'), ('joe', 'blow'))
AS names(first, last)
И снова требуется псевдоним таблицы. Назначение имён псевдонимов для колонок списка VALUES необзяталеьно, но является хорошим тоном. Подробности см. в Section 7.7.