В чем разница между левым, правым, внешним и внутренним соединениями?

Вам нужно отдать URLConnection на HttpURLConnection и указать ему, чтобы он не выполнял переадресацию, установив HttpURLConnection#setInstanceFollowRedirects() на false. Вы также можете установить его глобально с помощью HttpURLConnection#setFollowRedirects() .

Вам нужно только обработать переадресацию. Проверьте код ответа на HttpURLConnection#getResponseCode() , захватите заголовок Location с помощью URLConnection#getHeaderField() и затем запустите новый HTTP-запрос.

536
задан mwigdahl 24 March 2009 в 20:45
поделиться

5 ответов

LEFT JOIN и RIGHT JOIN типы OUTER JOIN с.

INNER JOIN значение по умолчанию - строки от обеих таблиц должны соответствовать условию объединения.

4
ответ дан Kruti Patel 24 March 2009 в 20:45
поделиться

Простой Пример : Позволяет говорят, что Вы имеете Students таблица, и Lockers таблица. В SQL первая таблица, которую Вы определяете в соединении, Students, таблица LEFT , и второй, Lockers, таблица RIGHT .

Каждый студент может быть присвоен блокировщику, таким образом, существует LockerNumber столбец в Student таблица. Больше чем один студент мог потенциально быть в единственном блокировщике, но особенно в начале учебного года, у Вас могут быть некоторые входящие студенты без блокировщиков и некоторых блокировщиков, которые не имеют никаких присвоенных студентов.

Ради этого примера, позволяет, говорят, что Вы имеете 100 студентов , 70 из которых имеют блокировщики. У Вас есть [в общей сложности 1 133] 50 блокировщиков , 40 из которых имеют по крайней мере 1 студента и 10 блокировщиков, не имеют никакого студента.

ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ эквивалентно" , показывают мне всех студентов с блокировщиками ".
Любые студенты без блокировщиков или любых блокировщиков без студентов отсутствуют.
Возвраты 70 строк

ОСТАВЛЕННЫЙ ВНЕШНЕЕ ОБЪЕДИНЕНИЕ были бы" , показывают мне всех студентов, с их соответствующим блокировщиком, если у них есть один ".
Это могло бы быть общим студенческим списком или могло использоваться для идентификации студентов без блокировщика.
Возвраты 100 строк

ПРАВИЛЬНОЕ ВНЕШНЕЕ ОБЪЕДИНЕНИЕ было бы" , показывают мне все блокировщики и студентов, присвоенных им, если существуют какие-либо ".
Это могло использоваться для идентификации блокировщиков, которые не имеют никаких студентов, присвоенных, или блокировщики, которые имеют слишком много студентов.
Возвраты 80 строк (список 70 студентов в этих 40 блокировщиках, плюс эти 10 блокировщиков без студента)

ПОЛНОЕ ВНЕШНЕЕ ОБЪЕДИНЕНИЕ было бы глупо и вероятно не много использования.
Что-то как" показывает мне всех студентов и все блокировщики, и подходит их, где Вы можете "
Возвраты 110 строк (все 100 студентов, включая тех без блокировщиков. Плюс эти 10 блокировщиков без студента)

ПЕРЕКРЕСТНОЕ ОБЪЕДИНЕНИЕ также довольно глупо в этом сценарии.
Это не использует связанный lockernumber поле в таблице студентов, таким образом, Вы в основном заканчиваете с большим гигантским списком каждого возможного студента к блокировщику, соединяющегося, существует ли это на самом деле.
Возвраты 5 000 строк (100 студентов x 50 блокировщиков). Могло быть полезным (с фильтрацией) как начальная точка для подхождения новых студентов с пустыми блокировщиками.

776
ответ дан Dan C 24 March 2009 в 20:45
поделиться

Существует только 4 вида:

  1. Внутреннее объединение : наиболее распространенный тип. Выходная строка производится для каждой пары входных строк, которые соответствуют на условиях объединения.
  2. Левое внешнее объединение : то же как внутреннее объединение, за исключением того, что, если существует какая-либо строка, для которой справа не может быть найдена никакая строка соответствия в таблице, строка производится содержащий значения от таблицы слева, с NULL для каждого значения в таблице справа. Это означает, что каждая строка от таблицы слева появится, по крайней мере, однажды в выводе.
  3. Правильное внешнее объединение : то же, поскольку левое внешнее объединение, кроме с ролями таблиц инвертируется.
  4. Полное внешнее объединение : комбинация левых и правых внешних объединений. Каждая строка от обеих таблиц появится в выводе, по крайней мере, однажды.

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

Благодаря RusselH для указания на ПОЛНЫЕ соединения, которые я опустил.

47
ответ дан j_random_hacker 24 March 2009 в 20:45
поделиться

Выезд Соединение (SQL) на Википедию

  • Внутреннее объединение - Учитывая две таблицы, внутреннее объединение возвращает все строки, которые существуют в обеих таблицах
  • оставленный / правильное (внешнее) соединение - Учитывая две таблицы, возвращает все строки, которые существуют или в левой или правой таблице Вашего соединения, плюс строки с другой стороны будет возвращен, когда пункт соединения является соответствием или пустым указателем, будет возвращен для тех столбцов

  • Полный Внешний - Учитывая две таблицы, возвращает все строки и возвратится, аннулирует, когда любой левый или правый столбец не там

  • Перекрестные объединения - Декартово соединение и может быть опасным если не используемый тщательно

9
ответ дан rjzii 24 March 2009 в 20:45
поделиться

Существует три основных типа соединения:

  • INNER соединение сравнивает две таблицы и только возвращает результаты, где соответствие существует. Записи от 1-й таблицы дублированы, когда они соответствуют нескольким результатам в 2-м. Внутренние объединения имеют тенденцию делать наборы результатов меньшими, но потому что записи могут быть дублированы, это не гарантируется.
  • CROSS соединение сравнивает две таблицы, и возвратите каждую возможную комбинацию строк от обеих таблиц. Можно получить много результатов этого вида соединения, которое даже не могло бы быть значимо, таким образом используйте с осторожностью.
  • OUTER соединение сравнивает две таблицы и данные возвратов, когда соответствием являются доступные или Нулевые значения иначе. Как с Внутренним объединением, это будет дублирующиеся строки в одной таблице, когда это будет соответствовать нескольким записям в другой таблице. Внешние объединения имеют тенденцию делать наборы результатов больше, потому что они не будут собой удалять записи из набора. Необходимо также квалифицировать Внешнее объединение для определения, когда и где добавить Нулевые значения:
    • LEFT средства ведут весь учет от 1-й таблицы, неважно, что и вставляют Нулевые значения, когда 2-я таблица не соответствует.
    • RIGHT означает противоположное: ведите весь учет от 2-й таблицы, неважно, что и вставляют Нулевые значения whent он, 1-я таблица не соответствует.
    • FULL средства ведут весь учет от обеих таблиц и вставляют Нулевое значение в любую таблицу, если там не идет ни в какое сравнение.

Часто Вы видите, будет OUTER ключевое слово, опущенное от синтаксиса. Вместо этого этому просто "ОСТАВЯТ СОЕДИНЕНИЕ", "ПРАВО ПРИСОЕДИНЯЕТСЯ", или "ПОЛНОЕ СОЕДИНЕНИЕ". Это сделано, потому что Внутренние и Перекрестные объединения не имеют никакого значения относительно ЛЕВОГО, ПРАВИЛЬНОГО, или ПОЛНЫЙ, и таким образом, они достаточны собой для однозначного указания на Внешнее объединение.

Вот пример того, когда Вы могли бы хотеть использовать каждый тип:

  • INNER: Вы хотите возвратить все записи из таблицы "Invoice", наряду с их соответствующим "InvoiceLines". Это предполагает, что каждый действительный Счет будет иметь по крайней мере одну строку.
  • OUTER: Вы хотите возвратить все записи "InvoiceLines" для конкретного Счета, наряду с их соответствующими записями "InventoryItem". Это - бизнес, который также продает услугу, такую, что не весь InvoiceLines будет иметь IventoryItem.
  • CROSS: у Вас есть таблица цифр с 10 строками, каждый параметры удержания '0' до '9'. Вы хотите составить таблицу диапазона дат для присоединения против, так, чтобы Вы закончили с одной записью в течение каждого дня в диапазоне. Путем перекрестного присоединения к этой таблице с собой неоднократно можно создать столько последовательных целых чисел, сколько Вам нужно (учитывая Вас, запускаются в 10 к 1-му питанию, каждое соединение добавляет 1 к экспоненте). Тогда используйте DATEADD () функция для добавления тех значений к основной дате диапазона.
139
ответ дан 9 revs 24 March 2009 в 20:45
поделиться
  • 1
    Большой, который помог мне с использованием нескольких параметров в целом с PetaPoco, Спасибо! – Mitch99 5 August 2011 в 15:05
Другие вопросы по тегам:

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