Вы должны понимать, что базы данных не работают напрямую через запрос сверху вниз.Он не может выполнять часть SELECT до тех пор, пока не обработает объединение и предложение where, а также любые группы по предложениям и т. Д. Вам также не нужно фактически иметь данные из каждой таблицы, объединенной в SELECT.Например, вам может потребоваться список пользователей, которые являются сотрудниками (в отличие от клиентов).Поэтому вам не нужно ничего, кроме того, что находится в пользовательской таблице, и вы используете соединение просто для того, чтобы сократить набор записей только до тех, которые также есть в таблице сотрудников.Нет необходимости выбирать какие-либо поля из таблицы сотрудников.База данных также не будет знать, пока вы не дойдете до объединений, как вы хотите, чтобы данные были объединены.Вы получили бы разные записи для этих условий соединения в одной и той же таблице:
FROM subscriptions
JOIN users ON users.user_id = subscriptions.following
FROM subscriptions
left JOIN users ON users.user_id = subscriptions.following
FROM subscriptions
CROSS JOIN users
FROM subscriptions
JOIN users ON users.referred by_id = subscriptions.following
Первая выдаст вам записи, которые находятся в обеих таблицах.
Второй даст вам записи, которые находятся в первой таблице, но не обязательно во второй таблице.В зависимости от данных это может быть одинаковое количество записей или это может быть существенно различное количество записей.
Третий будет сопоставлять все записи в первой таблице со всеми записями во второй таблице.
Четвертый даст вам все подписки человека, который ссылался на пользователя, а не подпискипользователя (да, я знаю, что это подготовленное поле, но некоторые таблицы действительно имеют несколько возможных полей, к которым они могут быть присоединены, и SQL должен учитывать это).
Надеюсь, вы можете видеть изобъяснение, почему вам нужно указать соединение в предложении FROM.