logo search
Лабы базы Данных / Базы данных / Введение в модель данных SQL

Примеры запросов с использованием предиката between

SELECT EMP_NO, EMP_NAME, EMP_SAL

FROM EMP

WHERE EMP_SAL BETWEEN 12000.00 AND 15000.00;

Пример 14.5. Найти номера, имена и размер зарплаты служащих, получающих зарплату в размере от 12000 до 15000 руб. (html, txt)

SELECT EMP_NO, EMP_NAME, EMP_SAL

FROM EMP

WHERE EMP_SAL BETWEEN

(SELECT AVG(EMP1.EMP_SAL)

FROM EMP EMP1

WHERE EMP.DEPT_NO = EMP1.DEPT_NO)

AND

(SELECT EMP1.EMP_SAL

FROM EMP EMP1

WHERE EMP1.EMP_NO =

(SELECT DEPT.DEPT_MNG

FROM DEPT

WHERE DEPT.DEPT_NO = EMP.DEPT_NO));

Пример 14.6. Найти номера, имена и размер зарплаты служащих, получающих зарплату, размер которой не меньше средней зарплаты служащих своего отдела и не больше зарплаты руководителя отдела. (html,txt)

В этом запросе можно выделить три интересных момента. Во-первых, диапазон значений предиката BETWEEN задан двумя подзапросами, результатом каждого из которых является единственное значение. Первый подзапрос выдает единственное значение, поскольку в списке выборки содержится агрегатная функция (AVG) и отсутствует раздел GROUP BY, а второй - потому что в его разделе WHERE присутствует условие, задающее единственное значение первичного ключа. Во-вторых, в обоих подзапросах таблица EMP получает псевдоним EMP1 (в формулировке этого запроса мы старались использовать как можно меньше вспомогательных идентификаторов). Поскольку подзапросы выполняются независимо один от другого, использование общего имени не вызывает проблем. Наконец, в условии второго подзапроса присутствует более глубоко вложенный подзапрос, и в условии его раздела WHERE используется ссылка на столбец таблицы из самого внешнего раздела FROM.