• 12 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 15/05/2023

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 !

Exemple de certificat de réussite
Exemple de certificat de réussite