Различия в соединении SQL

Ни один из них. Если вы его определяете, это не значение по умолчанию.

Конструктор по умолчанию - это конструктор без аргументов, который автоматически генерируется, если вы не определяете другой конструктор. Любые неинициализированные поля будут установлены в значения по умолчанию. Для вашего примера это будет выглядеть так, если предполагается, что типы String, int и int:

public Module()
{
  super();
  this.name = null;
  this.credits = 0;
  this.hours = 0;
}

Это точно так же, как

public Module()
{}

И точно так же, как отсутствие конструкторов вообще. Однако, если вы определяете хотя бы один конструктор, конструктор по умолчанию не генерируется.

Ссылка: Спецификация языка Java

Уточнение

Технически это не конструктор (по умолчанию или иначе), который по умолчанию инициализирует поля. Тем не менее, я оставляю это в ответе как

  • , вопрос получил неверные значения по умолчанию и
  • , включая их или нет, конструктор имеет точно такой же эффект.

41
задан CMS 7 January 2009 в 16:43
поделиться

5 ответов

Проверьте эту статью:

А Визуальное Объяснение Соединений SQL

Внутреннее объединение:

Левое Внешнее объединение:

Правильное Внешнее объединение:

77
ответ дан Community 23 September 2019 в 15:13
поделиться

Сравнения производительности между типами соединений не важны, поскольку они дают наборы результатов differnt. Даже если бы внутреннее объединение быстрее, Вы не использовали бы его при необходимости в результатах левого соединения (который включает даже записи, которые не соответствуют второй таблице в соединении).

4
ответ дан HLGEM 23 September 2019 в 15:13
поделиться

LEFT JOIN B совпадает с B RIGHT JOIN A. Некоторый RDBMS не имеет RIGHT JOIN, таким образом, необходимо переписать Ваш RIGHT JOIN логика к LEFT JOIN логика

A 1 2 3
B 2 3 4 3

SELECT A.I FROM INNER JOIN B ON B.I = A.I;

output: 2 3, 3

SELECT A.I AS X, B.I AS Y FROM A LEFT JOIN B ON B.I = A.I;

read above code as A on LEFT, JOINs B

output: 

X Y
1 NULL
2 2
3 3
3 3

SELECT A.I AS X, B.I AS Y FROM B RIGHT JOIN A ON A.I = B.I;

Read вышеупомянутый код как B on RIGHT, JOINs A. То, которое является все равно, как A находится на ЛЕВОМ

Независимо от того, что идет оставленное, всегда оценивается, всегда имейте вывод. Можно предположить, что ЛЕВОЕ СОЕДИНЕНИЕ B, B ПРАВО ПРИСОЕДИНЯЮТСЯ как:

        var result = new Dictionary<int, int?>();

        var A = new int[] { 1, 2, 3 };
        var B = new int[] { 2, 3, 4, 3 };

        foreach (int aElem in A)
        {


            bool hasMatch = false;
            foreach (int bElem in B)
            {
                if (bElem == aElem)
                {
                    result.Add(aElem, bElem);
                    hasMatch = true;
                }
            }

            if (!hasMatch)
                result.Add(aElem, null);
        }



        foreach(int X in result.Keys)
        {
            MessageBox.Show(string.Format("X {0} Y {1}", X, result[X].HasValue ? result[X].Value.ToString() : "NULL"  ));
        }
3
ответ дан Kyle Rozendo 23 September 2019 в 15:13
поделиться

Надо надеяться, Вы понимаете изображения. Мудрый производительностью, они эквивалентны - никакое различие.

РЕДАКТИРОВАНИЕ: ой. Угадайте, что Вы не заботились о той части ответа.

0
ответ дан dkretz 23 September 2019 в 15:13
поделиться

Оставленный, правильный, внутренний и внешний не влияют на производительность, и они уже были хорошо объяснены здесь.

Однако существуют подсказки, которые можно добавить к соединениям, которые действительно производят производительность: хеш, цикл и слияние.

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

А loop join проходит каждую строку во второй таблице для каждой строки в первом. Это хорошо, если у Вас есть одна очень большая таблица и одна намного меньшая.

А merge join проходит обе таблицы вместе в порядке. Это может быть очень быстро, если обе таблицы уже заказаны полем, на котором Вы присоединяетесь.

А hash join использование много временных таблиц для группировки вывода, поскольку это сортирует данные, к которым присоединяются.

Некоторый DBS специалиста также поддерживает другие типы, такие как растровые соединения.

3
ответ дан Keith 23 September 2019 в 15:13
поделиться
Другие вопросы по тегам:

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