1) Использование не совсем то же самое, что и on, но это короткая рука, где в обеих таблицах есть столбец с тем же именем, к которому вы присоединяетесь ... см .: http://www.java2s.com/Tutorial/MySQL/0100__Table-Join/ThekeywordUSINGcanbeusedasareplacementfortheONkeywordduringthetableJoins.htm
На мой взгляд, читать сложнее, поэтому я бы стал разбирать объединения.
3) Из этого запроса не ясно, но я бы предположил, что это не так.
2) Предполагая, что вы объединяете другие таблицы (не все напрямую в компаниях), порядок в этом запросе имеет значение ... см. Сравнение ниже:
оригинальный:
SELECT c.*
FROM companies AS c
JOIN users AS u USING(companyid)
JOIN jobs AS j USING(userid)
JOIN useraccounts AS us USING(userid)
WHERE j.jobid = 123
То, что я думаю, вероятно, предлагает:
SELECT c.*
FROM companies AS c
JOIN users AS u on u.companyid = c.companyid
JOIN jobs AS j on j.userid = u.userid
JOIN useraccounts AS us on us.userid = u.userid
WHERE j.jobid = 123
Здесь вы можете переключать линии, присоединяясь к вакансиям и учетным записям пользователей.
Как бы это выглядело, если бы все объединилось в компанию:
SELECT c.*
FROM companies AS c
JOIN users AS u on u.companyid = c.companyid
JOIN jobs AS j on j.userid = c.userid
JOIN useraccounts AS us on us.userid = c.userid
WHERE j.jobid = 123
Это на самом деле не имеет логического смысла ... если только у каждого пользователя нет своей компании.
4.) Волшебство sql заключается в том, что вы можете отображать только определенные столбцы, но все они предназначены для сортировки и фильтрации ...
если вы вернулись
SELECT c.*, j.jobid....
вы могли ясно видеть, по чему он фильтровал, но серверу баз данных не важно, выводите ли вы строку или нет для фильтрации.