2013-02-15 1 views
0
  1. выберите ACCOUNT_NO, сумму, клиент от операций, где филиал = 'Pennywell'Как написать реляционную алгебру этих SQL запросов

  2. выберите c.customer_name, c.cust_street, c.cust_city, б. branch_name, b.branch_city, a.account_no, a.баланс от клиента c, транзакции t, учетные записи a, ветвь b , где t.customer = c.customer_name и a.account_no = t.account_no и b.branch_name = a.branch_name

  3. выберите customer_name, cust_city от клиента, где имя_пользователя отсутствует (выберите клиента из транзакции нс)

ответ

0

Первый из них только отбор на Pennywell с последующей проекцией на ACCOUNT_NO, количество, клиент:

\pi_{account_no, amount, customer} (\sigma_branch = 'Pennywell'(transactions)) 

Второй следует по тому же принципу:

  1. Список всех ваши столы:

клиентов, операции, счета, филиал

  1. Переименовать каждый из используя \ Rho:

\ rho_c (заказчик), \ rho_t (сделки), \ rho_a (счета) , \ rho_b (филиал)

  1. Вычислить декартово произведение

\ rho_c (клиент) х \ rho_t (сделки) х \ rho_a (счета) х \ rho_b (филиал)

  1. Выполните выбор ("где") на результат шаг 3 замены и конъюнкция, или с помощью дизъюнкции, а не отрицания:

\ sigma_ {t.customer = c.customer_name/\ a.account_no = t.account_no/\ b.branch_name = а .branch_name} (\ rho_c (с ustomer) х \ rho_t (сделки) х \ rho_a (счета) х \ rho_b (филиал))

  1. Наконец выполнить проекцию:

\ Pi_ {c.customer_name, с .cust_street, c.cust_city, b.branch_name, b.branch_city, a.account_no, a.balance} (\ sigma_ {t.customer = c.customer_name/\ a.account_no = t.account_no/\ b.branch_name = a ,branch_name} (\ rho_c (клиент) х \ rho_t (сделки) х \ rho_a (счета) х \ rho_b (филиал)))

Последний запрос является немного более сложным, и это включает в себя немного больше думать.

\ pi_ {customer_name} (сделки)

являются все клиенты, которые мы хотим игнорировать и

\ Pi_ {customer_name} (заказчик)

являются всех клиентов. Следовательно,

\ pi_ {customer_name} (заказчик) - \ pi_ {customer_name} (сделки)

все те, которые мы хотим сохранить. Наконец, мы должны найти свои города (для простоты я использую объединение оператора | х |):

\ Pi_ {CUSTOMER_NAME, cust_city} ((\ pi_ {customer_name} (заказчика) - \ pi_ {customer_name} (транзакции)) | x | клиент)

+0

пожалуйста, что означает значение | x | cos Я не понимаю – chidoskychidosky

+0

| x | является естественным оператором объединения. Из Википедии: «Результатом естественного объединения является совокупность всех комбинаций кортежей в R и S, которые равны по их общим именам атрибутов». –

 Смежные вопросы

  • Нет связанных вопросов^_^