a. SELECT CUST_ID, CUST_NAME FROM CUSTOMER_TBL WHERE CUST_ID =

(SELECT CUST_ID FROM ORDERS_TBL WHERE ORD_NUM = ' 16C17' ) ;

6. SELECT EMP_ID, SALARY FROM EMPLOYEE_PAY_TBL WHERE SALARY BETWEEN '20000'

AND (SELECT SALARY

FROM EMPLOYEE_ID

WHERE SALARY = '40000');

B. UPDATE PRODUCTS_TBL SET COST = 1.15 WHERE CUST_ID =

(SELECT CUST_ID FROM ORDERS_TBL WHERE ORD_NUM = '32A132');

4. Каков будет результат выполнения следующего оператора?

DELETE FROM EMPLOYEE_TBL WHERE EMP_ID IN

(SELECT EMP_ID FROM EMPLOYEE_PAY_TBL};

Упражнения

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

EMPLOYEE TBL

ЕМР 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

Ключевое поле

EMPLOYEE_PA Y_ TBL

EMP ID POSITION DATE HIRE PAY RATE DATE LAST-RAISE

VARCHAR2 ( 9 ) VARCHAR2 (15) DATE NUMBER (4,2) DATE

NOT NULL NOT NULL

NOT NULL

Ключевое поле

CONSTRAINT EMP EMPLOYEEJTBL (]

FK FOREIGN KEY EMP_ID)

(EMP ID) REF

ERENCED

CUSTOMERS_TBL

CUST ID CUST NAME CUST ADDRESS CUST CITY CUST 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

Ключевое поле

ORDERS TBL

ORD NUM CUST ID PROD ID QTY ORD DATE

VARCHAR2 (10) VARCHAR2 (10) VARCHAR2 (10) NUMBER (6) DATE

NOT NULL NOT NULL NOT NULL NOT NULL

Ключевое поле

PRODUCTS_TBL

PROD ID PROD DESC COST

VARCHAR2 (10) VARCHAR2 (40) NUMBER (6, 2)

NOT NULL NOT NULL NOT NULL

Ключевое поле

1. Используя подзапрос, запишите оператор SQL, который в таблице CUSTOMER_TBL заменит имя заказчика, разместившего заказ с номером 23Е934, На DAVIDS MARKET.

2. Используя подзапрос, создайте запрос, возвращающий имена всех служащих, которые имеют более высокую зарплату, чем служащий по имени JOHN DOE, чей табельный номер 343559876.

3. Используя подзапрос, создайте запрос, возвращающий список всех товаров с ценой, превышающей среднюю цену всех имеющихся товаров.

<p>15-й час Объединение запросов</p>

Из этого урока вы узнаете, как объединить несколько запросов SQL в один с помощью команд UNION, UNION ALL, INTERSECT И EXCEPT. опять же особенности использования UNION, UNION ALL, INTERSECT и EXCEPT в случае используемой вами конкретной реализации SQL вы должны выяснить по соответствующей документации Основными на этом уроке будут следующие темы.

• Обзор команд для объединения запросов

• Когда следует использовать команды объединения запросов

• Использование GROUP BY с составными операторами

• Использование ORDER BY с составными операторами

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

Обычные и составные запросы

Обычный запрос состоит из одного оператора SELECT, а составной - из двух или более.

Составные запросы строятся с помощью определенных команд, позволяющих связать два запроса в один. Так, в следующем примере для этого используется команда UNION.

Например, оператор SQL может выглядеть следующим образом.

SELECT EMP_ID, SALARY, PAY_RATE

FROM EMPLOYEE_PAY_TBL

WHERE SALARY IS NOT NULL OR

PAY_RATE IS NOT NULL;

Тот же оператор с помощью UNION можно записать по-другому.

SELECT EMP_ID, SALARY

FROM EMPLOYEE_PAY_TBL

WHERE SALARY IS NOT NULL

UNION

SELECT EMP_ID, PAY_RATE

FROM EMPLOYEE_PAY_TBL

WHERE PAY_RATE IS NOT NULL;

Оба эти оператора возвратят данные об оплате труда всех служащих, для которых указана либо почасовая оплата, либо ставка.

В случае второго оператора в выводе будет присутствовать два столбца - EMP_ID и SALARY и нормы почасовой оплаты (PAY_RATE) тоже будут помещены ~ в столбец SALARY При использовании команды UNION названия (или псевдонимы) столбцов в выводе определяются первым из операторов SELECT

Зачем использовать составные запросы?
Перейти на страницу:

Похожие книги