Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции по бд.doc
Скачиваний:
6
Добавлен:
01.05.2025
Размер:
4.79 Mб
Скачать

Обеспечение правильности результатов

При использовании составных операторов следует быть предельно внимательными. Например, если в составном операторе с использованием команды INTERSECT неправильно задать первый из операторов SELECT, в результате можно получить либо неполные, либо вообще неверные данные. Кроме того, всегда ли нужно исключать повторения, как это делает команда UNION, или наоборот, отображать все повторения, как это делает команда UNION ALL Необходимо ли видеть все строки, не входящие в результат второго запроса при использовании команды EXCEPT? Как видите, неправильно составленный составной запрос или неправильный порядок запросов, входящих в составной, легко может привести к неправильным результатам

Неполные данные при выводе тоже квалифицируются как неправильные данные.

Резюме

Вы ознакомились с принципами использования составных запросов. На всех предыдущих уроках операторы SQL содержали только по одному запросу. В составных запросах комбинируется несколько запросов, чтобы получить требуемое множество данных. Командами связывания запросов являются команды UNION, UNION ALL, INTERSECT И EXCEPT (или MINUS). При использовании UNION в результате присутствуют данные двух запросов без повторений совпадающих строк данных. При использовании UNION ALL выводятся результаты обоих запросов, не смотря на повторения данных. При использовании INTERSECT возвращаются совпадающие в двух запросах строки данных. А команда EXCEPT (или, что тоже самое, MINUS) используется тогда, когда необходимо получить результаты одного запроса, не представленные в другом. Составные запросы обеспечивают исключительную гибкость при составлении самых разных запросов, поскольку без использования составных запросов результирующие операторы могут получаться очень сложными.

 

  Вопросы и ответы

Как используются ссылки на столбцы в выражении ключевого слова GROUP BY при использовании этого ключевого слова в операторе составного запроса?

На столбцы можно ссылаться либо по именам, либо по их номерам в списке выбора, если в разных входящих в оператор запросах столбцы имеют разные имена.

Принцип работы команды EXCEPT понятен, но поменяется ли вывод, если поменять местами запросы, входящие в оператор составного запроса?

Да. При использовании EXCEPT или MINUS порядок запросов, входящих в составной запрос, оказывается очень важным. Не забывайте о том, что в этом случае возвращаются все строки первого запроса, не возвращаемые вторым. Изменение порядка запросов должно повлиять на результат.

Должны ли в составном запросе быть одинаковыми и типы данных, и длины столбцов, входящих в оператор запросов?

Нет. Одинаковыми должны быть только типы данных. Длины столбцов могут отличаться.

  Практикум

  Тесты

  1. Правильно ли составлены приведенные ниже составные запросы? Если нет, то что в них следует исправить? В операторах используются следующие таблицы EMPLOYEE_TBL И EMPLOYEE_PAY_TBL.

  • SELECT EMP_ID, LAST_NAME, FIRST_NAME FROM EMPLOYEE_TBL UNION SELECT EMP_ID, POSITION, DATE_HIRE

FROM EMPLOYEE_PAY_TBL;

  • SELECT EMP_ID FROM EMPLOYEE_TBL UNION ALL

SELECT EMP_ID FROM EMPLOYEE_PAY_TBL ORDER BY EMP_ID;

  • SELECT EMP_ID FROM EMPLOYEE_PAY_TBL INTERSECT

SELECT EMP_ID FROM EMPLOYEE_TBL ORDER BY 1; ???

  Упражнения

Выполните упражнения для таблиц.

  1. Запишите составной запрос, возвращающий имена всех покупателей (CUST_NAME), разместивших заказы.

  2. Запишите составной запрос, возвращающий имена всех покупателей (CUST_NAME), не разместивших заказы.