Вы можете думать о JOIN, как будто он создает новую виртуальную строку, где все столбцы из обеих соединенных таблиц расположены рядом.
Предположим, у вас есть таблицы:
mysql> create table A (c1 int, c2 int, c3 int);
mysql> create table B (c4 int, c5 int, c6 int);
mysql> insert into A values (1,2,3);
mysql> insert into B values (4,5,6);
Вы можете запросить FROM A JOIN B ON ...condition...
, и теперь ваши предложения WHERE и SELECT применяются к набору строк с шестью столбцами.
mysql> select * from a join b;
+------+------+------+------+------+------+
| c1 | c2 | c3 | c4 | c5 | c6 |
+------+------+------+------+------+------+
| 1 | 2 | 3 | 4 | 5 | 6 |
+------+------+------+------+------+------+
Таким образом, вы можете делать такие вещи, как:
WHERE c1 = 123 AND c4 = 456
И он проверяет каждую объединенную строку, поэтому вы можете ссылаться на любой столбец из любой таблицы, как если быони в одном ряду.Фактически, они являются в той же строке в результате объединения.
Аналогично, вы можете ссылаться на любой из этих столбцов в списке SELECT.
SELECT c2, c6 FROM ...
Что если в обеих таблицах существует столбец с одинаковым именем?Именно тогда вы должны квалифицировать имена столбцов с помощью синтаксиса table.column
, чтобы не было неоднозначно, какой вы имеете в виду.
PS: вы должны привыкнуть использовать синтаксис JOIN для всех ваших таблиц.Не используйте старый синтаксис в стиле запятой.Смешивание двух стилей синтаксиса доставит вам неожиданные проблемы из-за порядка приоритета.Прочитайте https://dev.mysql.com/doc/refman/8.0/en/join.html в разделе, где вы найдете "JOIN имеет более высокий приоритет, чем оператор запятой (,) ..."