Structure générique d'une requête Sélection en SQL

ExempleBesoin d'information : Liste des noms des étudiant.e.s avec le nombre de cours suivis

1
SELECT UCASE(nom), COUNT(suit.no_etud) AS "Nbre de cours suivis"
2
FROM etud, suit
3
WHERE etud.no_etud=suit.no_etud
4
GROUP BY nom, suit.no_etud
5
ORDER BY COUNT(suit.no_etud) DESC;

SyntaxeSyntaxe générique

1
SELECT nom(s) de champ
2
FROM nom(s) de table
3
WHERE condition(s)
4
GROUP BY nom(s) de champ
5
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 (SELECT 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