Získávání dat z propojených tabulek v Pythonu
Pojďme vytvořit dotaz, který načte
všechny uživatele spolu s jejich městy. K tomu
bude potřeba příkaz LEFT
JOIN:
Jeho syntaxe vypadá následovně:
SELECT pole FROM název_tabulky
LEFT JOIN název_propojené_tabulky ON podmínka_propojení
WHERE podmínka_výběru
Pojďme rozebrat jednotlivé části syntaxe tohoto příkazu.
Pole
Protože se výběr provádí z několika tabulek,
výběr všech polí pomocí *
nebude fungovat. Následující dotaz vybere
pole pouze z hlavní tabulky, ale ne z
propojené:
SELECT *
Aby se data vybírala ze všech
tabuliek, je třeba před * uvést název
tabulky pro výběr:
SELECT users.*, cities.*
Nebo lze vypsat potřebná pole s uvedením názvu tabulky před nimi:
SELECT users.name, cities.name
Tyto dva způsoby mají problém. Spočívá v tom, že pokud mají pole v tabulkách stejné názvy, dojde v poli Pythonu ke konfliktu jmen a vyhraje pouze jedno pole, druhé nebude k dispozici.
K vyřešení problému je třeba konfliktní
názvy přejmenovat pomocí příkazu
as:
SELECT users.name, cities.name as city_name
Propojení
Po příkazu ON musíme uvést
pole ze dvou tabulek, podle kterých se provádí
propojení. V našem případě to bude pole id
z tabulky s městy a pole city_id
z tabulky s uživateli:
ON cities.id=users.city_id
Dotaz
Výsledný dotaz, který načte uživatele spolu s jejich městy, bude vypadat následovně:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Praktické úlohy
Předpokládejme, že máte tabulku s produkty a tabulku s jejich kategoriemi. Napište dotaz, který načte názvy produktů spolu s jejich kategoriemi.