Le SELECT...FROM...WHERE

Syntaxe

La syntaxe d'une déclaration de requête est la suivante :

1
SELECT <liste d'expressions>
2
FROM <liste de tables>
3
WHERE <conditions>
4
GROUP BY <liste d'attributs>
5
HAVING <conditions>
6
ORDER BY <liste d'attributs>

Les rôles des trois premières lignes sont les suivants :

  • La clause SELECT spécifie le schéma de sortie (projection).

  • La clause FROM précise les tables impliquées et leurs liens (produit cartésien et jointures).

  • La clause WHERE fixe les conditions que doivent remplir les n-uplets résultats (sélection).

Les trois dernières clauses nous font sortir du calcul et de l'algèbre relationnelle :

  • La clause GROUP BY explique comment regrouper des nuplets (agrégation).

  • La clause HAVING impose une condition sur les groupes (i.e. permet d'éliminer l'intégralité d'un groupe, en se basant sur la valeur d'un agrégat calculé sur ce groupe).

  • Enfin ORDER BY définit les critères de tris des résultats.

Cette requête est déclarative au même sens que l'est le calcul relationnel, c'est-à-dire qu'elle explique ce qu'on souhaite obtenir, et non pas comment l'obtenir.

La clause SELECT est suivie d'une liste d'expressions. Chaque expression peut être un attribut, un littéral entre guillemet ou une expression calculée. Le caractère '*' est un joker signifiant « tous les attributs de la table ».

Attention

Il est à noter que la clause SELECT n'interdit pas a priori les doublons, i.e. plusieurs n-uplets égaux. Alors que le modèle relationnel et l'algèbre manipulent des ensembles, en SQL, une table n'est pas un ensemble de n-uplets mais un multi-ensemble. La raison en est simple : éliminer les doublons est coûteux. Les requêtes SELECT/FROM/WHERE sont définies sur des multi-ensembles par défaut. Pour se ramener à un ensemble et donc éliminer les doublons, il faut alors utiliser DISTINCT dans la clause SELECT.