Каково использование различных операций соединения?

Каково использование различных операций соединения в SQL? Как я хочу знать, почему нам нужны различные внутренние и внешние объединения?

5
задан Dharman 23 November 2019 в 14:24
поделиться

4 ответа

Единственный тип соединения, который вам действительно нужен, - это ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ . Любой другой тип соединения может быть переписан в терминах одного или нескольких левых внешних объединений и, возможно, некоторой фильтрации. Так зачем нам все остальные? Чтобы просто запутать людей? Не было бы проще, если бы был только один тип соединения?

Вы также можете спросить: почему оба a <= b и b> = a ? Разве они не делают то же самое? Разве мы не можем просто избавиться от одного из них? Это упростило бы жизнь!

Иногда проще поменять местами <= на > = вместо того, чтобы менять местами аргументы. Точно так же левое соединение и правое соединение - это одно и то же, только с переставленными операндами. Но, опять же, практично иметь оба варианта вместо того, чтобы требовать от людей писать свои запросы в определенном порядке.

Еще один вопрос, который вы могли бы спросить: в логике, почему у нас есть И , ИЛИ , НЕ , XOR , ] NAND , NOR и т. Д.? Все это можно переписать в терминах NAND s! Почему бы просто не иметь NAND ? Что ж, неудобно писать ИЛИ в терминах NAND s, и не так очевидно, какова цель - если вы напишете ИЛИ ], люди сразу понимают, что вы имеете в виду. Если вы напишете кучу NAND s, не будет очевидно, чего вы пытаетесь достичь.

Точно так же, если вы хотите выполнить ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ b , вы можете выполнить левое и правое соединение, удалить повторяющиеся результаты и затем объединить все. Но это боль, и поэтому есть сокращение.

Когда вы используете каждый из них? Вот упрощенное правило:

  • Если вам всегда нужна строка результата для каждой строки в таблице LEFT, используйте LEFT OUTER JOIN.
  • Если вам всегда нужна строка результата для каждой строки в ПРАВОЙ таблице, используйте ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ.
  • Если вам всегда нужна строка результатов для каждой строки в любой таблице, используйте ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ.
  • Если вам нужна только строка результата, когда есть строка в обеих таблицах, используйте INNER JOIN.
  • Если вам нужны все возможные пары строк, по одной строке из каждой таблицы, используйте CROSS JOIN.
6
ответ дан 14 December 2019 в 04:33
поделиться

внутреннее соединение - объединяет строки из обоих наборов соответствия на основе заданных критериев.

external join - выбирает все из одного набора вместе с совпадающими или пустыми (если не совпадают) элементами из другого набора. Внешние соединения могут быть левыми или правыми , чтобы указать, какой набор будет возвращен полностью.

1
ответ дан 14 December 2019 в 04:33
поделиться

В моем ответе предполагается, что 2 таблицы объединены одним ключом:

  • INNER JOIN - получить результаты, которые находятся в обеих объединить таблицы (согласно правилу соединения)
  • FULL OUTER JOIN - получить все результаты из обеих таблиц (декартово произведение)
  • LEFT OUTER JOIN - получить все результаты из левой таблицы и сопоставления результаты справа

Вы можете добавить предложения WHERE , чтобы еще больше ограничить результаты.

Используйте их, чтобы получить только то, что вы хотите .

0
ответ дан 14 December 2019 в 04:33
поделиться

Чтобы другие ответы были более ясными - ВЫ ПОЛУЧАЕТЕ РАЗНЫЕ РЕЗУЛЬТАТЫ в зависимости от выбранного вами соединения, например, когда столбцы, к которым вы присоединяетесь, содержат нулевые значения.

Итак - для каждого реального сценария существует подходящее соединение (либо вам нужны строки без данных, либо нет в примере с нулевыми значениями).

1
ответ дан 14 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: