Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
бд.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.92 Mб
Скачать

Операція перетину

Реляційна алгебра: A INTERSECT B.

Операція перетину отримує таблицю, до складу якої входять лише такі рядки, які зустрічаються одночасно і в таблиці А, і в таблиці B.

Приклад 9. Отримати список посад та номери відділів, в яких працюють та працювали співробітники:  SELECT e.job_id, department_id FROM employees e, jobs j WHERE e.job_id = j.job_id INTERSECT SELECT job_id, department_id  FROM job_history

Таблиця 10.12. Список посад та номери відділів, в яких працюють та працювали співробітники

JOB_ID

DEPARTMENT_ID

AC_ACCOUNT

110

AC_MGR

110

IT_PROG

60

MK_REP

20

SA_MAN

80

SA_REP

80

ST_CLERK

50

Операція різниці

Реляційна алгебра: A MINUS B.

Операція різниці отримує таблицю, до складу якої входять лише ті рядки з таблиці А, яких нема в таблиці B.

Приклад 10. Отримати список країн, в яких не розташовані відділення:  SELECT country_id, country_name  FROM countries MINUS SELECT c.country_id, country_name  FROM countries c, locations l WHERE c.country_id = l.country_id

Таблиця 10.13. Список країн, в яких не розташовані відділення

COUNTRY_ID

COUNTRY_NAME

AR

Argentina

BE

Belgium

DK

Denmark

EG

Egypt

FR

France

HK

HongKong

IL

Israel

KW

Kuwait

NG

Nigeria

ZM

Zambia

ZW

Zimbabwe

Операція поділу

Реляційна алгебра: A DIVIDEBY B.

Операція поділу таблиці A(a, b) на B(b) є таблиця C(a), що складається з рядків, які є частиною рядків з таблиці A, причому друга частина - це рядок з таблиці B. Кожний рядок з таблиці B входить як складова рядку в таблицю A.

Оператор SQL, що реалізує поділ відношень важко запам'ятати, тому дамо приклад еквівалентного перетворення виразів, що представляють суть запиту. Нехай таблиця A містить дані про історію посад співробітників, таблиця B містить список посад. Тоді розділити таблицю A на таблицю B означає в даному прикладі «Відібрати номери співробітників, які займали всі посади».

Приклад 11. Отримати список кодів співробітників, які займали всі посади:  SELECT DISTINCT jh1.employee_id FROM job_history jh1 WHERE (SELECT COUNT(*) FROM jobs) = (SELECT COUNT(DISTINCT(job_id)) FROM job_history jh2 WHERE jh1.employee_id = jh2.employee_id)

Таблиця 10.14. Список кодів співробітників, які займали всі посади

EMPLOYEE_ID

В нашому прикладі кількість посад - 19 і немає жодного співробітника, який займав таку велику кількість посад.

Операція декартового добутку

Реляційна алгебра: A TIMES B.

Операція декартового добутку отримує таблицю, що складається з рядків, які є конкатенацією (або злиттям) одного рядку першої таблиці та одного рядку другої таблиці.

Приклад 12. Отримати список можливих країн працевлаштування для співробітників:  SELECT e.first_name, e.last_name, c.country_name FROM countries c, employees e

Таблиця 10.15. Список можливих країн працевлаштування для співробітників

FIRST_NAME

LAST_NAME

COUNTRY_NAME

Ellen

Abel

Argentina

Sundar

Ande

Argentina

Mozhe

Atkinson

Argentina

David

Austin

Argentina

Hermann

Baer

Argentina

Shelli

Baida

Argentina

Amit

Banda

Argentina

Elizabeth

Bates

Argentina

...

При виконанні декартового добутку отримаємо 107*25 = 2675 рядків.