Справка по SQL | страница 13
Традиционные операции над множествами и оператор SELECT
Традиционные операции над множествами - это объединение, пересечение, разность и декартово произведение.
Декартово произведение
Ранее мы уже рассмотрели реализацию декартова произведения, перечисляя через запятую табличные выражения в предложении FROM (таблицы, представления, подзапросы). Кроме того, можно использовать еще одну явную операцию соединения:
>SELECT Laptop.model, Product.model
>FROM Laptop CROSS JOIN Product;
Напомним, что при декартовом произведении каждая строка из одной таблицы соединяется с каждой строкой второй таблицы. В результате количество строк результирующего набора равно произведению количества строк операндов декартова произведения. В нашем примере таблица Laptop содержит 5 строк, а таблица Product - 16. В результате получается 5*16 = 80 строк. Поэтому мы не приводим здесь результат выполнения этого запроса. Вы можете сами проверить это утверждение, выполнив приведенный выше запрос на учебной базе данных.
В чистом виде декартово произведение практически не используется. Оно, как правило, является промежуточным результатом выполнения операции горизонтальной проекции (выборки) при наличии в операторе SELECT предложения WHERE.
Объединение
Для объединения запросов используется служебное слово UNION:
UNION [ALL]
Оператор UNION объединяет выходные строки каждого из запросов в один результирующий набор. Если определен параметр ALL, то сохраняются все дубликаты выходных строк, в противном случае в результирующем наборе остаются только уникальные строки. Заметим, что можно связывать вместе любое число запросов. Кроме того, с помощью скобок можно менять порядок объединения.
При этом должны выполняться следующие условия:
* Количество выходных столбцов каждого из запросов должно быть одинаковым.
* Выходные столбцы каждого из запросов должны быть сравнимыми между собой (в порядке их следования) по типам данных.
* В результирующем наборе используются имена столбцов, заданные в первом запросе.
* Предложение ORDER BY применяется к результату соединения, поэтому оно может быть указано только в конце составного запроса.
Пример. Найти номера моделей и цены ПК и ПК-блокнотов:
>SELECT model, price
>FROM PC
>UNION
>SELECT model, price
>FROM Laptop
>ORDER BY price DESC;
model | price |
---|---|
1750 | 1200.0 |
1752 | 1150.0 |
1298 | 1050.0 |
1233 | 980.0 |
1321 | 970.0 |
1233 | 950.0 |
1121 | 850.0 |
1298 | 700.0 |
1232 | 600.0 |
1233 | 600.0 |
1232 | 400.0 |
1232 | 350.0 |
1260 | 350.0 |
Пример. Найти тип продукции, номер модели и цену ПК и ПК-блокнотов: