Datenabfrage aus verknüpften Tabellen in Python

Lassen Sie uns eine Abfrage erstellen, die alle Benutzer zusammen mit ihren Städten abruft. Dafür wird der Befehl LEFT JOIN benötigt:

Seine Syntax sieht folgendermaßen aus:

sqlSELECT Felder FROM Tabellenname
  LEFT JOIN Name_der_verknüpften_Tabelle ON Verknüpfungsbedingung
WHERE Auswahlbedingung

Lassen Sie uns die einzelnen Teile der Syntax dieses Befehls analysieren.

Felder

Da die Abfrage aus mehreren Tabellen erfolgt, wird die Abfrage aller Felder mit * nicht funktionieren. Die folgende Abfrage wählt Felder nur aus der Haupttabelle, nicht aber aus der verknüpften Tabelle:

sqlSELECT *

Damit Daten aus allen Tabellen ausgewählt werden, muss vor * der Tabellenname für die Abfrage angegeben werden:

sqlSELECT users.*, cities.*

Alternativ können die benötigten Felder aufgelistet werden, wobei der Tabellenname vor ihnen angegeben wird:

sqlSELECT users.name, cities.name

Diese beiden Methoden haben ein Problem. Und zwar, wenn Felder in den Tabellen gleiche Namen haben, dann kommt es im Python-Array zu einem Namenskonflikt und es bleibt nur ein Feld übrig, das zweite wird nicht vorhanden sein.

Um das Problem zu lösen, müssen die kollidierenden Namen mit dem Befehl as umbenannt werden:

sqlSELECT users.name, cities.name as city_name

Verknüpfung

Nach dem Befehl ON müssen wir die Felder aus den beiden Tabellen angeben, über die die Verknüpfung hergestellt wird. In unserem Fall sind das das Feld id aus der Tabelle mit den Städten und das Feld city_id aus der Tabelle mit den Benutzern:

sqlON cities.id=users.city_id

Abfrage

Letztendlich wird die Abfrage, die die Benutzer zusammen mit ihren Städten abruft, folgendermaßen aussehen:

sqlSELECT
  users.name, cities.name as city_name
FROM
  users
LEFT JOIN cities ON cities.id=users.city_id

Praktische Aufgaben

Задание 1

Angenommen, Sie haben eine Tabelle mit Produkten und eine Tabelle mit deren Kategorien. Schreiben Sie eine Abfrage, die die Produktnamen zusammen mit ihren Kategorien abruft.