Rappel de la commande SELECT
Comme nous l’avons vu précédemment, la commande SELECT permet de façon générale la récupération de toutes les lignes d’une table. Elle renvoie toute colonne ou toute ligne de la base de données sur laquelle la requête s’applique. Ces informations retournées autrement dit les contenues des lignes et des colonnes peuvent contenir des données répétitives si une table contient des doublons (les tuples dupliquées ou la saisie répétitive des mêmes informations dans des tables). Pour éviter ce désagrément, on ajoute la clause DISTINCT à la commande SELECT.
La clause DISTINCT
La clause DISTINCT permet d’éliminer le renvoie des doublons dans un résultat. Lorsqu’on ajoute à la commande principale SELECT la clause DISTINCT, on obtient des données non répétées ou des données toutes différentes. Dans les résultats retournés, chaque donnée est unique par contre avec la commande SELECT sans DISTINCT, une même donnée est renvoyée autant de fois qu’elle a été saisie dans une table.
La clause DISTINCT élimine toute donnée (ligne) sélectionnée deux ou plusieurs fois par la commande SELECT dans une ou plusieurs tables pour avoir des données toutes différentes, c’est-à-dire une liste d’éléments uniques.
La syntaxe : SELECT DISTINCT nom_attribut FROM nom_table;
On peut utiliser une requête avec la commande SELECT sans DISTINCT pour connaître le nombre total de valeurs présentes dans un ou plusieurs attributs d’une table. En outre lorsqu’on l’utilise dans une requête de la commande SELECT accompagnée de la clause DISTINCT, on détermine le nombre de valeurs différentes présentes dans un ou plusieurs attributs d’une table.
Pour constater ces différences, nous allons utiliser la table employee de notre base de données Person. Dans cette table on a enregistré deux fois le nom d’une personne par exemple « Jones Smith ».
id_employee | last_name | first_name | salary | id_customer |
1 | Jones | Smith | 1200 | 1 |
2 | Jack | Harry | 6030 | 3 |
3 | William | James | 7005 | 2 |
4 | Michael | Oliver | 3500 | 1 |
5 | Jones | Smith | 1200 | 1 |
Table employee
Utilisation de la commande SELECT sans la clause DISTINCT
On affiche tous les noms et prénoms des personnes présentes dans cette table par une requête de la commande SELECT sans ajouter la clause DISTINCT.
SELECT last_name, first_name FROM employee ;
Le resultat :
last_name | first_name |
Jones | Smith |
Jack | Harry |
William | James |
Michael | Oliver |
Jones | Smith |
Dans ce résultat renvoyé on voit le nom de « Jones Smith » qui s’est répété deux fois. Toutes les lignes (valeurs) de l’attribut last_name et celles de l’attribut first_name sont concernées. On a affiché tous les enregistrements des noms des personnes sans tenir compte des noms qui ont été répétés.
Donc dans une situation où on veut éviter ce genre phénomène (résultats avec des doublons), on ajoute alors à la commande SELECT la clause DISTINCT. On obtient une syntaxe suivante :
Utilisation de la commande SELECT avec la clause DISTINCT
On affiche tous les différents noms et prénoms de toutes les personnes présentes dans notre table avec SELECT ajouté DISTINCT.
SELECT DISTINCT last_name, first_name FROM employee ;
Le résultat :
last_name | first_name |
Jones | Smith |
Jack | Harry |
William | James |
Michael | Oliver |
Dans la réponse de cette requête, il n y a plus de nom répété. Les lignes qui contiennent les mêmes valeurs au niveau des attributs concernés last_name et first_name ont été prises en compte une seule fois. Le nom de la personne « Jones Smith » qui existe deux fois dans notre table est renvoyé qu’une seule fois dans le résultat.
Conclusion
La clause DISTINCT permet d’afficher les différentes valeurs des attributs d’une table. Elle a pour action la comparaison des valeurs des lignes d’un attribut ou d’une table. Avec la commande SELECT sans DISTINCT, on peut aboutir à des résultats qui contiennent certaines informations répétées à un certain nombre de fois selon le nombre de fois que ces informations ont été saisies dans un gestionnaire de base de données.