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

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

SELECT DEPT_NO

FROM DEPT

WHERE UNIQUE

(SELECT EMP_NAME, EMP_BDATE

FROM EMP

WHERE EMP.DEPT_NO = DEPT.DEPT_NO);

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

Возможна альтернативная, но более сложная формулировка этого запроса с использованием предиката NOT EXISTS (пример 14.18.1):

SELECT DEPT_NO

FROM DEPT

WHERE NOT ESISTS

(SELECT *

FROM EMP, EMP EMP1

WHERE EMP1.EMP_NO <> EMP.EMP_NO

AND EMP.DEPT_NO = DEPT.DEPT_NO

AND EMP1.DEPT_NO = DEPT.DEPT_NO

AND EMP1.EMP_NAME = EMP.EMP_NAME

AND(EMP1.EMP_BDATE = EMP.EMP_BDATE

OR (EMP.EMP_BDATE IS NULL

AND EMP1.EMP_BDATE IS NULL)));

Пример 14.18.1. (html,txt)

Если же ограничиться требованием уникальности имен служащих, то возможна следующая формулировка (пример 14.18.2):

SELECT DEPT_NO

FROM DEPT

WHERE (SELECT COUNT (EMP_NAME)

FROM EMP

WHERE EMP.DEPT_NO = DEPT.DEPT_NO) =

(SELECT COUNT (DISTINCT EMP_NAME)

FROM EMP

WHERE EMP.DEPT_NO = DEPT.DEPT_NO);

Пример 14.18.2. (html,txt)