Разбиение на группы Оглавление Заключение, или что осталось за кадром и почему

Выборка данных из нескольких таблиц

Теперь перейдем к рассмотрению запросов из нескольких таблиц. У нас в двух таблицах присутствует поле с одним и тем же названием, поэтому язык SQL предусматривает возможность указывать название поля в виде имя_таблицы.имя_столбца. В нашем случае: gb.gb_id или message.gb_id. Давайте выберем пары: идентификатор гостевой книги, идентификатор сообщения. На первый взгляд приходит следующее: SELECT gb.gb_id, message_id FROM gb, message. Однако результатом будет декартово произведение, т.е. всевозможные комбинации - 20 записей из таблицы gb умножить на 52 записи из таблицы message получается 1040 записей.
Но нас интересуют только осмысленные комбинации, т.е. там, где совпадают значения полей gb_id, поэтому необходимо добавить условие WHERE gb.gb_id=message.gb_id. Теперь записей стало 52, как и положено.
Для того чтобы выбрать другие поля, просто добавьте их в запрос, только лучше писать полное имя, т.е. таблица.поле: SELECT gb.gb_id, gb.name, message.name, message_id FROM gb, message WHERE gb.gb_id=message.gb_id. Теперь давайте посчитаем количество записей в каждой гостевой книге, только при этом выберем еще и название гостевой книги.
SELECT gb.name, COUNT(*) from gb, message WHERE gb.gb_id=message.gb_id GROUP BY gb.name

Упражнения

  1. Выведите все записи из таблицы gb, а также количество сообщений в каждой гостевой книге.