Arrays.fill()
. Метод перегружен для разных типов данных, и существует даже вариация, которая заполняет только определенный диапазон индексов.
Да. Я обычно рекомендую людям думать об этом, как будто JOIN
действует так же, как открывающая скобка (
, а ON
действует так же, как закрывающая скобка )
. Тогда обычные правила, которые вы использовали для сопоставления скобок, сообщают вам , какое предложение ON
относится к , который JOIN
, и дает вам некоторый контекст для определения, какие имена / псевдонимы таблиц находятся в области.
Таким образом, этот запрос эффективно объединяет таблицу B
с таблицей C
, а затем соединяет A
с , что объединяет результат.
Обычно я рекомендовал бы против этого, когда просто использовал INNER JOIN
s - вы можете легко переставить таблицы так, чтобы следовать более «нормальному» паттерну JOIN
/ ON
/ JOIN
/ ON
. Вы получите тот же логический результат из этого запроса 1 sup>:
SELECT *
FROM Table_B B
INNER JOIN Table_C C
ON C.Id = B.Id
INNER JOIN Table_A A
ON B.Id = A.Id
Обратите внимание, что этот описан в документации , если вы внимательно прочитали:
blockquote><table_source> ::= { table_or_view_name [ [ AS ] table_alias ] [ <tablesample_clause> ] [ WITH ( < table_hint > [ [ , ]...n ] ) ] ... | <joined_table> ...
И
blockquote><joined_table> ::= { <table_source> <join_type> <table_source> ON <search_condition> ...
Итак, в
<joined_table>
что идет слева от<join_type>
? Любой<table_source>
. А что идет справа от<join_type>
? Любой<table_source>
. И один из них или оба могут сами по себе быть<joined_table>
.«Нормальная» форма, на которую вы ссылаетесь в своем вопросе, - это то, что выпадает, если мы только позволим себе использовать
<joined_table>
в левой позиции другого<joined_table>
.
1 sup> Хотя если вы полагаетесь на порядок столбцов , а не на имена столбцов , столбцы будут в другом порядке из-за использования
SELECT *
. Но вы не должны полагаться на порядки столбцов.