При таком соединении выводятся все комбинации записей таблиц, при этом не требуется указание совпадающих значений полей, поэтому условие ON опускается.
В нормализованных базах данных перекрестные соединения чаще всего используются для получения списка всех возможных комбинаций записей двух таблиц, т.е. число записей итогового набора равняется произведения числа записей первой таблицы на число записей второй.
Например, с помощью перекрестного соединения можно перечислить все возможные способы поставки товаров в базе данных Northwind (поставлялась с MS SQL Server до появления AdventureWorks):
Оператор UNION объединяет результаты двух и более операторов SELECT и применяется в случае, когда данные нельзя получить при помощи одного запроса.
Для получения единого итогового набора данных необходимо написать отдельные операторы SELECT и объединить их при помощи оператора UNION, при этом, в отличие от соединения, записи в итоговый набор добавляются друг за другом:
SELECT ...
UNION [ALL]
SELECT ...
[,...]
По умолчанию повторяющиеся записи удаляются, для получения всех записей необходимо указать ключевое слово ALL. Необходимо также учитывать, что список полей, порядок и все их свойства должны быть одинаковы во всех используемых запросах.
Имена полей итогового набора берутся из первого запроса, поэтому создание псевдонимов полей выполняется в нем. Для получения отсортированного набора данных раздел ORDER BY указывается после последнего оператора SELECT.
Аналитическая выборка данных из базы данных опирается на возможности Transact-SQL создавать запросы, неразрывно связанных с агрегатными функциями:
· Count ([all | distinct] выражение | *) – количество значений в списке, отличных от NULL. При использовании символа * подсчитывается количество значений, включая значения NULL или повторяющиеся значения.
· Sum ([all | distinct] выражение) – сумма всех значений списка.
· Max ([all | distinct] выражение) –максимальное значение.
· Min ([all | distinct] выражение) – минимальное значение.
Ключевое слово all предписывает выполнять агрегирование всех записей в результирующем наборе данных, distinct – агрегирование только уникальных записей. По умолчанию используется all.
Например, вычисление средней цены товаров осуществляется с помощью следующего запроса:
SELECT AVG(ListPrice) FROM Production.Product
При выполнении агрегатной функции осуществляется объединение значений отдельного поля таблицы или части записей, после чего выполняется указанное агрегирование.
Агрегатная функция возвращает одно единственное значение, поэтому использование других имен полей в списке выборки запрещено.