Получение данных из связанных таблиц в Python
Давайте сделаем запрос, который достанет
всех юзеров вместе с их городами. Для этого
понадобится команда LEFT
JOIN
:
Ее синтаксис выглядит следующим образом:
SELECT поля FROM имя_таблицы
LEFT JOIN имя_связанной_таблицы ON условие_связи
WHERE условие_выборки
Давайте разберем отдельные части синтаксиса этой команды.
Поля
Так как выборка идет из нескольких таблиц,
то выборка всех полей через *
не
будет работать. Следующий запрос выберет
поля только из основной таблицы, но не из
связанной:
SELECT *
Для того, чтобы данные выбирались из всех
таблиц, нужно перед *
указать имя
таблицы для выборки:
SELECT users.*, cities.*
Либо можно перечислить нужные нам поля с указанием имени таблицы перед ними:
SELECT users.name, cities.name
Эти два способа имеют проблему. Дело в том, что если поля в таблицах имеют одинаковые имена, то в массиве Python произойдет конфликт имен и победит только одно поле, а второго не будет.
Для решения проблемы нужно конфликтные
имена переименовывать через команду
as
:
SELECT users.name, cities.name as city_name
Связь
После команды ON
мы должны указать
поля из двух таблиц, по которым осуществляется
связь. В нашем случае это будет поле id
из таблицы с городами и поле city_id
из таблицы с юзерами:
ON cities.id=users.city_id
Запрос
В итоге запрос, который достанет юзеров вместе с их городами будет выглядеть следующим образом:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Практические задачи
Пусть у вас есть таблица с товарами и таблица с их категориями. Напишите запрос, который достанет названия товаров вместе с их категориями.