Расширенные операторы в реляционной алгебре
Основное представление о реляционной модели и основных операторах в реляционной алгебре:
Реляционная модель
Основные операторы в реляционной алгебре
Расширенные операторы - это те операторы, которые могут быть производными от базовых операторов. В реляционной алгебре в основном есть три типа расширенных операторов:
- Присоединиться
- Пересечение
- Делить
Для понимания расширенных операторов используются отношения STUDENT, STUDENT_SPORTS, ALL_SPORTS и EMPLOYEE, которые показаны в Таблице 1, Таблице 2, Таблице 3 и Таблице 4 соответственно.
УЧЕНИК
ROLL_NO | НАЗВАНИЕ | АДРЕС | ТЕЛЕФОН | ВОЗРАСТ |
1 | баран | ДЕЛИ | 9455123451 | 18 |
2 | РАМЕШ | ГУРГАОН | 9652431543 | 18 |
3 | СУДЖИТ | РОХТАК | 9156253131 | 20 |
4 | СЮРЕШ | ДЕЛИ | 9156768971 | 18 |
Таблица 1
СТУДЕНТ_СПОРТ
ROLL_NO | ВИДЫ СПОРТА |
1 | Бадминтон |
2 | Крикет |
2 | Бадминтон |
4 | Бадминтон |
Таблица 2
ВСЕ ВИДЫ СПОРТА
ВИДЫ СПОРТА |
Бадминтон |
Крикет |
Таблица 3
РАБОТНИК
EMP_NO | НАЗВАНИЕ | АДРЕС | ТЕЛЕФОН | ВОЗРАСТ |
1 | баран | ДЕЛИ | 9455123451 | 18 |
5 | НАРЕШ | HISAR | 9782918192 | 22 |
6 | SWETA | РАНЧИ | 9852617621 | 21 год |
4 | СЮРЕШ | ДЕЛИ | 9156768971 | 18 |
Таблица 4
Пересечение (∩): Пересечение двух отношений R1 и R2 может быть вычислено только в том случае, если R1 и R2 совместимы с объединением (эти два отношения должны иметь одинаковое количество атрибутов, а соответствующие атрибуты в двух отношениях имеют один домен). Оператор пересечения, применяемый к двум отношениям, так как R1 ∩ R2, даст отношение с кортежами, которые находятся как в R1, так и в R2. Синтаксис:
Отношение1 ∩ Отношение2
Пример: Найдите человека, который является студентом или сотрудником - СТУДЕНТ ∩ СОТРУДНИК
В терминах основных операторов (объединение и минус):
СТУДЕНТ ∩ СОТРУДНИК = СТУДЕНТ + СОТРУДНИК - (СТУДЕНТ U СОТРУДНИК)
РЕЗУЛЬТАТ:
ROLL_NO | НАЗВАНИЕ | АДРЕС | ТЕЛЕФОН | ВОЗРАСТ |
1 | баран | ДЕЛИ | 9455123451 | 18 |
4 | СЮРЕШ | ДЕЛИ | 9156768971 | 18 |
Условное объединение (⋈ c ) : Условное объединение используется, когда вы хотите объединить два или более отношений на основе некоторых условий. Пример: выберите студентов, у которых ROLL_NO больше, чем EMP_NO сотрудников.
СТУДЕНТ ⋈ c STUDENT.ROLL_NO> EMPLOYEE.EMP_NO EMPLOYEE
Что касается основных операторов (перекрестное произведение и выбор):
σ (СТУДЕНТ.ROLL_NO> СОТРУДНИК.EMP_NO) (СТУДЕНТ × СОТРУДНИК)
РЕЗУЛЬТАТ:
ROLL_NO | НАЗВАНИЕ | АДРЕС | ТЕЛЕФОН | ВОЗРАСТ | EMP_NO | НАЗВАНИЕ | АДРЕС | ТЕЛЕФОН | ВОЗРАСТ |
2 | РАМЕШ | ГУРГАОН | 9652431543 | 18 | 1 | баран | ДЕЛИ | 9455123451 | 18 |
3 | СУДЖИТ | РОХТАК | 9156253131 | 20 | 1 | баран | ДЕЛИ | 9455123451 | 18 |
4 | СЮРЕШ | ДЕЛИ | 9156768971 | 18 | 1 | баран | ДЕЛИ | 9455123451 | 18 |
Equijoin (⋈): Equijoin - это частный случай условного соединения, когда между парой атрибутов выполняется только условие равенства. Поскольку значения двух атрибутов будут равны в результате Equijoin, в результате появится только один атрибут.
Пример: выберите студентов, у которых ROLL_NO равно EMP_NO сотрудников.
СТУДЕНТ⋈ СТУДЕНТ.ROLL_NO = СОТРУДНИК.EMP_NO СОТРУДНИК
Что касается основных операторов (перекрестное произведение, выбор и проекция):
∏ (STUDENT.ROLL_NO, STUDENT.NAME, STUDENT.ADDRESS, STUDENT.PHONE, STUDENT.AGE EMPLOYEE.NAME, EMPLOYEE.ADDRESS, EMPLOYEE.PHONE, EMPLOYEE> AGE) (σ (STUDENT.ROLL_NO = EMPLOYEE) × СОТРУДНИК))
РЕЗУЛЬТАТ:
ROLL_NO | НАЗВАНИЕ | АДРЕС | ТЕЛЕФОН | ВОЗРАСТ | НАЗВАНИЕ | АДРЕС | ТЕЛЕФОН | ВОЗРАСТ |
1 | баран | ДЕЛИ | 9455123451 | 18 | баран | ДЕЛИ | 9455123451 | 18 |
4 | СЮРЕШ | ДЕЛИ | 9156768971 | 18 | СЮРЕШ | ДЕЛИ | 9156768971 | 18 |
Естественное соединение (⋈): это частный случай равносоединения, в котором условие равенства выполняется для всех атрибутов с одинаковыми именами в отношениях R и S (отношения, к которым применяется операция соединения). При применении естественного соединения к двум отношениям нет необходимости явно писать условие равенства. Natural Join также вернет похожие атрибуты только один раз, так как их значение будет таким же в результирующем отношении.
Пример: выберите учащихся, чей ROLL_NO равен ROLL_NO из STUDENT_SPORTS, как:
СТУДЕНТ⋈СТУДЕНТ_СПОРТ
Что касается основных операторов (перекрестное произведение, выбор и проекция):
∏ (STUDENT.ROLL_NO, STUDENT.NAME, STUDENT.ADDRESS, STUDENT.PHONE, STUDENT.AGE STUDENT_SPORTS.SPORTS) (σ (STUDENT.ROLL_NO = STUDENT_SPORTS.ROLL_NO) (STUDENT × STUDENT_SPORTS))
РЕЗУЛЬТАТ:
ROLL_NO | НАЗВАНИЕ | АДРЕС | ТЕЛЕФОН | ВОЗРАСТ | ВИДЫ СПОРТА |
1 | баран | ДЕЛИ | 9455123451 | 18 | Бадминтон |
2 | РАМЕШ | ГУРГАОН | 9652431543 | 18 | Крикет |
2 | РАМЕШ | ГУРГАОН | 9652431543 | 18 | Бадминтон |
4 | СЮРЕШ | ДЕЛИ | 9156768971 | 18 | Бадминтон |
Естественное соединение по умолчанию является внутренним соединением, поскольку кортежи, не удовлетворяющие условиям соединения, не отображаются в наборе результатов. например; Кортеж, имеющий ROLL_NO 3 в STUDENT, не соответствует ни одному кортежу в STUDENT_SPORTS, поэтому он не был частью набора результатов.
Левое внешнее соединение (⟕): при применении соединения к двум отношениям R и S некоторые кортежи R или S не появляются в результирующем наборе, который не удовлетворяет условиям соединения. Но Left Outer Joins дает все кортежи R в результирующем наборе. Кортежи R, которые не удовлетворяют условию соединения, будут иметь значения NULL для атрибутов S.
Пример: выберите студентов, у которых ROLL_NO больше, чем EMP_NO сотрудников, а также сведения о других студентах.
STUDENT⟕ STUDENT.ROLL_NO> EMPLOYEE.EMP_NO EMPLOYEE
РЕЗУЛЬТАТ
ROLL_NO | НАЗВАНИЕ | АДРЕС | ТЕЛЕФОН | ВОЗРАСТ | EMP_NO | НАЗВАНИЕ | АДРЕС | ТЕЛЕФОН | ВОЗРАСТ |
2 | РАМЕШ | ГУРГАОН | 9652431543 | 18 | 1 | баран | ДЕЛИ | 9455123451 | 18 |
3 | СУДЖИТ | РОХТАК | 9156253131 | 20 | 1 | баран | ДЕЛИ | 9455123451 | 18 |
4 | СЮРЕШ | ДЕЛИ | 9156768971 | 18 | 1 | баран | ДЕЛИ | 9455123451 | 18 |
1 | баран | ДЕЛИ | 9455123451 | 18 | НОЛЬ | НОЛЬ | НОЛЬ | НОЛЬ | НОЛЬ |
Правое внешнее соединение (⟖): при применении соединения к двум отношениям R и S некоторые кортежи R или S не появляются в результирующем наборе, который не удовлетворяет условиям соединения. Но правое внешнее соединение дает все кортежи S в результирующем наборе. Кортежи S, которые не удовлетворяют условию соединения, будут иметь значения NULL для атрибутов R.
Пример: выберите студентов, у которых ROLL_NO больше, чем EMP_NO сотрудников, а также сведения о других сотрудниках.
STUDENT⟖ STUDENT.ROLL_NO> EMPLOYEE.EMP_NO EMPLOYEE
РЕЗУЛЬТАТ:
ROLL_NO | НАЗВАНИЕ | АДРЕС | ТЕЛЕФОН | ВОЗРАСТ | EMP_NO | НАЗВАНИЕ | АДРЕС | ТЕЛЕФОН | ВОЗРАСТ |
2 | РАМЕШ | ГУРГАОН | 9652431543 | 18 | 1 | баран | ДЕЛИ | 9455123451 | 18 |
3 | СУДЖИТ | РОХТАК | 9156253131 | 20 | 1 | баран | ДЕЛИ | 9455123451 | 18 |
4 | СЮРЕШ | ДЕЛИ | 9156768971 | 18 | 1 | баран | ДЕЛИ | 9455123451 | 18 |
НОЛЬ | НОЛЬ | НОЛЬ | НОЛЬ | НОЛЬ | 5 | НАРЕШ | HISAR | 9782918192 | 22 |
НОЛЬ | НОЛЬ | НОЛЬ | НОЛЬ | НОЛЬ | 6 | SWETA | РАНЧИ | 9852617621 | 21 год |
НОЛЬ | НОЛЬ | НОЛЬ | НОЛЬ | НОЛЬ | 4 | СЮРЕШ | ДЕЛИ | 9156768971 | 18 |
Полное внешнее соединение (⟗): при применении соединения к двум отношениям R и S некоторые кортежи R или S не появляются в результирующем наборе, который не удовлетворяет условиям соединения. Но полное внешнее соединение дает все кортежи S и все кортежи R в наборе результатов. Кортежи S, которые не удовлетворяют условию соединения, будут иметь значения NULL для атрибутов R и наоборот.
Пример: выберите студентов, у которых ROLL_NO больше, чем EMP_NO сотрудников, а также сведения о других сотрудниках и других учащихся.
STUDENT⟗ STUDENT.ROLL_NO> EMPLOYEE.EMP_NO EMPLOYEE
РЕЗУЛЬТАТ:
ROLL_NO | НАЗВАНИЕ | АДРЕС | ТЕЛЕФОН | ВОЗРАСТ | EMP_NO | НАЗВАНИЕ | АДРЕС | ТЕЛЕФОН | ВОЗРАСТ |
2 | РАМЕШ | ГУРГАОН | 9652431543 | 18 | 1 | баран | ДЕЛИ | 9455123451 | 18 |
3 | СУДЖИТ | РОХТАК | 9156253131 | 20 | 1 | баран | ДЕЛИ | 9455123451 | 18 |
4 | СЮРЕШ | ДЕЛИ | 9156768971 | 18 | 1 | баран | ДЕЛИ | 9455123451 | 18 |
НОЛЬ | НОЛЬ | НОЛЬ | НОЛЬ | НОЛЬ | 5 | НАРЕШ | HISAR | 9782918192 | 22 |
НОЛЬ | НОЛЬ | НОЛЬ | НОЛЬ | НОЛЬ | 6 | SWETA | РАНЧИ | 9852617621 | 21 год |
НОЛЬ | НОЛЬ | НОЛЬ | НОЛЬ | НОЛЬ | 4 | СЮРЕШ | ДЕЛИ | 9156768971 | 18 |
1 | баран | ДЕЛИ | 9455123451 | 18 | НОЛЬ | НОЛЬ | НОЛЬ | НОЛЬ | НОЛЬ |
Оператор деления (÷): Оператор деления A ÷ B может применяться тогда и только тогда, когда:
- Атрибуты B - это собственное подмножество атрибутов A.
- Отношение, возвращаемое оператором деления, будет иметь атрибуты = (Все атрибуты A - Все атрибуты B)
- Отношение, возвращаемое оператором деления, вернет те кортежи из отношения A, которые связаны с каждым кортежем B.
Рассмотрим отношение STUDENT_SPORTS и ALL_SPORTS, приведенное в Таблице 2 и Таблице 3 выше.
Чтобы применить оператор деления как
СТУДЕНТ_СПОРТ ÷ ВСЕ_СПОРТ
- Операция допустима, поскольку атрибуты в ALL_SPORTS являются правильным подмножеством атрибутов в STUDENT_SPORTS.
- Атрибуты в результирующем отношении будут иметь атрибуты {ROLL_NO, SPORTS} - {SPORTS} = ROLL_NO
- Кортежи в результирующем отношении будут иметь те ROLL_NO, которые связаны со всем кортежем B {Бадминтон, Крикет}. ROLL_NO 1 и 4 связаны только с бадминтоном. ROLL_NO 2 связан со всеми кортежами B. Таким образом, результирующее отношение будет:
ROLL_NO |
2 |
Обзор операторов реляционной алгебры
Вопросы по воротам за предыдущий год
http://quiz.geeksforgeeks.org/gate-gate-cs-2012-question-50/
http://quiz.geeksforgeeks.org/gate-gate-cs-2012-question-43/
Статья предоставлена Sonal Tuteja. Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше