Langage d'interrogation des données (LID) - Cours de Sciences de gestion et numérique Terminale pro avec Maxicours

01 49 08 38 00 - appel gratuit de 9h à 18h (hors week-end)

Langage d'interrogation des données (LID)

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.

Comment as-tu trouvé ce cours ?

Évalue ce cours !

 

Découvrez
Maxicours

Des profs en ligne

Géographie

Des profs en ligne

  • 6j/7 de 17h à 20h
  • Par chat, audio, vidéo
  • Sur les 10 matières principales

Des ressources riches

  • Fiches, vidéos de cours
  • Exercices & corrigés
  • Modules de révisions Bac et Brevet

Des outils ludiques

  • Coach virtuel
  • Quiz interactifs
  • Planning de révision

Des tableaux de bord

  • Suivi de la progression
  • Score d’assiduité
  • Une interface Parents