Синтаксис объединений таблиц

Простое соединение - INNER JOIN:

SELECT <fields> FROM table1 INNER JOIN table2 ON table1.field1=table2.field2
или
SELECT <fields> FROM table1, table2 WHERE table1.field1=table2.field2
или
SELECT <fields> FROM table1 INNER JOIN table2 USING (field1)
если таблицы объединяются по полю field1.

В таком соединении выбираются только те строки таблиц, которые соответствуют условию объединения - равенство значений полей. Если для строки table1 нет соответствующей строки из table2, строка не попадает в итог запроса. Если же надо подсчитать количество сайтов в рубрике (продолжаю пример с каталогом), такой запрос не совсем подходит - в списке появятся только рубрики, в которых есть сайты. Для подобной операции нужно использовать LEFT JOIN.

SELECT <fields> FROM table1 LEFT JOIN table2 ON table1.field1=table2.field2
или
SELECT <fields> FROM table1 LEFT JOIN table2 USING (field1)
если таблицы объединяются по полю field1.

При этом соответствующей строки в table2 может и не быть, тогда в полях из table2 мы получим NULL, а если это групповая операция, как в случае с количеством сайтов в рубрике, тогда в поле будет 0:

SELECT rubs.id, name, COUNT(sites.id) AS sites FROM rubs LEFT JOIN sites ON rubs.id=sites.rub GROUP BY rubs.id

Заметьте: поля id есть в обеих таблицах, поэтому в их обозначении надо использовать имя таблицы. Кстати, если при объединении не используются групповые операции, всё равно лучше менять имя поля оператором AS, чтобы не возникало путаницы.