Voici un petit exemple, on va faire une base de donnée sous Postgresql :
$ createdb CLASSE
$ psql -d CLASSE
psql (14.11 (Ubuntu 14.11-0ubuntu0.22.04.1), server 10.15 (Ubuntu 10.15-0ubuntu0.18.04.1))
Type "help" for help.
CLASSE=> create table classe (Prenom varchar(50) primary key, classe int);
CREATE TABLE
CLASSE=> create table math (Prenom varchar(50) primary key, note float);
CREATE TABLE
CLASSE=> create table anglais (Prenom varchar(50) primary key, note float);
CREATE TABLE
CLASSE=> create table espagnol (Prenom varchar(50) primary key, note float);
CREATE TABLE
CLASSE=> insert into classe (Prenom, classe) values ('Riri',1);
INSERT 0 1
CLASSE=> insert into classe (Prenom, classe) values ('Fifi',1);
INSERT 0 1
CLASSE=> insert into classe (Prenom, classe) values ('Loulou',1);
INSERT 0 1
CLASSE=> insert into classe (Prenom, classe) values ('Paul',2);
INSERT 0 1
CLASSE=> insert into classe (Prenom, classe) values ('Pierre',2);
INSERT 0 1
CLASSE=> insert into classe (Prenom, classe) values ('Jacques',2);
INSERT 0 1
CLASSE=> insert into math (Prenom, note) values ('Riri',10);
INSERT 0 1
CLASSE=> insert into math (Prenom, note) values ('Fifi',11);
INSERT 0 1
CLASSE=> insert into math (Prenom, note) values ('Loulou',12);
INSERT 0 1
CLASSE=> insert into math (Prenom, note) values ('Paul',13);
INSERT 0 1
CLASSE=> insert into math (Prenom, note) values ('Pierre',14);
INSERT 0 1
CLASSE=> insert into math (Prenom, note) values ('Jacques',15);
INSERT 0 1
CLASSE=> insert into anglais (Prenom, note) values ('Riri',11);
INSERT 0 1
CLASSE=> insert into anglais (Prenom, note) values ('Fifi',12);
INSERT 0 1
CLASSE=> insert into espagnol (Prenom, note) values ('Loulou',13);
INSERT 0 1
CLASSE=> insert into espagnol (Prenom, note) values ('Paul',14);
INSERT 0 1
CLASSE=> insert into espagnol (Prenom, note) values ('Pierre',15);
INSERT 0 1
CLASSE=> insert into anglais (Prenom, note) values ('Jacques',16);
INSERT 0 1
On a donc 2 classes de 3 élèves, et dans les classes tous le monde à math mais les langues sont mélangés.
Sans jointure on n’a rien :
CLASSE=> select c.Prenom,m.note as Math,a.note as Anglais, e.note as Espagnol
from classe c, math m, anglais a, espagnol e
where c.Prenom = a.Prenom and c.Prenom = m.Prenom and c.Prenom = e.Prenom and c.classe = 1;
prenom | math | anglais | espagnol
--------+------+---------+----------
(0 rows)
Ce qui est normal car personne ne fait Anglais & Espagnol.
Avec une jointure je vais ajouter les données si elles sont disponibles :
CLASSE=> select c.Prenom,m.note as Math,a.note as Anglais, e.note as Espagnol
from classe c
LEFT JOIN math m ON c.Prenom = m.Prenom
LEFT JOIN anglais a ON c.Prenom = a.Prenom
LEFT JOIN espagnol e ON c.Prenom = e.Prenom
where c.classe = 1;
prenom | math | anglais | espagnol
--------+------+---------+----------
Loulou | 12 | | 13
Riri | 10 | 11 |
Fifi | 11 | 12 |
(3 rows)
J’aime ça :
J’aime chargement…