OpenClassrooms becomes an accredited US university.
Discover what this means for youTable of contents
- Part 1
Initiez-vous à la modélisation relationnelle
Tirez un maximum de ce cours
Organisez vos données selon la modélisation relationnelle
Prenez en main une base de données
Identifiez les lignes de votre table avec votre clé primaire
Mettez en relation plusieurs tables avec des clés étrangères
Identifiez les types d'associations entre vos tables
Quiz: S'initier à la modélisation relationnelle
- Part 2
Construisez des requêtes SQL simples
Affichez les données pertinentes avec SELECT
Filtrez vos lignes avec WHERE
Récupérez des données issues de plusieurs tables avec FROM
Liez des tables avec une jointure interne
Maîtrisez les jointures externes et naturelles
Identifiez toujours vos potentielles clés primaires
Quiz: Construire des requêtes SQL simples
- Part 3
Appliquez d'autres fonctionnalités à vos requêtes SQL
Récupérez des données issues de plusieurs tables avec FROM
Reprenons là où on s'était arrêté au chapitre précédent.
Vous avez trouvé dans la table entity la ligne correspondant à la société Big Data Crunchers.
Ce qui nous intéresse ici, ça va être de trouver son adresse. Nous allons le voir ici, l'adresse de cette société se trouve dans une autre table : address . Pour lier ces 2 tables, entity contient une clé étrangère qui référence address .
#Découvrez le fonctionnement de FROM
On passe maintenant au mot clé FROM à travers cette démonstration en vidéo :
Vous vous souvenez, à chaque fois que vous écrivez une requête qui commence par SELECT, le résultat ne sera toujours qu'un seul tableau. Une requête SELECT = un tableau en sortie, pas plus, pas moins.
Mais dans ce cas, comment combiner, au sein d'une même requête, des données de plusieurs tables ?
Eh bien c'est possible, en indiquant plusieurs tables dans le FROM, séparées par une virgule.
Par exemple :
SELECT * FROM entity, address ;
Mais à quoi va ressembler le résultat de cette requête ? Comment vont être combinées les 2 tables ?
Eh bien, le SGBDR va prendre chaque ligne de la 1e table, qu'il va associer à chaque ligne de la 2e table.
Voici la table 1 :
id_1 | name |
1 | name1 |
2 | name2 |
et ensuite la table 2 :
id_2 | values |
L200 | val1 |
L201 | val2 |
pour ce résultat une fois l'association faite :
id_1 | name | id_2 | values |
1 | name1 | L200 | val1 |
1 | name1 | L201 | val2 |
2 | name2 | L200 | val1 |
2 | name2 | L201 | val2 |
J'ai calculé pour vous : quand on associe toutes les lignes de entity avec toutes les lignes de address , le résultat fait plus de 4 milliards de lignes !
Cette opération s'appelle le produit cartésien entre les 2 tables.
Le FROM effectue le produit cartésien entre toutes les tables qui lui sont données.
Nous avons vu ce que ça donne avec 2 tables.
S'il n'y a qu'une table, le produit cartésien est égal… à cette même table, sans modification.
S'il y a plus 3 tables, le produit cartésien des 3 tables, c'est le produit cartésien de la 3e table avec (le produit cartésien des 2 premières tables).
Mais comment gérer ce nombre incalculable de lignes ? À l'origine, on voulait juste connaître l'adresse qui est liée à chaque société, et là on se retrouve avec une table de chacune des sociétés liées à toutes les adresses possibles, c'est le bazar !
Ne vous en faites pas. En pratique, à chaque fois que vous utiliserez plus d'une table dans un FROM, vous utiliserez un WHERE pour ensuite effectuer un filtrage, afin de ne garder que les lignes qui vous intéressent. On voit ça au chapitre suivant !
Peut-on ne pas mettre de FROM?
Bonne question ! Une requête sans le mot clé FROM est une requête qui ne se fait sur aucune table. Elle ne renvoie donc qu'une seule ligne. Par exemple, la requête SELECT 45, 20, 'bonjour' renvoie une table avec 3 colonnes et une seule ligne !
#Appliquez les alias de table
Dans cette vidéo, vous allez voir comment donner des “surnoms” aux tables, afin de simplifier l'écriture de vos requêtes.
Il s'agit ici d'appeler la table entity e et la table address a , afin de simplifier l'écriture de la requête !
SELECT
e.id AS id_entity,
e.name AS nom_societe,
a.id_address,
a.address,
a.countries
FROM
entity e, address a ;
#À vous de jouer

#Contexte
La table officer est une vraie mine d'or. Pour sûr, vous allez passer du temps à la fouiller de fond en comble pour écrire votre article ! Sauf qu'elle n'est pas très lisible. En effet, le nom du pays correspondant à chaque ligne de officer se trouve dans une autre table : country . Il y a une colonne clé étrangère dans officer qui référence country . Pour faciliter vos recherches, vous souhaitez donc rassembler les infos de ces 2 tables afin d'avoir le pays correspondant à chaque ligne de officer .
#Consignes
Dans la BDD des Panama Papers, écrivez la requête qui réalisera le produit cartésien entre les tables officer et country .
Une fois votre requête exécutée, englobez-la dans cette autre requête. Celle-ci va compter le nombre de lignes de votre produit cartésien :
SELECT count(*) FROM (· <votre requete>· ) r ;
Combien de lignes contient votre produit cartésien ?
#Vérifiez votre travail
Le produit cartésien se calcule en indiquant les tables concernées dans le FROM, séparées par une virgule :
SELECT * FROM officer, country ;
Cette requête vous indique que le produit cartésien comporte plus de 48 millions de lignes :
SELECT count(*) FROM ( SELECT * FROM officer, country ) r· ;
#En résumé
FROM effectue le produit cartésien de toutes les tables qui lui sont données.
Le produit cartésien de deux tables T1 et T2 est composé de toutes les combinaisons possibles entre les lignes de T1 et les lignes de T2.
Le nombre de lignes est égal au nombre de lignes de T1 multiplié par le nombre de lignes de T2.
On peut donner des alias aux tables afin de simplifier l'écriture des requêtes.
Le produit cartésien produit un résultat avec beaucoup de lignes ! Heureusement, au chapitre suivant, nous allons filtrer tout ça !
- Up to 100% of your training program funded
- Flexible start date
- Career-focused projects
- Individual mentoring