Ни один из них. Если вы его определяете, это не значение по умолчанию.
Конструктор по умолчанию - это конструктор без аргументов, который автоматически генерируется, если вы не определяете другой конструктор. Любые неинициализированные поля будут установлены в значения по умолчанию. Для вашего примера это будет выглядеть так, если предполагается, что типы String
, int
и int
:
public Module()
{
super();
this.name = null;
this.credits = 0;
this.hours = 0;
}
Это точно так же, как
public Module()
{}
И точно так же, как отсутствие конструкторов вообще. Однако, если вы определяете хотя бы один конструктор, конструктор по умолчанию не генерируется.
Ссылка: Спецификация языка Java
Технически это не конструктор (по умолчанию или иначе), который по умолчанию инициализирует поля. Тем не менее, я оставляю это в ответе как
Проверьте эту статью:
А Визуальное Объяснение Соединений SQL
Внутреннее объединение:
Левое Внешнее объединение:
Правильное Внешнее объединение:
Сравнения производительности между типами соединений не важны, поскольку они дают наборы результатов differnt. Даже если бы внутреннее объединение быстрее, Вы не использовали бы его при необходимости в результатах левого соединения (который включает даже записи, которые не соответствуют второй таблице в соединении).
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" ));
}
Надо надеяться, Вы понимаете изображения. Мудрый производительностью, они эквивалентны - никакое различие.
РЕДАКТИРОВАНИЕ: ой. Угадайте, что Вы не заботились о той части ответа.
Оставленный, правильный, внутренний и внешний не влияют на производительность, и они уже были хорошо объяснены здесь.
Однако существуют подсказки, которые можно добавить к соединениям, которые действительно производят производительность: хеш, цикл и слияние.
Обычно планировщик запроса решает, какой из них, чтобы сделать, но иногда можно улучшить производительность путем переопределения его.
А loop
join
проходит каждую строку во второй таблице для каждой строки в первом. Это хорошо, если у Вас есть одна очень большая таблица и одна намного меньшая.
А merge
join
проходит обе таблицы вместе в порядке. Это может быть очень быстро, если обе таблицы уже заказаны полем, на котором Вы присоединяетесь.
А hash
join
использование много временных таблиц для группировки вывода, поскольку это сортирует данные, к которым присоединяются.
Некоторый DBS специалиста также поддерживает другие типы, такие как растровые соединения.