Dataverkryging uit verwante tabelle in Python

Kom ons maak 'n navraag wat alle gebruikers saam met hul stede sal haal. Vir dit sal die opdrag LEFT JOIN nodig wees:

Die sintaksis daarvan lyk soos volg:

sqlSELECT velde FROM tabelnaam
  LEFT JOIN verwante_tabelnaam ON skakelvoorwaarde
WHERE keurvoorwaarde

Kom ons kyk na die afsonderlike dele van die sintaksis van hierdie opdrag.

Velde

Aangesien die keuring uit verskeie tabelle kom, sal die keuring van alle velde deur * nie werk nie. Die volgende navraag sal velde kies slegs uit die hooftabel, maar nie uit die verwante een nie:

sqlSELECT *

Om te verseker dat data uit alle tabelle gekies word, moet die tabelnaam vir die keuring voor * gespesifiseer word:

sqlSELECT users.*, cities.*

Of, jy kan die nodige velde lys met die tabelnaam voor hulle:

sqlSELECT users.name, cities.name

Hierdie twee metodes het 'n probleem. Die ding is, as velde in tabelle identiese name het, sal daar in die Python lys 'n naamkonflik wees en sal slegs een veld wen, en die ander een sal nie daar wees nie.

Om die probleem op te los, moet die konflikterende name hernoem word deur die opdrag as:

sqlSELECT users.name, cities.name as city_name

Skakel

Na die opdrag ON moet ons velde uit die twee tabelle spesifiseer, waarlangs die skakel plaasvind. In ons geval sal dit die veld id uit die tabel met stede en die veld city_id uit die tabel met gebruikers wees:

sqlON cities.id=users.city_id

Navraag

Uiteindelik sal die navraag wat die gebruikers saam met hul stede sal haal so lyk:

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

Praktiese take

Задание 1

Kom ons sê jy het 'n tabel met produkte en 'n tabel met hul kategorieë. Skryf 'n navraag, wat die name van produkte saam met hul kategorieë sal haal.