КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Унарные и бинарные операции реляционной алгебры.
Унарные операции:
Бинарные операции:
1. Выборка Смысл операции в том, что выбираются строчки, которые подходят по условию F. Попробуем из таблицы «Фрукты» выбрать все яблоки:
2. Проекция
Проекция показывает только те характеристики объектов, которые нам нужны. Если мы хоти увидеть только наименования фруктов, которые есть в магазине, проекция будет выглядеть следующим образом:
3. Произведение
Произведение – это сцепление строчек, то есть объектов таблицы, по принципу каждый с каждым. Безучастных не бывает :) Представим, что покупатели так и не смогли выбрать что-то конкретное и заказали какое-то количество каждого сорта фруктов:
4. Соединение
Соединение происходит по общему столбцу, соответственно поставленному условию. Соединим таблицу «Фрукты» с содержимым заказов при условии, что идентификационный номер фрукта в списке больше его номера в заказе. Получится полная бессмыслица конечно… :wacko: Короче смотрим:
Несмотря на абсурдность такого соединения, можно сказать, что если мы заказали фрукты с определенным номером, то получим в соответствие все фрукты что есть в списке с большим номером. 5. Эквисоединение
Соединение выполняется так же как и предыдущее, только значения общего столбца должны совпадать. Выполнив такое соединение мы узнаем в каком заказе какие фрукты находятся, так как получим напротив каждого номера его расшифровку:
Дальше было отмечено, что соединяя по равным значениям общих атрибутов можно получить эквисоединение, но это еще не все… ... и если посмотреть на эквисоединение, то наблюдается дублирование значений:
Зачем дублировать значения, когда можно их не дублировать :) Поэтому смотрим следующую операцию: 6. Естественное соединение
Выбрасываем из эквисоединения повторяющийся столбец и готово:
7. Полусоединение
Из двух таблиц полусоединение выделяет только те строчки первой таблицы, которые могли бы соединиться со строчками второй таблицы. Возьмем сотрудников. Они любят работать, но еще больше любят получать зарплату :whistle: Зарплата хранится в отдельной таблице, доступа к которой у них нет. А посмотреть то хочется!! :yes: И тогда хитрые сотрудники решают воспользоваться полусоединением, то есть выбрать себя в том случае, если их id соединился со строчкой в таблице зарплаты:
Итог – Сидорову не повезло :D 8. Левое внешнее соединение
Соединяя две таблицы левым внешним соединением, мы получим абсолютно все строчки из левой таблицы и только те, что соединились из правой. Если соединения не нашлось, напротив строки будет NULL, то есть пустота. Посмотрим, кто из сотрудников не получил зарплату?? :)
9. Правое внешнее соединение
На самом деле то же самое, если таблицы поменять местами :whistle: Можно привести еще одно замечательное свойство левого правого соединения – поиск ошибок при заполнении таблиц. Предположим, что целостность данных не поддерживается, а при заполнении таблицы с зарплатой неверно ввели код сотрудника:
Из соединения видно, что зарплату начислили сотруднику, который в фирму еще не устроился. Вот так легко найти ошибки при заполнении :yes: Про операции объединения, пересечения, разности и деления расскажу в следующей теме, а сейчас несколько замечаний: Замечание 1: Объединение и соединение – разные вещи. Соединение происходит по одному общему столбцу, а объединение предполагает, что таблицы одинаковые по структуре (то есть все столбцы однотипные). Если в таблицах по 3 столбца, то при соединении мы получим 6 столбцов (в естественном соединении – 5), а при объединении их так и останется три. Замечание 2: В MS Access допущена довольно серьёзная ошибка. Если посмотреть свойства связи при соединении двух таблиц, то там написано «параметры объединения». НЕ ВЕРЬТЕ ЭТОМУ!! :no: Это параметры соединения :yes: А вообще, тому, как на практике реализуются все приведенные операции, будет посвящена отдельная тема.
В этой теме будут рассмотрены операции для таблиц, совместимых по объединению. То есть таблицы должны быть абсолютно одинаковые по структуре – одинаковое число столбцов, одинаковые типы данных в соответствующих столбцах. К делению правда это не относится, потому что эта операция немного сложнее, чем кажется на первый взгляд. Зато непосредственно относится к трем операциям, приведенным в этой статье.
10. Объединение
Нет ничего проще, сначала перечисляем все строки первой таблицы, а потом все строки из второй. Только нужно помнить, что повторяющихся строк быть не должно:
11. Пересечение
В пересечение двух таблиц входят строки, которые есть и в первой и во второй таблицах:
12. Разность
При вычитании одной таблицы из другой, остаются только те строки первой таблицы, которых нет во второй:
И, наконец, последняя операция над таблицами, самая сложная для восприятия – деление :wacko: Для того чтобы показать как она работает, привожу следующий пример: 13. Деление
Когда одна таблица делится на другую, из первой таблицы выбираются те строки, которые подходят по шаблону значений строк второй таблицы. Возьмем пользователей сайта знакомств и параметры, которые удовлетворяют чьим-то вкусам:
Просто отличная база получилась :D Теперь поделим всех на рыжих и толстых :whistle:
В результате получим:
Алгоритм выполнения такой операции можно описать тремя формулами:
Здесь С = {Код_рольз., Ник, Пол, Возраст}, то есть разность атрибутов таблиц Пользователи и Характеристики. Все очень просто :rolleys:
|
|