Каковы возможные результаты при присоединении (внутренний, внешний, левый, правый) таблицы? - PullRequest
0 голосов
/ 21 сентября 2018

Таблица A имеет 10 записей, таблица B - 100 строк.Соотношение между А и В составляет 1: N.Каковы возможные результаты при присоединении к таблицам?Возможные ответы:

  1. 100 строк, используя A INNER JOIN B
  2. 10 записей, используя A LEFT JOIN B
  3. 10 записей, используя A RIGHT JOIN B
  4. 10 записей, используя A FULL OUTER JOIN B
  5. 100 записей, используя A FULL OUTER JOIN B
  6. Минимальное количество выходных строк 10
  7. Максимальноечисло выходных строк равно 1000

Как математик, использующий мои знания матриц, кажется, что ответ может быть а) но я не слишком уверен, любая помощь будет принята с благодарностью!

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

Самый простой способ думать о 1 ко многим - это страницы в книге.Итак, предположим, что таблица A - это список книг [книга 1], [книга 2], ..., [книга 10], а таблица B - список отдельных страниц текста в этих книгах, например, [книга 1 |текст на странице 1 книги 1], [книга 2 |текст на странице 1 книги 2], [книга 2 |текст на странице 2 книги 2].Мы будем держать таблицу A постоянной и варьировать таблицу B.

[1] и [5] были бы возможны, если бы, например, таблица B содержала первые 10 страниц текста для каждой книги в таблице A, скаждая страница в отдельной строке.

[2] было бы возможно, если бы, например, таблица B содержала первую страницу текста для каждой книги в таблице A и первые 90 страниц текста для книги 11 (нев таблице A).

[3] и [4] будет невозможно, так как результирующая таблица должна иметь размер, по крайней мере, размера таблицы B.

[6] зависит отприсоединиться к операции.Например, при внутреннем объединении, если никакие записи не совпадают (например, таблица B начинается со страниц из книги 11 и идет оттуда), то результат может быть равен 0.

[7] было бы невозможно, учитываяпараметр от 1 до многих.1000 было бы возможно, если бы каждая строка в таблице A соединялась с каждым элементом в таблице B, но для этого потребовалось бы объединить строку таблицы B с несколькими строками в таблице 1 (от многих ко многим).

0 голосов
/ 22 сентября 2018

Impaler дал вам правильное количество строк, в которых могут образовываться объединения.

Я бы хотел дать свои 5c для отношения 1: N.

Мы знаем такие отношенияот, скажем, отделов и сотрудников.Отдел может иметь много сотрудников;сотрудник работает только в одном отделе.

Может быть, просто, может быть, человек, задающий вопрос, имел в виду присоединения к внешнему ключу.В приведенном выше примере это будет некоторый идентификатор отдела.Для каждой записи в таблице B (сотрудники) мы найдем ровно одну запись в таблице A (отделы).И для каждого отдела мы можем найти несколько сотрудников.Но тогда 1: N является коротким для 1: {0, n} или 1: {1, n).

  • 1: {0, n} означает, что отдел может иметь ноль длямного сотрудников
  • 1: {1, n) означает, что в отделе может быть от одного до нескольких сотрудников

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

Таким образом, имеет большое значение, упомянул ли интервьюер отношение 1: N для размышлений о соединениях по внешнему ключу или нет.

В случае, когда мы всегда присоединяемся только квнешний ключ (идентификатор отдела в моем примере):

  1. 100 строк, используя A INNER JOIN B - Да, мы получим ровно 100 строк, то есть 100 сотрудников, каждый со своим отделом.
  2. 10 записей, используя A LEFT JOIN B - Нет, мы получим как минимум 100 строк, как при внутреннем соединении.Мы также можем получить отделы, в которых нет сотрудников, если 1: N означает 1: {0, n}.
  3. 10 записей, используя A RIGHT JOIN B - Нет, мы получим те же 100 строк, что и свнутреннее объединение
  4. 10 записей, используя A FULL OUTER JOIN B - Нет, мы получим те же 100 или более строк, что и с A LEFT JOIN B
  5. 100 записей, используя A FULL OUTERJOIN B - это возможно.Мы получим те же 100 или более строк, что и с A LEFT JOIN B. Таким образом, 100 строк возможно, но не гарантировано.
  6. Минимальное количество выходных строк равно 10 - Нет, мы получим от 100 до 109ряды (100, если во всех отделах есть сотрудники, 109, если только в одном отделе есть сотрудники).Опять же, вопрос в том, что на самом деле означает 1: N.
  7. Максимальное количество выходных строк равно 1000 - Нет, с внутренним и внешним объединениями по внешнему ключу мы получим от 100 до 109 строк.
0 голосов
/ 21 сентября 2018

ОК, я проигнорирую предложение:

Соотношение между А и В равно 1: N

, поскольку я действительно не понимаю, что это значит.Вот мой дубль:

#1 Wrong. Inner join can produce anywhere between 0 and 1000 rows.

#2 Wrong. Left join can produce anywhere between 10 and 1000 rows.

#3 Wrong. Right join can produce anywhere between 100 and 1000 rows.

#4 Wrong. Full outer join can produce anywhere between 100 and 1000 rows.

#5 Wrong. Full outer join can produce anywhere between 100 and 1000 rows.

#6 Wrong. Joins can produce anywhere between 0 and 1000 rows.

#7 Correct. Joins can produce anywhere between 0 and 1000 rows.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...