Attardons nous justement sur les codes postaux, comme une ville peut avoir plusieurs code-postaux on ne peut pas ajouter une colonne code postal à la table ville, et comme un code postal peut aller dans différentes villes on ne peut pas non plus ajouter une colonne ville à une table code-postal, il faut créer une table qui va faire la liaison entre les deux.
Sous requêtes.
Pour l'instant nous avons travaillé sur une table, par exemple, nous ne savons pas afficher les villes du Bas Rhin sans savoir que l'id du département est 68 (encore une fois mais c'est la dernière, l'id du département n'est pas le numéro de département). Un moyen d'y arriver est d'utiliser une sous-requête.
Fusion
On peut associer plusieurs tableaux en un à l'aide d'une opération appelée fusion ou jointure. Si on a deux tableaux A et B la fusion se fait simplement en écrivant A, B par contre le résultat est le produit cartésien de A et B soit une chose par forcément très utile de façon "brute".
Cette requête (le produit cartésien) offre peut d’intérêt (à mon sens).
La simple avec contrainte
donne
Là c'est intéressant, on peut remarquer qu'une ligne du champ A n’apparaît pas (la 5) de plus il y a deux champs identiques.
INNER JOIN ON
donne
C'est la même chose mais la nature de l'opération que l'on souhaite est plus explicite.
LEFT JOIN ON
donne
Toutes les lignes de la table A apparaissent parfois compléter avec des NULL si il n'y a pas de lien. ça peut être intéressant. SQLITE semble ne pas supporter RIGHT JOIN
Il existe encore d'autres syntaxes (CROSS JOIN qui est le produit cartésien, NATURAL JOIN qui est très pratique ... mais pour des raisons pédagogiques on va rester sur les cas évoqués).
Utiliser un base de données dans Python
Jusqu'ici nous avons fait des requêtes en passant directement par le SGBD, l'usage le plus courant (car il permet d'automatiser) est de passer par un langage de programmation. Par exemple si un site commercial veut afficher un article à vendre sur une page :
Le serveur envoie une page HTML au client contenant un formulaire (par exemple une barre recherche).
Le client envoie l'information avec la méthode GET ou Post.
Le serveur va créer un page HTML à partir du code (en PHP par exemple) en donnant en paramètre le nom de l'article récupéré à l'étape précédente, au moment de la création va récupérer sur un autre serveur et en passant par un SGBD (pas en SQlite qui n'est pas fait pour) le nom précis de l'article, la marque, le prix, le stockage, les options possibles, les articles liées, les commentaires,...).