Aller au contenu principal
ShadowAcademy

Les langages SQL Plusieurs tables

Relier deux tables

Ranger les cartes dans la table clients obligerait à prévoir carte_1, carte_2, carte_3... et à tout casser au quatrième. On crée donc une seconde table :

CREATE TABLE cartes (
    id           INTEGER PRIMARY KEY,
    titulaire_id INTEGER REFERENCES clients(id),
    type         TEXT    NOT NULL,
    numero       TEXT    NOT NULL,
    plafond      INTEGER NOT NULL
);

titulaire_id contient l'id d'un client : c'est une clé étrangère.

id titulaire_id type numero plafond
1 1 Visa Premier 4970-1123 3200
2 1 Carte virtuelle 4970-8821 1200
3 3 Visa Infinite 4970-4410 9500
4 5 Carte suspendue 4970-0007 0
5 6 Visa Classic 4970-1120 1800
6 2 Carte jeune 4970-0099 90
7 (vide) Carte non attribuée 4970-0000 0

La jointure

SELECT clients.prenom, cartes.type
FROM clients
JOIN cartes ON cartes.titulaire_id = clients.id;

ON dit à quelle condition deux lignes vont ensemble. Alice a deux cartes : elle apparaît sur deux lignes. Une jointure renvoie des couples.

Préfixer, et raccourcir

SELECT c.prenom, k.type, k.plafond
FROM clients AS c
JOIN cartes AS k ON k.titulaire_id = c.id
WHERE k.plafond > 1000
ORDER BY k.plafond DESC;

Quand une colonne existe dans les deux tables (id), le préfixe est obligatoire, sinon la base répond ambiguous column name.

Ce que la jointure laisse de côté

Driss n'a aucune carte : il n'apparaît dans aucun couple. La carte non attribuée disparaît elle aussi. Une jointure ordinaire ne garde que ce qui correspond des deux côtés.

2 exercices pour cette lecon

Les exercices demandent un compte : il faut bien enregistrer votre progression quelque part. La lecture, elle, reste libre. Creer un compte

  • À qui est cette carte moyen lecon a valider
  • Les gros plafonds moyen lecon a valider