Comme nous avons pu le voir, le langage SQL permet d'établir des liens entre des tables via ce que l'on appelle des jointures. Ainsi, par exemple, chaque enregistrement d'une table contenant des informations sur un film peut faire référence à un enregistrement d'une table contenant des informations sur les réalisateurs (ou faire référence à un ou plusieurs enregistrements d'une table contenant des informations sur les acteurs).
Nous pouvons alors récupérer l'ensemble des informations via une requête du type:
SELECT * FROM films, realisateurs WHERE films.realisateur_id = realisateurs.id;
Mais que se passe-t-il si le réalisateur a été supprimé de la base ou si tout bêtement lors de l'insertion des données une erreur s'est produite et l'identifiant du réalisateur inséré dans la table films ne correspond à aucun identifiant dans la table réalisateurs ?
A cette question nous avons 2 éléments de réponse à apporter:
- Les films pour lesquels il n'y a pas de réalisateur connu (realisateur_id NULL ou non trouvé dans la table réalisateurs) ne seront pas retournés par le SELECT. Ceci tout simplement parce que nous avons utilisé ici une jointure de type "INNER JOIN" et non "LEFT JOIN"
- De tels incohérences en base ne doivent pas pouvoir se produire et il est possible de s'en protéger en intégrant justement des contraintes d'intégrité
|