Structure générique d'une requête Sélection en SQL
Exemple : Besoin d'information : Liste des noms des étudiant.e.s avec le nombre de cours suivis
SELECT UCASE(nom), COUNT(suit.no_etud) AS "Nbre de cours suivis"
FROM etud, suit
WHERE etud.no_etud=suit.no_etud
GROUP BY nom, suit.no_etud
ORDER BY COUNT(suit.no_etud) DESC;
Syntaxe : Syntaxe générique
SELECT nom(s) de champ
FROM nom(s) de table
WHERE condition(s)
GROUP BY nom(s) de champ
ORDER BY nom(s) de champ;
Explications
Ligne 1 : Instruction SELECT [affichage]
Obligatoire
Précise le ou les champs à présenter dans la table des résultats
Pour afficher tous les champs de la ou des tables du FROM, mettre * à la place des noms de champ :
SELECT * FROM ...
Éléments séparés (par exemple, noms de champs, fonctions, etc.) par des virgules (chaque élément sera une colonne dans la table) :
SELECT no_etud, nom
Si un même nom de champ est utilisé dans deux tables, faire précéder le nom du champ par le nom de la table en les séparant par un point (par ex.
etud.no_etud, suit.no_etud
)Si un nom de champ et/ou de table comporte une espace ou un caractère spécial, l'encadrer par des apostrophes ouvrantes (par ex. 'no etud')
Possibilité de remplacer dans la présentation des résultats un nom de champ par un alias plus significatif :
SELECT nom AS "Nom de l'étudiant"
Des fonctions peuvent être appliquées sur les champs (par ex. fonctions statistiques comme AVG pour la moyenne)
Prédicats possibles pour éliminer des doublons des résultats
ALL - Prédicat par défaut (implicite) : les doublons sont conservés (
S
ELECT ALL nom(s) de champ
)DISTINCT - Pour éliminer les doublons dans les lignes de résultats :
SELECT DISTINCT nom(s) de champ
DISTINCTROW - Pour éliminer les doublons dans les lignes de la table de données :
SELECT DISTINCTROW nom(s) de champ
Ligne 2 : Clause FROM [source des données]
Obligatoire
Précise la source des données, soit principalement la ou les tables d'où proviennent les champs
Noms de table séparés par des virgules :
FROM cours, suit
Des alias peuvent être utilisés lorsqu'une table est utilisée plus d'une fois dans une clause FROM :
FROM cours AS c1, cours AS c2
Il est à noter qu'on pourrait retrouver autre chose que des tables, notamment une sous-requête
Ligne 3 : Clause WHERE [conditions]
Facultative
Précise la (les) condition(s) pour retenir des enregistrements
Permet entre autres de faire les jointures entre des tables (par ex.
SELECT no_etud, no_cours FROM cours, suit WHERE cours.no_cours=suit.no_cours;
)
Les lignes retenues sont celles pour lesquelles la condition est vraie
Principaux types de condition
Égalité par ex.
WHERE etud.no_etud = suit.no_etud
Inégalité par ex.
WHERE nom < 'L'
Différence par ex.
WHERE no_prof <> ''
Caractères génériques par ex.
WHERE nom LIKE 'Asi%'
Plusieurs conditions peuvent être reliées par des opérateurs booléens (AND, OR) (par ex.
WHERE cours.no_cours=suit.no_cours AND suit.no_etud = '10003'
). L'opérateur NOT permet d'obtenir la négation d'une condition (par ex.WHERE local NOT LIKE 'C%'
).
Ligne 4 : Clause GROUP BY [regroupement]
Facultative
Précise le ou les champs servant à regrouper les données
Le regroupement des lignes par rapport à un ou des champs permet d'appliquer des fonctions d'agrégation sur ce (ces) champ(s) telles que COUNT, AVG, MIN, MAX :
SELECT COUNT(no_etud) FROM etud
Ligne 5 : Clause ORDER BY [tri]
Facultative
Précise le ou les champs servant de clé(s) de tri des résultats; si plus d'une clé de tri, les séparer par une virgule :
ORDER BY note, nom
Par défaut, le tri est ascendant; pour un tri descendant, ajouter DESC après le nom de champ :
ORDER BY note DESC