Управл_данными / 12-join
.pdfПример 2
Для выполнения многократных запросов к одной таблице и возвращения данных в виде одного набора используется комбинированный запрос:
SELECT Name AS n
FROM cities
WHERE Name LIKE 'Т*'
UNION
SELECT Name AS n
FROM cities
WHERE Name LIKE '*ск'
UNION
SELECT Name AS n
FROM cities
WHERE Name > 'Ш'
ORDER BY n DESC
21
Пример 3.
То же – со сложным условием
Для сравнения приводится тот же самый запрос, использующий не оператор UNION, а несколько условий в предложении WHERE:
SELECT Name AS n
FROM cities
WHERE Name LIKE 'Т*'
OR Name LIKE '*ск'
OR Name > 'Ш'
ORDER BY n DESC
22
Пример 4 Разные поля одного типа
SELECT Name
FROM cities
UNION
SELECT RegionName
FROM cities
ORDER BY n DESC
Этот запрос нельзя превратить в простой SELECT со множественным условием
23
Правила применения запросов UNION
Запросы UNION очень просты в использовании. Но существует несколько правил, четко указывающих, что именно может быть объединено.
1)Запрос UNION должен включать два или более операторов SELECT, отделенных один от другого ключевым словом UNION (таким образом, если в запросе используется четыре оператора SELECT, должно быть использовано три ключевых слова UNION).
2)Каждый запрос в операторе UNION должен содержать одинаковое количество столбцов, или статистических функций
3)Поля должны быть перечислены в одном и том же порядке
4)Типы данных столбцов должны быть совместимыми.
Они не обязательно должны быть одного типа, но они должны быть того типа, который СУБД сможет однозначно преобразовать в один
!!Однако некоторые СУБД (например Access) позволяют смешивать типы (числа преобразуются в строки)
24
Пример 5. Два поля
Результат:
SELECT Фамилия , id
FROM Студент
WHERE Фамилия > 'Л'
UNION
SELECT Имя, id
FROM Студент
25
Пример 6
Access позволяет смешивать типы
Результат:
SELECT Фамилия AS n
FROM Студент
UNION
SELECT id AS n
FROM Студент
26
Включение или исключение повторяющихся строк
Запрос UNION автоматически удаляет все повторяющиеся строки из набора результатов запроса (иными словами, он ведет себя точно так же, как вели бы себя несколько предложений WHERE в одном операторе SELECT).
Таково поведение запроса UNION по умолчанию, но при желании вы можете изменить его.
Если требуется, чтобы возвращались все вхождения, включая повторяющиеся, следует использовать UNION ALL вместо оператора UNION.
27
Пример
SELECT Имя AS n FROM Студент UNION
SELECT Отчество AS n FROM Студент ORDER BY n;
SELECT Имя AS n FROM Студент UNION ALL
SELECT Отчество AS n FROM Студент ORDER BY n;
28
Сортировка результатов комбинированных запросов
Результат применения оператора SELECT сортируется с помощью предложения ORDER BY.
При комбинировании запросов посредством UNION только одно предложение ORDER BY может быть использовано
Предложение ORDER BY должно ставиться в конце - после заключительного оператора SELECT.
В действительности, не имеет смысла сортировать часть набора результатов одним способом, а часть
— другим, поэтому несколько предложений ORDER BY применять не разрешается.
29