Langage d'interrogation des données (LID)
- Fiche de cours
- Quiz
- Profs en ligne
- Videos
- Application mobile
Objectifs : qu’est-ce permet un langage
d’interrogation de données ? Qu’est-ce
qu’une commande SELECT, une clause FROM, WHERE, ORDER
BY ?
Le langage d’interrogation de données (LID) permet d’établir une combinaison d’opérations portant sur des tables (relation). Le résultat de cette combinaison d'opérations est lui-même une table dont l’existence ne dure qu'un temps.
On observera qu’en fait l'ordre SQL SELECT est composé de six clauses dont quatre sont optionnelles. La plupart du temps, la difficulté réside dans la compréhension de la différence entre le filtre WHERE et le filtre HAVING. Le filtre WHERE permet de filtrer les données des tables tandis que le filtre HAVING permet de filtrer les données du résultat.
Voici les clauses de l'ordre SELECT :
SELECT | NomChamp1, NomChamp2 |
Champs à projeter ou à calculer ou fonction d’agrégat |
FROM | TABLE1, TABLE2… | Tables utiles à la requête |
WHERE | Expression AND/OR | Jointures et restrictions |
GROUP BY | NomChamp | Regroupement de résultat d’opérations d’agrégat |
HAVING | Expression | Restriction sur l’affichage des résultats d’opérations d’agrégat |
ORDER BY | NomChamp [ASC]/DESC | Critères de tri |
Nous n’étudierons donc pas toutes les clauses du langage d’interrogation de données mais seulement les suivantes : SELECT et FROM, WHERE et ORDER BY.
1. La commande SELECT et la clause FROM
• Le SELECT est la commande de base du
SQL destinée à extraire des données
d’une base ou calculer de nouvelles données à
partir d’existantes. La syntaxe est la suivante :SELECT [DISTINCT ou ALL] * ou liste de colonnes
FROM nom de table ou de la vue
[WHERE prédicats]
[GROUP BY ordre des groupes]
[HAVING condition]
[ORDER BY ] liste de colonnes
A côté de cette syntaxe, il existe les agrégats suivants :
- SUM […] : renvoie à la somme d'un champ (valeurs de données de type numérique ou date/heure).
- AVG […] : renvoie la moyenne d'un champ (valeurs de données de type numérique ou date/heure).
- MIN […] : renvoie la valeur minimale d'un champ (valeurs de données de type numérique, date et texte).
- MAX […] : renvoie la valeur maximale d'un champ (valeurs de données de type numérique, date et texte).
- COUNT […] : renvoie le nombre d’enregistrements de la table.
• Il est possible de surnommer une table dans la clause FROM, dans ce cas, la syntaxe de la partie FROM de la commande SELECT est la suivante :
FROM nom_de_table ou nom_de_la_vue surnom
2. Les clauses WHERE et ORDER BY
• La clause WHERE est un filtre sur les
données, ce qui permet soit d’effectuer des jointures
ou des restrictions. La syntaxe est la suivante :WHERE [prédicats]
Le prédicat doit contenir n’importe quelle expression logique renvoyant une valeur vraie.
Exemple :
SELECT CLI_NOM FROM T_CLIENT WHERE 1=1 |
CLI_NOM ------- DUPONT MARTIN BOUVIER DUBOIS DREYFUS FAURE LACOMBE DUHAMEL BOYER MARTIN ... |
Attention : la plupart des SGBDR ne comportent pas de colonne de type booléen. Une requête comme la première risque d'échouer.
Exemple :
SELECT * FROM TJ_CHB_PLN_CLI WHERE CHB_PLN_CLI_OCCUPE |
ERREUR ! bien que CHB_PLN_CLI_OCCUPE puisse être du booléen, la plupart des compilateurs SQL n’acceptent pas ce test direct. |
SELECT * FROM TJ_CHB_PLN_CLI WHERE CHB_PLN_CLI_OCCUPE = True |
CORRECT ... Mais sur certains compilateurs SQL il faut faire : CHB_PLN_CLI_OCCUPE = 'True' (littéral). Si le type booléen n'existe pas, alors il faut faire CHB_PLN_CLI_OCCUPE = 1 si l'on a choisi de définir les booléens comme INTEGER(1) avec 0 et 1 |
• La clause ORDER BY permet de définir le tri des colonnes de la réponse, soit en précisant le nom littéral de la colonne, soit en précisant son numéro d'ordre dans l'énumération qui suit le mot clef SELECT. Sa syntaxe est la suivante :
ORDER BY colonne1 | 1 [ASC ou DESC ] [, colonne2 | 2 [ASC ou DESC ] ...
ASC spécifie l’ordre ascendant et DESC l’ordre descendant du tri. ASC ou DESC peuvent être omis, dans ce cas c'est l'ordre ascendant qui est utilisé par défaut.
Bien que la clause ORDER BY ne soit pas nécessaire, il est souvent utile de trier la réponse en fonction des colonnes. En revanche le temps de réponse s'en ressent souvent.
Pour spécifier l'ordre de tri, on doit placer les noms des colonnes séparées par des virgules juste après le mot clef ORDER BY, dans l'ordre voulu. On peut aussi utiliser le rang de chaque colonne dans l'ordre spécifié dans la clause SELECT.
Attention : le tri est un tri interne, il ne faut donc placer dans cette clause que les noms des colonnes présentées dans la clause SELECT.
Souvent, le fait de placer DISTINCT suffit, en général, à établir un tri puisque le moteur doit se livrer à une comparaison des lignes mais ce mécanisme n'est pas garanti car ce tri s’effectue dans un ordre non contrôlable qui peut varier d’un serveur à l’autre.
Exemple :
SELECT CLI_NOM, CLI_PRENOM FROM T_CLIENT ORDER BY CLI_NOM, CLI_PRENOM ou SELECT CLI_NOM, CLI_PRENOM FROM T_CLIENT ORDER BY 1, 2 |
CLI_NOM CLI_PRENOM -------- ---------- AIACH Alexandre ALBERT Christian AUZENAT Michel BACQUE Michel BAILLY Jean-François BAVEREL Frédéric BEAUNEE Pierre BENATTAR Bernard BENATTAR Pierre BENZAQUI Joël ... |
Remarque : les marqueurs NULL sont situés en premier dans l'ordre ainsi établi.
Un problème, qui n’est pas résolu, est de pouvoir choisir l’ordre des colonnes de la réponse. Sur certains serveurs cela peut être obtenu en plaçant les noms des colonnes à obtenir dans l’ordre où l’on veut les voir apparaître dans la clause SELECT mais cette possibilité n'est jamais garantie.
Attention : la clause ORDER BY est la dernière clause de tout ordre SQL et ne doit figurer qu'une seule fois dans le SELECT, même s'il existe des requêtes imbriquées ou un jeu de requêtes ensemblistes.
Voici un exemple illustrant tous les types de clauses.
Exemple : liste des loyers toutes charges comprises des locataires à Lille par ordre alphabétique.
SELECT NomClt, NumAppart, [loyerHC]
+ charges [AS LoyerTCC]
3 champs à projeter
dont un champ calculé
FROM CLIENT, APPARTEMENT
Tables utiles à la requête
WHERE CLIENT.NumAppart =
APPARTEMENT. NumAppart
Jointures entre les 2 tables
AND VilleAppart = « Lille »
Restriction aux clients de Lille
ORDER BY NomClt ASC
Tri par ordre alphabétique du nom.
L’essentiel
L’utilité d’un LID est de réaliser des combinaisons d’opérations sur différentes tables. L’utilisation des clauses, même celles dîtes optionnelles, est importante. La clause SELECT permet d’extraire des données d’une base ou calculer de nouvelles données à partir d’existantes. La clause FROM permet de renommer une table. Les clauses WHERE et ORDER BY permettent, successivement, de filtrer et de trier ces mêmes données.
L’utilité d’un LID est de réaliser des combinaisons d’opérations sur différentes tables. L’utilisation des clauses, même celles dîtes optionnelles, est importante. La clause SELECT permet d’extraire des données d’une base ou calculer de nouvelles données à partir d’existantes. La clause FROM permet de renommer une table. Les clauses WHERE et ORDER BY permettent, successivement, de filtrer et de trier ces mêmes données.
Vous avez obtenu75%de bonnes réponses !