Резюме
Вы ознакомились с принципами использования составных запросов. На всех предыдущих уроках операторы SQL содержали только по одному запросу. В составных запросах комбинируется несколько запросов, чтобы получить требуемое множество данных. Командами связывания запросов являются команды UNION, UNION ALL, INTERSECT И EXCEPT (или MINUS). При использовании UNION В результате присутствуют данные двух запросов без повторений совпадающих строк данных. При использовании UNION ALL выводятся результаты обоих запросов, не смотря на повторения данных. При использовании INTERSECT возвращаются совпадающие в двух запросах строки данных. А команда EXCEPT (или, что то же самое, MINUS) используется тогда, когда необходимо получить результаты одного запроса, не представленные в другом. Составные запросы обеспечивают исключительную гибкость при составлении самых разных запросов, поскольку без использования составных запросов результирующие операторы могут получаться очень сложными.
Вопросы и ответы
Как используются ссылки на столбцы в выражении ключевого словаGROUP BY при использовании этого ключевого слова в операторе составного запроса?
На столбцы можно ссылаться либо по именам, либо по их номерам в списке выбора, если в разных входящих в оператор запросах столбцы имеют разные имена.
Принцип работы командыEXCEPT понятен, но поменяется ли вывод, если поменять местами запросы, входящие в оператор составного запроса?
Да. При использовании EXCEPT или MINUS порядок запросов, входящих в составной запрос, оказывается очень важным. Не забывайте о том, что в этом случае возвращаются все строки первого запроса, не возвращаемые вторым. Изменение порядка запросов должно повлиять на результат.
Должны ли в составном запросе быть одинаковыми и типы данных, и длины столбцов, входящих в оператор запросов?
Нет. Одинаковыми должны быть только типы данных. Длины столбцов могут отличаться.
Практикум
Задания практических занятий разделены на тесты и упражнения. Тесты предназначены для проверки общего уровня понимания рассмотренного материала. Упражнения дают возможность применить на практике идеи, обсуждавшиеся в ходе текущего урока, в комбинации с идеями из предыдущих уроков. Мы рекомендуем ответить на тестовые вопросы и выполнить упражнения прежде, чем продолжать дальнейшее чтение книги. Ответы можно проверить по Приложению Б, "Ответы".
Тесты
1. Правильно ли составлены приведенные ниже составные запросы? Если нет, то что в них следует исправить? В операторах используются следующие таблицы EMPLOYEE PAY TBL И EMPLOYEE PAY TBL.
|
EMPLOYEE_TBL
|
|
|
|
|
EMP ID LAST NAME FIRST NAME MIDDLE NAME ADDRESS CITY STATE ZIP PHONE PAGER
|
VARCHAR2 ( 9 ) VARCHAR2 (15) VARCHAR2 (15) VARCHAR2 (15) VARCHAR2 (30) VARCHAR2 (15) CHAR ( 2 ) NUMBER (5) CHAR (10) CHAR (10)
|
NOT NULL NOT NULL NOT NULL
NOT NULL NOT NULL NOT NULL NOT NULL
|
|
CONSTRAINT EMP
|
_PK PRIMARY KEY
|
(EMP_ID)
|
|
|
|
EMPLOYEE PAY TBL
|
|
|
|
|
EMP ID POSITION DATE HIRE PAY RATE
|
VARCHAR2 ( 9 ) VARCHAR2 (15) DATE NUMBER (4,2)
|
NOT NULL NOT NULL
NOT NULL
|
Ключевое поле
|
DATE_LAST-RAISE DATE SALARY NUMBER(8,2) BONUS NUMBER(6,2)
CONSTRAINT EMP_FK FOREIGN KEY (EMP_ID) REFERENCED
EMPLOYEE_TBL (EMP_ID)
a. SELECT EMP_ID, LAST_NAME, FIRST_NAME FROM EMPLOYEEJTBL UNION SELECT EMP_ID, POSITION, DATE_HIRE
FROM EMPLOYEE_PAY_TBL;
6. SELECT EMP_ID FROM EMPLOYEEJTBL UNION ALL
SELECT EMP_ID FROM EMPLOYEE_PAY_TBL ORDER BY EMP_ID;
B. SELECT EMP_ID FROM EMPLOYEE_PAY_TBL INTERSECT
SELECT EMP_lD FROM EMPLOYEEJTBL ORDER BY 1;
2. Свяжите описания задач операторов с подходящими командами.
_______ Задача оператора ______________ Команда
а. Показать совпадающие данные UNION
б. Вернуть только те строки первого за- INTERSECT
проса, которым имеются эквивааенты UNION ALL
во втором запросе FXPFPT
в. Показать данные без повторений
г. Вернуть строки первого запроса, не
возвращаемые вторым
Упражнения
Выполните упражнения для следующих таблиц.
|
Задача оператора
|
Команда
|
|
а. Показать совпадающие данные
б. Вернуть только те строки первого запроса, которым имеются эквивааенты во втором запросе
в. Показать данные без повторений г. Вернуть строки первого запроса, не возвращаемые вторым
|
UNION
INTERSECT UNION ALL EXCEPT
|
|
CUSTOMER_TBL
|
|
|
|
|
|
CUST ID CUST NAME CUST ADDRESS CUST CITY COST STATE CUST ZIP CUST PHONE CUST_FAX
|
VARCHAR2 (10) VARCHAR2 (30) VARCHAR2 (20) VARCHAR2 (15) CHAR ( 2 ) NUMBER ( 5 ) NUMBER (10) NUMBER (10)
|
NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL
|
Ключевое поле
|
Читать дальше