За последние 24 часа нас посетили 17829 программистов и 1627 роботов. Сейчас ищет 1581 программист ...

Реляционная алгебра - Join и деление

Тема в разделе "PHP и базы данных", создана пользователем glorsh66, 6 янв 2018.

  1. glorsh66

    glorsh66 Активный пользователь

    С нами с:
    9 июл 2017
    Сообщения:
    247
    Симпатии:
    4
    Я не прошу за меня решить задачки)
    Я просто не могу понять - как правильно обозночать и использовать и как соотносить Join SQL и join из реляционной алгебры.
    Я разобрался с более простыми операциями - объединение, пересечение, вычитание, выборка и процецирование. но с джоинами не нашел нормального объяснения (тета-джоины, квази-джоины, натуральные джоины.... и все во всех статья сразу ударяются в множества подмножества из которых я даже половину знаков не знаю......) Или может кто сталкивался с похожим ступором и скинет хорошую статью или еще лучше на ютубе ролик

    С этим я уже ознакамливался.
    https://m.habrahabr.ru/post/145381/



    Также может кто нибудь в двух словах объяснить реляционное деление (я так понял у них нет представления в sql) На всех ресурсах очень размазанное описание для докторов математических наук)☻


    В приложении задачи с которым я в ступоре.
    Я знаю как написать их на SQL но как на реляционной алгебре?
    Также как - реляционные знаки печатать на клавиатуре? Ну может есть спец символы через alt + число?
     

    Вложения:

    • Clipboard01.jpg
      Clipboard01.jpg
      Размер файла:
      631,9 КБ
      Просмотров:
      2
  2. glorsh66

    glorsh66 Активный пользователь

    С нами с:
    9 июл 2017
    Сообщения:
    247
    Симпатии:
    4
    Сделал вот такой шаблончик в SQL Fiddle
    http://sqlfiddle.com/#!9/a36e02/62/1


    И в ходе выполнения у меня возник вопрос - в чем различие двух таких запросов?
    Код (Text):
    1. -- Выбираем всех пользователей из москвы которые имеют задание
    2. select * from rd2,rd3,rd1
    3. where rd2.department_num = rd3.num
    4. and rd3.city='Москва'
    5. and rd2.user_num=rd1.user_num;
    Код (Text):
    1. -- Делаем тоже самое джоином
    2. select * from rd2
    3. inner join rd3 on rd2.department_num = rd3.num and rd3.city='Москва'
    4. inner join rd1 on rd2.user_num=rd1.user_num;
    В чем различие в работе SQL (по производительности что лучше? Я подозреваю что inner join? - и как правильно называются две эти операции? Ну вторая понятно что inner join, а первая тогда что? Это ведь не просто выборка с условиями (сравнение же проходит по полям которые выбираются, а не по прописанному руками значению)
    Есть ли вообще разница между двумя данными подходами??

    И вообще круто если кто то покажет как такое отобразить на языке реляционной алгебры.

    ПС -а как в SQL Fiddle делать подписи к табличкам? (если такое возможно)
     
    denis01 нравится это.
  3. glorsh66

    glorsh66 Активный пользователь

    С нами с:
    9 июл 2017
    Сообщения:
    247
    Симпатии:
    4
    Я так - понял прочитав умные книжки, что первый вариант это Умножение (картезианский продукт☻) с выборкой.
    (т.е. мы в начале выводим всем возможные комбинации всех всех таблиц, которые перечисленны)

    А второй вариант - это иннер join (и он выбирает только нужные поля? т.е. вначале полностью выводится таблица select * from rd2 а к ней уже присоединяются только нужные поля (т.е. вроде как быстрее должно работать, хотя с другой стороны он же в любом случае должен сделать обход всей таблицы что бы стравить значения в полях к которым присоедниняется..