SQL. Вывод значений из таблицы и подсчет количества этих значений в другой таблице - MySQL
Формулировка задачи:
Задание звучит так:
Для таблиц user и phones, где соответствие записей определяется равенством user.id = phones.user_id привести 2 разных SQL запроса с помощью которых можно вывести имя пользователя (name) из таблицы users и количество записей из таблицы phones для этого пользователя, объяснить какой запрос более оптимальный и почему.
Решил одним запросом:
Какой может быть второй и какой оптимальнее?
SELECT name, COUNT('user_id') AS COUNT
FROM users, phones
WHERE users.id = phones.user_id
GROUP BY 'id'Решение задачи: «SQL. Вывод значений из таблицы и подсчет количества этих значений в другой таблице»
textual
Листинг программы
SELECT u.name, ( SELECT COUNT( p.user_id ) FROM phones p WHERE p.user_id = u.id ) AS COUNT FROM users u
Объяснение кода листинга программы
В представленном коде выполняется запрос на выборку данных из таблицы users и подсчет количества записей в таблице phones, которые соответствуют пользователю с идентификатором, равным идентификатору текущего пользователя.
- SELECT - тип запроса на выборку данных.
- u.name - название переменной, которая будет содержать имена пользователей.
- ( SELECT COUNT( p.user_id ) FROM phones p WHERE p.user_id = u.id ) - подзапрос, который будет считать количество записей в таблице
phones, удовлетворяющих условию, что идентификатор пользователя равен идентификатору текущего пользователя. - AS COUNT - псевдоним для переменной, которая будет содержать результат подсчета.
- FROM users u - указывается, что данные будут выбираться из таблицы
users. - Вывод: после выполнения запроса, в переменной
u.nameбудет содержаться имя пользователя и в переменнойCOUNTбудет содержаться количество записей в таблицеphones, удовлетворяющих условию.