Объединение двух или более запросов с помощью UNION
UNION – специальный оператор, с помощью которого можно из двух или более запросов построить единое результирующее множество, т.е. выходные данные одного запроса присоединяются к выходным данным другого запроса.
Основные правила при реализации операций над множествами
· запросы, соединяемые оператором UNION должны иметь одинаковое количество столбцов в предложении SELECT;
· возвращаемый комбинированный результат будет иметь заголовки столбцов первого предложения SELECT;
· тип данных каждого столбца должен быть совместим с типом данных соответствующего столбца другого запроса;
· по умолчанию режимом вывода для UNION является DISTINCT.
Пример 77
Задача.
Получить все записи о студентах, фамилии которых начинаются на букву 'М' или 'И'.
Решение.
SELECT NRecordBook,StName
FROM Student
WHERE SUBSTRING(StName,1,1)= 'М'
UNION
SELECT NRecordBook,StName
FROM Student
WHERE SUBSTRING[7](StName,1,1)= 'И'
Результат выполнения запроса.
Результатом выполнения этой операции будет вывод только уникальных имен студентов, ни одно имя не будет повторено дважды.
select StName
FROM Student
WHERE StName='Иванов И.И.'
UNION all
select StName
FROM Student
WHERE SUBSTRING(NRecordBook,6,1)='1'
После выполнения операции UNION ALL каждое имя будет выведено столько раз, сколько раз оно встречается в запросах.
Результат выполнения запроса.
Предложение ORDER BY в операциях над множествами может стоять только в последнем предложении запроса, при этом вместо имен столбцов используются их номера из предложения SELECT.
Пример 78
Задача.
Вывести всех студентов, у которых есть или отличные или хорошие оценки.
Решение.
SELECT StName ФИО, Mark Оценка
FROM Student s, Progress p
WHERE s.NRecordBook=p.NRecordBook
AND Mark=5
UNION
SELECT StName,Mark
FROM Student s,Progress p
WHERE s.NRecordBook=p.NRecordBook
AND Mark=4
ORDER BY 1
Результат выполнения запроса.
Задание 27
Используя операторы над множествами, вывести имена всех студентов, которые сдали экзамен по дисциплине Проектирование баз данных или по дисциплине Организация баз данных.
Вопросы для самоконтроля к лабораторной работе № 5
1. Что такое подзапрос?
2. В каких командах SQL могут быть использованы подзапросы?
3. Какой порядок выполнения подзапроса?
4. Когда невозможно использовать подзапрос?
5. Какой порядок выполнения коррелированных подзапросов?
6. В каких случаях подзапросы могут передать несколько строк в главное предложение?
7. Сколько раз выполняется основной запрос при реализации коррелированного подзапроса?
8. Где расположен подзапрос в логическом выражении предложения основного запроса: до оператора сравнения, после оператора сравнения?
9. Какие предложения допустимые для основного запроса не могут использовать в подзапросе?
10. Какие существуют типы подзапросов?
11. В каких командах SQL могут быть использованы подзапросы?
12. В каких предложениях SELECT могут быть использованы подзапросы?
13. Какие предложения SELECT нельзя использовать в подзапросах?
14. Где должен находиться подзапрос?
15. Какие операторы сравнения работают с несколькими строками?
16. Какие операторы сравнения работают только с одной строкой?
17. В каких подзапросах вложенная команда SELECT выполняется первой?
18. Какие подзапросы называются однострочными?
19. Какой принцип работы коррелированного подзапроса?
20. Какие требования предъявляются к таблицам, над которыми выполняются операторы union?